• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
DEF_TEST(SkDeflateWStream,r)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