Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Unified Diff: tests/StreamTest.cpp

Issue 1146903004: SkBlockMemoryStream implements peek() (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/core/SkStream.cpp ('K') | « src/core/SkStream.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+}
« src/core/SkStream.cpp ('K') | « src/core/SkStream.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698