blob: b7a7c6ddc94e0336aefa33deb609d6902426c03a [file] [log] [blame]
reed@google.comdde09562011-05-23 12:21:05 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * 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.
reed@google.comdde09562011-05-23 12:21:05 +00006 */
7
reed@google.comdde09562011-05-23 12:21:05 +00008#include "Test.h"
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +00009#include "TestClassDef.h"
10#include "SkReader32.h"
reed@google.comdde09562011-05-23 12:21:05 +000011
12static 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
19static 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
27static 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
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +000036DEF_TEST(Reader32, reporter) {
reed@google.comdde09562011-05-23 12:21:05 +000037 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 };
epoger@google.combf083a92011-06-08 18:26:08 +000046 const size_t bufsize = sizeof(data) > sizeof(data2) ?
47 sizeof(data) : sizeof(data2);
48 char buffer[bufsize];
reed@google.comdde09562011-05-23 12:21:05 +000049
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);
reed@google.com103c0362011-05-23 12:28:48 +000061 reader.read(buffer, sizeof(data));
62 REPORTER_ASSERT(reporter, !memcmp(data, buffer, sizeof(data)));
reed@google.comdde09562011-05-23 12:21:05 +000063
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);
reed@google.com103c0362011-05-23 12:28:48 +000075 reader.read(buffer, sizeof(data2));
76 REPORTER_ASSERT(reporter, !memcmp(data2, buffer, sizeof(data2)));
reed@google.comdde09562011-05-23 12:21:05 +000077
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}