Chromium Code Reviews| Index: tests/StreamTest.cpp |
| diff --git a/tests/StreamTest.cpp b/tests/StreamTest.cpp |
| index 3641f3b8241babe008b83b55b26bf2657139e044..6bc187109f39e4c1b6393dbf3fa3143e12f739a9 100644 |
| --- a/tests/StreamTest.cpp |
| +++ b/tests/StreamTest.cpp |
| @@ -273,3 +273,62 @@ DEF_TEST(StreamPeek, reporter) { |
| } |
| } |
| #endif |
| + |
| +// Asserts that asset == expected and is peekable. |
| +static void stream_peek_test(skiatest::Reporter*rep, |
| + SkStreamAsset* asset, |
| + const SkData* expected) { |
| + if (asset->getLength() != expected->size()) { |
| + ERRORF(rep, "Unexpected length."); |
| + return; |
| + } |
| + SkRandom rand; |
| + uint8_t buffer[4096]; |
| + const uint8_t* expect = expected->bytes(); |
| + for (unsigned i = 0; i < asset->getLength(); ++i) { |
| + size_t size = (rand.nextU() % sizeof(buffer)) + 1; |
|
scroggo
2015/05/20 15:43:35
Why not rand.nextRangeU(1, sizeof(buffer))?
hal.canary
2015/05/21 13:28:02
Done.
|
| + size = SkTMin(size, asset->getLength() - i); |
| + if (size > 0) { |
|
scroggo
2015/05/20 15:43:35
Can size ever be 0? I guess with an empty asset? I
hal.canary
2015/05/21 13:28:02
Done.
Of course size is always > 0!
|
| + SkASSERT(size <= sizeof(buffer)); |
| + if (!asset->peek(buffer, size)) { |
| + ERRORF(rep, "Peek Failed!"); |
| + return; |
| + } |
| + if (0 != memcmp(buffer, &expect[i], size)) { |
| + ERRORF(rep, "Peek returned wrong bytes!"); |
| + return; |
| + } |
| + } |
| + uint8_t value; |
| + asset->read(&value, 1); |
|
scroggo
2015/05/20 15:43:35
Check the return value too?
hal.canary
2015/05/21 13:28:02
Done.
|
| + if (value != expect[i]) { |
| + ERRORF(rep, "Read Failed!"); |
| + return; |
| + } |
| + } |
| +} |
| + |
| +DEF_TEST(StreamPeek_BlockMemoryStream, rep) { |
| + const static int kSeed = 1234; |
| + SkRandom valueSource(kSeed); |
| + SkRandom rand(kSeed << 1); |
| + uint8_t buffer[4096]; |
| + SkDynamicMemoryWStream dynamicMemoryWStream; |
| + for (int i = 0; i < 32; ++i) { |
| + // Randomize the length of the blocks. |
| + size_t size = (rand.nextU() % sizeof(buffer)) + 1; |
| + SkASSERT(size <= sizeof(buffer)); |
| + for (unsigned j = 0; j < size; ++j) { |
| + buffer[j] = valueSource.nextU() & 0xFF; |
| + } |
| + dynamicMemoryWStream.write(buffer, size); |
| + } |
| + SkAutoTDelete<SkStreamAsset> asset(dynamicMemoryWStream.detachAsStream()); |
| + SkAutoTUnref<SkData> expected(SkData::NewUninitialized(asset->getLength())); |
| + uint8_t* expectedPtr = static_cast<uint8_t*>(expected->writable_data()); |
| + valueSource.setSeed(kSeed); // reseed. |
|
scroggo
2015/05/20 15:43:35
So if I understand correctly, you're just trying t
hal.canary
2015/05/21 13:28:02
Acknowledged.
|
| + for (unsigned i = 0; i < asset->getLength(); ++i) { |
| + expectedPtr[i] = valueSource.nextU() & 0xFF; |
| + } |
| + stream_peek_test(rep, asset, expected); |
| +} |