diff options
author | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-03-07 03:39:23 +0000 |
---|---|---|
committer | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-03-07 03:39:23 +0000 |
commit | 5e5adfd12cc2cb194db971708cd7f34ff47e10b4 (patch) | |
tree | 4a516106bdc5844e275d6d2bcd03dfea80936828 /tests/StreamTest.cpp | |
parent | 62533ed6bb490e9abf5d02686d897a93c5e85d51 (diff) |
migrate more legacy unittests into tests/
SkParse yet to be cleaned up
git-svn-id: http://skia.googlecode.com/svn/trunk@113 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/StreamTest.cpp')
-rw-r--r-- | tests/StreamTest.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/tests/StreamTest.cpp b/tests/StreamTest.cpp new file mode 100644 index 0000000000..704ab4a6a1 --- /dev/null +++ b/tests/StreamTest.cpp @@ -0,0 +1,111 @@ +#include "Test.h" +#include "SkRandom.h" +#include "SkStream.h" + +#define MAX_SIZE (256 * 1024) + +static void random_fill(SkRandom& rand, void* buffer, size_t size) { + char* p = (char*)buffer; + char* stop = p + size; + while (p < stop) { + *p++ = (char)(rand.nextU() >> 8); + } +} + +static void test_buffer(skiatest::Reporter* reporter) { + SkRandom rand; + SkAutoMalloc am(MAX_SIZE * 2); + char* storage = (char*)am.get(); + char* storage2 = storage + MAX_SIZE; + + random_fill(rand, storage, MAX_SIZE); + + for (int sizeTimes = 0; sizeTimes < 100; sizeTimes++) { + int size = rand.nextU() % MAX_SIZE; + if (size == 0) { + size = MAX_SIZE; + } + for (int times = 0; times < 100; times++) { + int bufferSize = 1 + (rand.nextU() & 0xFFFF); + SkMemoryStream mstream(storage, size); + SkBufferStream bstream(&mstream, bufferSize); + + int bytesRead = 0; + while (bytesRead < size) { + int s = 17 + (rand.nextU() & 0xFFFF); + int ss = bstream.read(storage2, s); + REPORTER_ASSERT(reporter, ss > 0 && ss <= s); + REPORTER_ASSERT(reporter, bytesRead + ss <= size); + REPORTER_ASSERT(reporter, memcmp(storage + bytesRead, storage2, ss) == 0); + bytesRead += ss; + } + REPORTER_ASSERT(reporter, bytesRead == size); + } + } +} + +static void TestRStream(skiatest::Reporter* reporter) { + static const char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + char copy[sizeof(s)]; + SkRandom rand; + + for (int i = 0; i < 65; i++) + { + char* copyPtr = copy; + SkMemoryStream mem(s, sizeof(s)); + SkBufferStream buff(&mem, i); + + do { + copyPtr += buff.read(copyPtr, rand.nextU() & 15); + } while (copyPtr < copy + sizeof(s)); + REPORTER_ASSERT(reporter, copyPtr == copy + sizeof(s)); + REPORTER_ASSERT(reporter, memcmp(s, copy, sizeof(s)) == 0); + } + test_buffer(reporter); +} + +static void TestWStream(skiatest::Reporter* reporter) +{ + if (false) { + SkDebugWStream s; + + s.writeText("compare: 0 "); s.writeDecAsText(0); s.newline(); + s.writeText("compare: 591 "); s.writeDecAsText(591); s.newline(); + s.writeText("compare: -9125 "); s.writeDecAsText(-9125); s.newline(); + s.writeText("compare: 0 "); s.writeHexAsText(0, 0); s.newline(); + s.writeText("compare: 03FA "); s.writeHexAsText(0x3FA, 4); s.newline(); + s.writeText("compare: DEADBEEF "); s.writeHexAsText(0xDEADBEEF, 4); s.newline(); + s.writeText("compare: 0 "); s.writeScalarAsText(SkIntToScalar(0)); s.newline(); + s.writeText("compare: 27 "); s.writeScalarAsText(SkIntToScalar(27)); s.newline(); + s.writeText("compare: -119 "); s.writeScalarAsText(SkIntToScalar(-119)); s.newline(); + s.writeText("compare: 851.3333 "); s.writeScalarAsText(SkIntToScalar(851) + SK_Scalar1/3); s.newline(); + s.writeText("compare: -0.08 "); s.writeScalarAsText(-SK_Scalar1*8/100); s.newline(); + } + + { + SkDynamicMemoryWStream ds; + const char s[] = "abcdefghijklmnopqrstuvwxyz"; + int i; + for (i = 0; i < 100; i++) { + REPORTER_ASSERT(reporter, ds.write(s, 26)); + } + REPORTER_ASSERT(reporter, ds.getOffset() == 100 * 26); + char* dst = new char[100 * 26 + 1]; + dst[100*26] = '*'; + ds.copyTo(dst); + REPORTER_ASSERT(reporter, dst[100*26] == '*'); + // char* p = dst; + for (i = 0; i < 100; i++) + REPORTER_ASSERT(reporter, memcmp(&dst[i * 26], s, 26) == 0); + REPORTER_ASSERT(reporter, memcmp(dst, ds.getStream(), 100*26) == 0); + delete[] dst; + } +} + +static void TestStreams(skiatest::Reporter* reporter) { + TestRStream(reporter); + TestWStream(reporter); +} + +#include "TestClassDef.h" +DEFINE_TESTCLASS("Stream", StreamTestClass, TestStreams) |