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