1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6dde0956375e87027df2fdd80d430dd819c217aacreed@google.com */ 7dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 8e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org#include "SkReader32.h" 98f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 10dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 11dde0956375e87027df2fdd80d430dd819c217aacreed@google.comstatic void assert_eof(skiatest::Reporter* reporter, const SkReader32& reader) { 12dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, reader.eof()); 13dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, reader.size() == reader.offset()); 14dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, (const char*)reader.peek() == 15dde0956375e87027df2fdd80d430dd819c217aacreed@google.com (const char*)reader.base() + reader.size()); 16dde0956375e87027df2fdd80d430dd819c217aacreed@google.com} 17dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 18dde0956375e87027df2fdd80d430dd819c217aacreed@google.comstatic void assert_start(skiatest::Reporter* reporter, const SkReader32& reader) { 19dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, 0 == reader.offset()); 20dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, reader.size() == reader.available()); 21dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, reader.isAvailable(reader.size())); 22dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, !reader.isAvailable(reader.size() + 1)); 23dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, reader.peek() == reader.base()); 24dde0956375e87027df2fdd80d430dd819c217aacreed@google.com} 25dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 26dde0956375e87027df2fdd80d430dd819c217aacreed@google.comstatic void assert_empty(skiatest::Reporter* reporter, const SkReader32& reader) { 27dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, 0 == reader.size()); 28dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, 0 == reader.offset()); 29dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, 0 == reader.available()); 30dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, !reader.isAvailable(1)); 31dde0956375e87027df2fdd80d430dd819c217aacreed@google.com assert_eof(reporter, reader); 32dde0956375e87027df2fdd80d430dd819c217aacreed@google.com assert_start(reporter, reader); 33dde0956375e87027df2fdd80d430dd819c217aacreed@google.com} 34dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 35e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(Reader32, reporter) { 36dde0956375e87027df2fdd80d430dd819c217aacreed@google.com SkReader32 reader; 37dde0956375e87027df2fdd80d430dd819c217aacreed@google.com assert_empty(reporter, reader); 38dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, NULL == reader.base()); 39dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, NULL == reader.peek()); 40dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 41dde0956375e87027df2fdd80d430dd819c217aacreed@google.com size_t i; 42dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 43dde0956375e87027df2fdd80d430dd819c217aacreed@google.com const int32_t data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 44dde0956375e87027df2fdd80d430dd819c217aacreed@google.com const SkScalar data2[] = { 0, SK_Scalar1, -SK_Scalar1, SK_Scalar1/2 }; 45bf083a9a2077e26b3e572aeafd6640156ad68e3bepoger@google.com const size_t bufsize = sizeof(data) > sizeof(data2) ? 46bf083a9a2077e26b3e572aeafd6640156ad68e3bepoger@google.com sizeof(data) : sizeof(data2); 47bf083a9a2077e26b3e572aeafd6640156ad68e3bepoger@google.com char buffer[bufsize]; 48dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 49dde0956375e87027df2fdd80d430dd819c217aacreed@google.com reader.setMemory(data, sizeof(data)); 50dde0956375e87027df2fdd80d430dd819c217aacreed@google.com for (i = 0; i < SK_ARRAY_COUNT(data); ++i) { 51dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, sizeof(data) == reader.size()); 52dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, i*4 == reader.offset()); 53dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, (const void*)data == reader.base()); 54dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, (const void*)&data[i] == reader.peek()); 55dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, data[i] == reader.readInt()); 56dde0956375e87027df2fdd80d430dd819c217aacreed@google.com } 57dde0956375e87027df2fdd80d430dd819c217aacreed@google.com assert_eof(reporter, reader); 58dde0956375e87027df2fdd80d430dd819c217aacreed@google.com reader.rewind(); 59dde0956375e87027df2fdd80d430dd819c217aacreed@google.com assert_start(reporter, reader); 60103c036218df4928f99d3d1e109551a3cbb4fb86reed@google.com reader.read(buffer, sizeof(data)); 61103c036218df4928f99d3d1e109551a3cbb4fb86reed@google.com REPORTER_ASSERT(reporter, !memcmp(data, buffer, sizeof(data))); 62dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 63dde0956375e87027df2fdd80d430dd819c217aacreed@google.com reader.setMemory(data2, sizeof(data2)); 64dde0956375e87027df2fdd80d430dd819c217aacreed@google.com for (i = 0; i < SK_ARRAY_COUNT(data2); ++i) { 65dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, sizeof(data2) == reader.size()); 66dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, i*4 == reader.offset()); 67dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, (const void*)data2 == reader.base()); 68dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, (const void*)&data2[i] == reader.peek()); 69dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, data2[i] == reader.readScalar()); 70dde0956375e87027df2fdd80d430dd819c217aacreed@google.com } 71dde0956375e87027df2fdd80d430dd819c217aacreed@google.com assert_eof(reporter, reader); 72dde0956375e87027df2fdd80d430dd819c217aacreed@google.com reader.rewind(); 73dde0956375e87027df2fdd80d430dd819c217aacreed@google.com assert_start(reporter, reader); 74103c036218df4928f99d3d1e109551a3cbb4fb86reed@google.com reader.read(buffer, sizeof(data2)); 75103c036218df4928f99d3d1e109551a3cbb4fb86reed@google.com REPORTER_ASSERT(reporter, !memcmp(data2, buffer, sizeof(data2))); 76dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 77dde0956375e87027df2fdd80d430dd819c217aacreed@google.com reader.setMemory(NULL, 0); 78dde0956375e87027df2fdd80d430dd819c217aacreed@google.com assert_empty(reporter, reader); 79dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, NULL == reader.base()); 80dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, NULL == reader.peek()); 81dde0956375e87027df2fdd80d430dd819c217aacreed@google.com} 82