| Index: tests/FlateTest.cpp
|
| diff --git a/tests/FlateTest.cpp b/tests/FlateTest.cpp
|
| index aacde34a1be8cea4b636a2e213b15124e544ac7d..a49ff5fd1b6af074e0c52dbfda0cc95d40c01694 100644
|
| --- a/tests/FlateTest.cpp
|
| +++ b/tests/FlateTest.cpp
|
| @@ -5,11 +5,9 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -#include <stdlib.h>
|
| -#include <string.h>
|
| -
|
| #include "SkData.h"
|
| #include "SkFlate.h"
|
| +#include "SkRandom.h"
|
| #include "SkStream.h"
|
| #include "Test.h"
|
|
|
| @@ -28,72 +26,87 @@ public:
|
| static const size_t kGetSizeKey = 0xDEADBEEF;
|
| };
|
|
|
| +// Returns a deterministic data of the given size.
|
| +static SkData* new_test_data(size_t dataSize) {
|
| + SkAutoTMalloc<uint8_t> testBuffer(dataSize);
|
| + SkRandom random(0);
|
| + for (size_t i = 0; i < dataSize; ++i) {
|
| + testBuffer[i] = random.nextU() & 0xFF;
|
| + }
|
| + return SkData::NewFromMalloc(testBuffer.detach(), dataSize);
|
| +}
|
| +
|
| static void TestFlate(skiatest::Reporter* reporter, SkMemoryStream* testStream,
|
| size_t dataSize) {
|
| - if (testStream == NULL)
|
| - return;
|
| + SkASSERT(testStream != NULL);
|
|
|
| - SkMemoryStream testData(dataSize);
|
| - uint8_t* data = (uint8_t*)testData.getMemoryBase();
|
| - srand(0); // Make data deterministic.
|
| - for (size_t i = 0; i < dataSize; i++)
|
| - data[i] = rand() & 0xFF;
|
| + SkAutoDataUnref testData(new_test_data(dataSize));
|
| + SkASSERT(testData->size() == dataSize);
|
|
|
| - testStream->setMemory(testData.getMemoryBase(), dataSize, true);
|
| + testStream->setMemory(testData->data(), dataSize, /*copyData=*/ true);
|
| SkDynamicMemoryWStream compressed;
|
| - bool status = SkFlate::Deflate(testStream, &compressed);
|
| - REPORTER_ASSERT(reporter, status);
|
| + bool deflateSuccess = SkFlate::Deflate(testStream, &compressed);
|
| + REPORTER_ASSERT(reporter, deflateSuccess);
|
|
|
| // Check that the input data wasn't changed.
|
| size_t inputSize = testStream->getLength();
|
| - if (inputSize == 0)
|
| + if (inputSize == 0) {
|
| inputSize = testStream->read(NULL, SkZeroSizeMemStream::kGetSizeKey);
|
| - REPORTER_ASSERT(reporter, testData.getLength() == inputSize);
|
| - REPORTER_ASSERT(reporter, memcmp(testData.getMemoryBase(),
|
| - testStream->getMemoryBase(),
|
| - testData.getLength()) == 0);
|
| + }
|
| + REPORTER_ASSERT(reporter, dataSize == inputSize);
|
| + if (dataSize == inputSize) {
|
| + REPORTER_ASSERT(reporter, memcmp(testData->data(),
|
| + testStream->getMemoryBase(),
|
| + dataSize) == 0);
|
| + }
|
|
|
| // Assume there are two test sizes, big and small.
|
| - if (dataSize < 1024)
|
| - REPORTER_ASSERT(reporter, compressed.getOffset() < 1024);
|
| - else
|
| - REPORTER_ASSERT(reporter, compressed.getOffset() > 1024);
|
| + if (dataSize < 1024) {
|
| + REPORTER_ASSERT(reporter, compressed.getOffset() < 1024);
|
| + } else {
|
| + REPORTER_ASSERT(reporter, compressed.getOffset() > 1024);
|
| + }
|
|
|
| - SkAutoDataUnref data1(compressed.copyToData());
|
| + SkAutoDataUnref compressedData(compressed.copyToData());
|
| + testStream->setData(compressedData.get());
|
|
|
| - testStream->setData(data1.get())->unref();
|
| SkDynamicMemoryWStream uncompressed;
|
| - status = SkFlate::Inflate(testStream, &uncompressed);
|
| - REPORTER_ASSERT(reporter, status);
|
| + bool inflateSuccess = SkFlate::Inflate(testStream, &uncompressed);
|
| + REPORTER_ASSERT(reporter, inflateSuccess);
|
|
|
| // Check that the input data wasn't changed.
|
| inputSize = testStream->getLength();
|
| - if (inputSize == 0)
|
| + if (inputSize == 0) {
|
| inputSize = testStream->read(NULL, SkZeroSizeMemStream::kGetSizeKey);
|
| - REPORTER_ASSERT(reporter, data1->size() == inputSize);
|
| - REPORTER_ASSERT(reporter, memcmp(testStream->getMemoryBase(),
|
| - data1->data(),
|
| - data1->size()) == 0);
|
| + }
|
| + REPORTER_ASSERT(reporter, compressedData->size() == inputSize);
|
| + if (compressedData->size() == inputSize) {
|
| + REPORTER_ASSERT(reporter, memcmp(testStream->getMemoryBase(),
|
| + compressedData->data(),
|
| + compressedData->size()) == 0);
|
| + }
|
|
|
| // Check that the uncompressed data matches the source data.
|
| - SkAutoDataUnref data2(uncompressed.copyToData());
|
| - REPORTER_ASSERT(reporter, testData.getLength() == uncompressed.getOffset());
|
| - REPORTER_ASSERT(reporter, memcmp(testData.getMemoryBase(),
|
| - data2->data(),
|
| - testData.getLength()) == 0);
|
| + SkAutoDataUnref uncompressedData(uncompressed.copyToData());
|
| + REPORTER_ASSERT(reporter, dataSize == uncompressedData->size());
|
| + if (dataSize == uncompressedData->size()) {
|
| + REPORTER_ASSERT(reporter, memcmp(testData->data(),
|
| + uncompressedData->data(),
|
| + dataSize) == 0);
|
| + }
|
| }
|
|
|
| DEF_TEST(Flate, reporter) {
|
| - TestFlate(reporter, NULL, 0);
|
| -#if defined(SK_ZLIB_INCLUDE) && !defined(SK_DEBUG)
|
| +#ifdef SK_HAS_ZLIB
|
| REPORTER_ASSERT(reporter, SkFlate::HaveFlate());
|
| -
|
| - SkMemoryStream memStream;
|
| - TestFlate(reporter, &memStream, 512);
|
| - TestFlate(reporter, &memStream, 10240);
|
| -
|
| - SkZeroSizeMemStream fileStream;
|
| - TestFlate(reporter, &fileStream, 512);
|
| - TestFlate(reporter, &fileStream, 10240);
|
| #endif
|
| + if (SkFlate::HaveFlate()) {
|
| + SkMemoryStream memStream;
|
| + TestFlate(reporter, &memStream, 512);
|
| + TestFlate(reporter, &memStream, 10240);
|
| +
|
| + SkZeroSizeMemStream fileStream;
|
| + TestFlate(reporter, &fileStream, 512);
|
| + TestFlate(reporter, &fileStream, 10240);
|
| + }
|
| }
|
|
|