54f0d1b711
I removed unused parameters in the tests wherever it was trivial to do so. I'm trying to get the easy ones out of the way before we get into more involved discussions around this. Review URL: https://codereview.appspot.com/7394055 git-svn-id: http://skia.googlecode.com/svn/trunk@7891 2bbb7eff-a529-9590-31e7-b0007b416f81
122 lines
3.6 KiB
C++
122 lines
3.6 KiB
C++
/*
|
|
* Copyright 2011 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "Test.h"
|
|
#include "SkChunkAlloc.h"
|
|
#include "SkUtils.h"
|
|
|
|
static void test_chunkalloc(skiatest::Reporter* reporter) {
|
|
size_t min = 256;
|
|
SkChunkAlloc alloc(min);
|
|
|
|
REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity());
|
|
REPORTER_ASSERT(reporter, 0 == alloc.blockCount());
|
|
REPORTER_ASSERT(reporter, !alloc.contains(NULL));
|
|
REPORTER_ASSERT(reporter, !alloc.contains(reporter));
|
|
|
|
alloc.reset();
|
|
REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity());
|
|
REPORTER_ASSERT(reporter, 0 == alloc.blockCount());
|
|
|
|
size_t size = min >> 1;
|
|
void* ptr = alloc.allocThrow(size);
|
|
REPORTER_ASSERT(reporter, alloc.totalCapacity() >= size);
|
|
REPORTER_ASSERT(reporter, alloc.blockCount() > 0);
|
|
REPORTER_ASSERT(reporter, alloc.contains(ptr));
|
|
|
|
alloc.reset();
|
|
REPORTER_ASSERT(reporter, !alloc.contains(ptr));
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
static void set_zero(void* dst, size_t bytes) {
|
|
char* ptr = (char*)dst;
|
|
for (size_t i = 0; i < bytes; ++i) {
|
|
ptr[i] = 0;
|
|
}
|
|
}
|
|
|
|
#define MAX_ALIGNMENT 64
|
|
#define MAX_COUNT ((MAX_ALIGNMENT) * 32)
|
|
#define PAD 32
|
|
#define TOTAL (PAD + MAX_ALIGNMENT + MAX_COUNT + PAD)
|
|
|
|
#define VALUE16 0x1234
|
|
#define VALUE32 0x12345678
|
|
|
|
static bool compare16(const uint16_t base[], uint16_t value, int count) {
|
|
for (int i = 0; i < count; ++i) {
|
|
if (base[i] != value) {
|
|
SkDebugf("[%d] expected %x found %x\n", i, value, base[i]);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
static bool compare32(const uint32_t base[], uint32_t value, int count) {
|
|
for (int i = 0; i < count; ++i) {
|
|
if (base[i] != value) {
|
|
SkDebugf("[%d] expected %x found %x\n", i, value, base[i]);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
static void test_16(skiatest::Reporter* reporter) {
|
|
uint16_t buffer[TOTAL];
|
|
|
|
for (int count = 0; count < MAX_COUNT; ++count) {
|
|
for (int alignment = 0; alignment < MAX_ALIGNMENT; ++alignment) {
|
|
set_zero(buffer, sizeof(buffer));
|
|
|
|
uint16_t* base = &buffer[PAD + alignment];
|
|
sk_memset16(base, VALUE16, count);
|
|
|
|
REPORTER_ASSERT(reporter,
|
|
compare16(buffer, 0, PAD + alignment) &&
|
|
compare16(base, VALUE16, count) &&
|
|
compare16(base + count, 0, TOTAL - count - PAD - alignment));
|
|
}
|
|
}
|
|
}
|
|
|
|
static void test_32(skiatest::Reporter* reporter) {
|
|
uint32_t buffer[TOTAL];
|
|
|
|
for (int count = 0; count < MAX_COUNT; ++count) {
|
|
for (int alignment = 0; alignment < MAX_ALIGNMENT; ++alignment) {
|
|
set_zero(buffer, sizeof(buffer));
|
|
|
|
uint32_t* base = &buffer[PAD + alignment];
|
|
sk_memset32(base, VALUE32, count);
|
|
|
|
REPORTER_ASSERT(reporter,
|
|
compare32(buffer, 0, PAD + alignment) &&
|
|
compare32(base, VALUE32, count) &&
|
|
compare32(base + count, 0, TOTAL - count - PAD - alignment));
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test sk_memset16 and sk_memset32.
|
|
* For performance considerations, implementations may take different paths
|
|
* depending on the alignment of the dst, and/or the size of the count.
|
|
*/
|
|
static void TestMemset(skiatest::Reporter* reporter) {
|
|
test_16(reporter);
|
|
test_32(reporter);
|
|
|
|
test_chunkalloc(reporter);
|
|
};
|
|
|
|
#include "TestClassDef.h"
|
|
DEFINE_TESTCLASS("Memset", TestMemsetClass, TestMemset)
|