• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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