1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkFlate.h" 9 #include "SkRandom.h" 10 #include "Test.h" 11 12 DEF_TEST(SkDeflateWStream, r) { 13 SkRandom random(123456); 14 for (int i = 0; i < 50; ++i) { 15 uint32_t size = random.nextULessThan(10000); 16 SkAutoTMalloc<uint8_t> buffer(size); 17 for (uint32_t j = 0; j < size; ++j) { 18 buffer[j] = random.nextU() & 0xff; 19 } 20 21 SkDynamicMemoryWStream dynamicMemoryWStream; 22 { 23 SkDeflateWStream deflateWStream(&dynamicMemoryWStream); 24 uint32_t j = 0; 25 while (j < size) { 26 uint32_t writeSize = 27 SkTMin(size - j, random.nextRangeU(1, 400)); 28 if (!deflateWStream.write(&buffer[j], writeSize)) { 29 ERRORF(r, "something went wrong."); 30 return; 31 } 32 j += writeSize; 33 } 34 } 35 SkAutoTDelete<SkStreamAsset> compressed( 36 dynamicMemoryWStream.detachAsStream()); 37 38 SkDynamicMemoryWStream decompressedDynamicMemoryWStream; 39 SkAssertResult(SkFlate::Inflate(compressed, 40 &decompressedDynamicMemoryWStream)); 41 42 SkAutoTDelete<SkStreamAsset> decompressed( 43 decompressedDynamicMemoryWStream.detachAsStream()); 44 45 if (decompressed->getLength() != size) { 46 ERRORF(r, "Decompression failed to get right size [%d]." 47 " %u != %u", i, (unsigned)(decompressed->getLength()), 48 (unsigned)size); 49 SkString s = SkStringPrintf("/tmp/deftst_compressed_%d", i); 50 SkFILEWStream o(s.c_str()); 51 o.writeStream(compressed.get(), compressed->getLength()); 52 compressed->rewind(); 53 54 s = SkStringPrintf("/tmp/deftst_input_%d", i); 55 SkFILEWStream o2(s.c_str()); 56 o2.write(&buffer[0], size); 57 58 continue; 59 } 60 uint32_t minLength = SkTMin(size, 61 (uint32_t)(decompressed->getLength())); 62 for (uint32_t i = 0; i < minLength; ++i) { 63 uint8_t c; 64 SkDEBUGCODE(size_t rb =)decompressed->read(&c, sizeof(uint8_t)); 65 SkASSERT(sizeof(uint8_t) == rb); 66 if (buffer[i] != c) { 67 ERRORF(r, "Decompression failed at byte %u.", (unsigned)i); 68 break; 69 } 70 } 71 } 72 } 73