Index: tests/PackBitsTest.cpp |
diff --git a/tests/PackBitsTest.cpp b/tests/PackBitsTest.cpp |
index ce4e8be467ce065db0ed5363af507c269c5f41af..ac9a0aedfb4ec799e605a91403602cf9b60efaac 100644 |
--- a/tests/PackBitsTest.cpp |
+++ b/tests/PackBitsTest.cpp |
@@ -8,57 +8,8 @@ |
#include "SkPackBits.h" |
#include "Test.h" |
-static const uint16_t gTest0[] = { 0, 0, 1, 1 }; |
-static const uint16_t gTest1[] = { 1, 2, 3, 4, 5, 6 }; |
-static const uint16_t gTest2[] = { 0, 0, 0, 1, 2, 3, 3, 3 }; |
-static const uint16_t gTest3[] = { 0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 0, 0, 1 }; |
- |
#include "SkRandom.h" |
static SkRandom gRand; |
-static void rand_fill(uint16_t buffer[], int count) { |
- for (int i = 0; i < count; i++) |
- buffer[i] = (uint16_t)gRand.nextU(); |
-} |
- |
-static void test_pack16(skiatest::Reporter* reporter) { |
- static const struct { |
- const uint16_t* fSrc; |
- int fCount; |
- } gTests[] = { |
- { gTest0, SK_ARRAY_COUNT(gTest0) }, |
- { gTest1, SK_ARRAY_COUNT(gTest1) }, |
- { gTest2, SK_ARRAY_COUNT(gTest2) }, |
- { gTest3, SK_ARRAY_COUNT(gTest3) } |
- }; |
- |
- for (size_t i = 0; i < SK_ARRAY_COUNT(gTests); i++) { |
- uint8_t dst[100]; |
- size_t dstSize = SkPackBits::Pack16(gTests[i].fSrc, |
- gTests[i].fCount, dst); |
- uint16_t src[100]; |
- int srcCount = SkPackBits::Unpack16(dst, dstSize, src); |
- bool match = gTests[i].fCount == srcCount && memcmp(gTests[i].fSrc, src, |
- gTests[i].fCount * sizeof(uint16_t)) == 0; |
- REPORTER_ASSERT(reporter, match); |
- } |
- |
- for (int n = 1000; n; n--) { |
- int size = 50; |
- uint16_t src[100], src2[100]; |
- uint8_t dst[200]; |
- rand_fill(src, size); |
- |
- size_t dstSize = SkPackBits::Pack16(src, size, dst); |
- size_t maxSize = SkPackBits::ComputeMaxSize16(size); |
- REPORTER_ASSERT(reporter, maxSize >= dstSize); |
- |
- int srcCount = SkPackBits::Unpack16(dst, dstSize, src2); |
- REPORTER_ASSERT(reporter, size == srcCount); |
- bool match = memcmp(src, src2, size * sizeof(uint16_t)) == 0; |
- REPORTER_ASSERT(reporter, match); |
- } |
-} |
- |
static const uint8_t gTest80[] = { 0, 0, 1, 1 }; |
static const uint8_t gTest81[] = { 1, 2, 3, 4, 5, 6 }; |
static const uint8_t gTest82[] = { 0, 0, 0, 1, 2, 3, 3, 3 }; |
@@ -86,10 +37,15 @@ static void test_pack8(skiatest::Reporter* reporter) { |
uint8_t dst[100]; |
size_t maxSize = SkPackBits::ComputeMaxSize8(gTests[i].fCount); |
size_t dstSize = SkPackBits::Pack8(gTests[i].fSrc, |
- gTests[i].fCount, dst); |
+ gTests[i].fCount, dst, maxSize - 1); |
+ REPORTER_ASSERT(reporter, dstSize == 0); |
+ dstSize = SkPackBits::Pack8(gTests[i].fSrc, |
+ gTests[i].fCount, dst, sizeof(dst)); |
REPORTER_ASSERT(reporter, dstSize <= maxSize); |
uint8_t src[100]; |
- int srcCount = SkPackBits::Unpack8(dst, dstSize, src); |
+ int srcCount = SkPackBits::Unpack8(dst, dstSize, src, gTests[i].fCount - 1); |
+ REPORTER_ASSERT(reporter, srcCount == 0); |
+ srcCount = SkPackBits::Unpack8(dst, dstSize, src, sizeof(src)); |
bool match = gTests[i].fCount == srcCount && |
memcmp(gTests[i].fSrc, src, |
gTests[i].fCount * sizeof(uint8_t)) == 0; |
@@ -102,30 +58,18 @@ static void test_pack8(skiatest::Reporter* reporter) { |
uint8_t dst[600]; |
rand_fill(src, size); |
- size_t dstSize = SkPackBits::Pack8(src, size, dst); |
+ size_t dstSize = SkPackBits::Pack8(src, size, dst, sizeof(dst)); |
size_t maxSize = SkPackBits::ComputeMaxSize8(size); |
REPORTER_ASSERT(reporter, maxSize >= dstSize); |
- size_t srcCount = SkPackBits::Unpack8(dst, dstSize, src2); |
+ size_t srcCount = SkPackBits::Unpack8(dst, dstSize, src2, size); |
REPORTER_ASSERT(reporter, size == srcCount); |
bool match = memcmp(src, src2, size * sizeof(uint8_t)) == 0; |
REPORTER_ASSERT(reporter, match); |
- |
- for (int j = 0; j < 100; j++) { |
- uint32_t skip = gRand.nextU() % size; |
- uint32_t write = gRand.nextU() % size; |
- if (skip + write > size) { |
- write = size - skip; |
- } |
- SkPackBits::Unpack8(src, skip, write, dst); |
- bool match = memcmp(src, src2 + skip, write) == 0; |
- REPORTER_ASSERT(reporter, match); |
- } |
} |
} |
} |
DEF_TEST(PackBits, reporter) { |
test_pack8(reporter); |
- test_pack16(reporter); |
} |