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