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); |
+} |