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