1 : /*
2 : * Copyright (c) 2008 The Native Client Authors. All rights reserved.
3 : * Use of this source code is governed by a BSD-style license that can be
4 : * found in the LICENSE file.
5 : */
6 :
7 :
8 : /* @file
9 : *
10 : * A simple test to exercise the DynArray class.
11 : */
12 : #include <stdio.h>
13 : #include <stdlib.h>
14 :
15 : #include "native_client/src/include/nacl_macros.h"
16 : #include "native_client/src/include/portability.h"
17 :
18 : #include "native_client/src/shared/platform/platform_init.h"
19 :
20 : #include "native_client/src/trusted/service_runtime/dyn_array.h"
21 :
22 :
23 1 : int ReadWriteTest(void) {
24 : static int test_data[] = {
25 : 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4,
26 : 6, 2, 6, 4, 3, 3, 8, 3, 2, 7, 9, 5, 0, 2, 8, 8, 4, 1, 9, 7,
27 : 1, 6, 9, 3, 9, 9, 3, 7, 5, 1, 0, 5, 8, 2, 0, 9, 7, 4, 9, 4,
28 : 4, 5, 9, 2, 3, 0, 7, 8, 1, 6, 4, 0, 6, 2, 8, 6, 2, 0, 8, 9,
29 : 9, 8, 6, 2, 8, 0, 3, 4, 8, 2, 5, 3, 4, 2, 1, 1, 7, 0, 6, 7,
30 : 6 };
31 :
32 : struct DynArray da;
33 : size_t i;
34 : ssize_t j;
35 1 : int nerrors = 0;
36 :
37 1 : printf("\nReadWriteTest\n");
38 :
39 1 : if (!DynArrayCtor(&da, 2)) {
40 0 : fprintf(stderr, "dyn_array_test: DynArrayCtor failed\n");
41 0 : ++nerrors;
42 0 : goto done;
43 : }
44 :
45 1 : for (i = 0; i < NACL_ARRAY_SIZE(test_data); ++i) {
46 1 : if (!DynArraySet(&da, i, (void *) (uintptr_t) test_data[i])) {
47 : fprintf(stderr,
48 : "dyn_array_test: insert for position %"NACL_PRIuS" failed\n",
49 0 : i);
50 0 : ++nerrors;
51 : }
52 1 : }
53 :
54 1 : for (i = 0; i < NACL_ARRAY_SIZE(test_data); ++i) {
55 1 : if ((int) (uintptr_t) DynArrayGet(&da, i) != test_data[i]) {
56 : fprintf(stderr,
57 : "dyn_array_test: check for value at position %"NACL_PRIuS
58 0 : " failed\n", i);
59 0 : ++nerrors;
60 : }
61 1 : }
62 :
63 1 : DynArrayDtor(&da);
64 :
65 1 : if (!DynArrayCtor(&da, 10)) {
66 0 : fprintf(stderr, "dyn_array_test: DynArrayCtor failed\n");
67 0 : ++nerrors;
68 0 : goto done;
69 : }
70 :
71 1 : for (j = NACL_ARRAY_SIZE(test_data); --j >= 0; ) {
72 1 : if (!DynArraySet(&da, j, (void *) (uintptr_t) test_data[j])) {
73 : fprintf(stderr,
74 : "dyn_array_test: insert for position %"NACL_PRIdS" failed\n",
75 0 : j);
76 0 : ++nerrors;
77 : }
78 1 : }
79 :
80 1 : for (j = NACL_ARRAY_SIZE(test_data); --j >= 0; ) {
81 1 : if ((int) (uintptr_t) DynArrayGet(&da, j) != test_data[j]) {
82 : fprintf(stderr,
83 : "dyn_array_test: check for value at position %"NACL_PRIdS
84 0 : " failed\n", j);
85 0 : ++nerrors;
86 : }
87 1 : }
88 :
89 1 : DynArrayDtor(&da);
90 :
91 : done:
92 1 : printf(0 != nerrors ? "FAILED\n" : "PASSED\n");
93 1 : return nerrors;
94 1 : }
95 :
96 :
97 1 : int FfsTest(void) {
98 : static struct {
99 : size_t pos;
100 : void *val;
101 : size_t expected;
102 : } test_data[] = {
103 : { 1, (void *) 0xdeadbeef, 0 },
104 : { 3, (void *) 0xdeadbeef, 0 },
105 : { 0, (void *) 0xdeadbeef, 2 },
106 : { 2, (void *) 0xdeadbeef, 4 },
107 : { 1, (void *) 0, 1 },
108 : { 1, (void *) 0xdeadbeef, 4 },
109 : { 4, (void *) 0xdeadbeef, 5 },
110 : { 5, (void *) 0xdeadbeef, 6 },
111 : { 6, (void *) 0xdeadbeef, 7 },
112 : { 8, (void *) 0xdeadbeef, 7 },
113 : { 7, (void *) 0xdeadbeef, 9 },
114 : { 9, (void *) 0xdeadbeef, 10 },
115 : { 10, (void *) 0xdeadbeef, 11 },
116 : { 11, (void *) 0xdeadbeef, 12 },
117 : { 12, (void *) 0xdeadbeef, 13 },
118 : { 13, (void *) 0xdeadbeef, 14 },
119 : { 14, (void *) 0xdeadbeef, 15 },
120 : { 15, (void *) 0xdeadbeef, 16 },
121 : { 16, (void *) 0xdeadbeef, 17 },
122 : { 17, (void *) 0xdeadbeef, 18 },
123 : { 18, (void *) 0xdeadbeef, 19 },
124 : { 19, (void *) 0xdeadbeef, 20 },
125 : { 20, (void *) 0xdeadbeef, 21 },
126 : { 21, (void *) 0xdeadbeef, 22 },
127 : { 22, (void *) 0xdeadbeef, 23 },
128 : { 23, (void *) 0xdeadbeef, 24 },
129 : { 24, (void *) 0xdeadbeef, 25 },
130 : { 25, (void *) 0xdeadbeef, 26 },
131 : { 26, (void *) 0xdeadbeef, 27 },
132 : { 27, (void *) 0xdeadbeef, 28 },
133 : { 28, (void *) 0xdeadbeef, 29 },
134 : { 29, (void *) 0xdeadbeef, 30 },
135 : { 30, (void *) 0xdeadbeef, 31 },
136 : { 32, (void *) 0xdeadbeef, 31 },
137 : { 32, (void *) 0, 31 },
138 : { 31, (void *) 0xdeadbeef, 32 },
139 : { 32, (void *) 0xdeadbeef, 33 },
140 : { 31, (void *) 0, 31 },
141 : { 31, (void *) 0xdeadbeef, 33 },
142 : { 34, (void *) 0xdeadbeef, 33 },
143 : { 35, (void *) 0xdeadbeef, 33 },
144 : { 36, (void *) 0xdeadbeef, 33 },
145 : { 37, (void *) 0xdeadbeef, 33 },
146 : { 38, (void *) 0xdeadbeef, 33 },
147 : { 39, (void *) 0xdeadbeef, 33 },
148 : { 40, (void *) 0xdeadbeef, 33 },
149 : { 41, (void *) 0xdeadbeef, 33 },
150 : { 42, (void *) 0xdeadbeef, 33 },
151 : { 43, (void *) 0xdeadbeef, 33 },
152 : { 44, (void *) 0xdeadbeef, 33 },
153 : { 45, (void *) 0xdeadbeef, 33 },
154 : { 46, (void *) 0xdeadbeef, 33 },
155 : { 47, (void *) 0xdeadbeef, 33 },
156 : { 48, (void *) 0xdeadbeef, 33 },
157 : { 49, (void *) 0xdeadbeef, 33 },
158 : { 50, (void *) 0xdeadbeef, 33 },
159 : { 51, (void *) 0xdeadbeef, 33 },
160 : { 52, (void *) 0xdeadbeef, 33 },
161 : { 53, (void *) 0xdeadbeef, 33 },
162 : { 54, (void *) 0xdeadbeef, 33 },
163 : { 55, (void *) 0xdeadbeef, 33 },
164 : { 56, (void *) 0xdeadbeef, 33 },
165 : { 57, (void *) 0xdeadbeef, 33 },
166 : { 58, (void *) 0xdeadbeef, 33 },
167 : { 59, (void *) 0xdeadbeef, 33 },
168 : { 60, (void *) 0xdeadbeef, 33 },
169 : { 61, (void *) 0xdeadbeef, 33 },
170 : { 62, (void *) 0xdeadbeef, 33 },
171 : { 63, (void *) 0xdeadbeef, 33 },
172 : { 64, (void *) 0xdeadbeef, 33 },
173 : { 65, (void *) 0xdeadbeef, 33 },
174 : { 66, (void *) 0xdeadbeef, 33 },
175 : { 33, (void *) 0xdeadbeef, 67 },
176 : { 31, (void *) 0, 31 },
177 : { 32, (void *) 0, 31 },
178 : { 63, (void *) 0, 31 },
179 : { 31, (void *) 0xdeadbeef, 32 },
180 : { 32, (void *) 0xdeadbeef, 63 },
181 : { 63, (void *) 0xdeadbeef, 67 },
182 : };
183 : struct DynArray da;
184 : size_t ix;
185 1 : int nerrors = 0;
186 :
187 1 : printf("\nFFS test\n");
188 :
189 1 : if (!DynArrayCtor(&da, 32)) {
190 0 : fprintf(stderr, "dyn_array_test: DynArrayCtor failed\n");
191 0 : ++nerrors;
192 0 : goto done;
193 : }
194 :
195 1 : for (ix = 0; ix < NACL_ARRAY_SIZE(test_data); ++ix) {
196 1 : if (!DynArraySet(&da, test_data[ix].pos, test_data[ix].val)) {
197 : fprintf(stderr,
198 : "dyn_array_test: setting at position %"NACL_PRIuS" to 0x%08"
199 : NACL_PRIxPTR", test_data entry %"NACL_PRIuS" failed\n",
200 0 : test_data[ix].pos, (uintptr_t) test_data[ix].val, ix);
201 0 : ++nerrors;
202 : }
203 1 : if (DynArrayFirstAvail(&da) != test_data[ix].expected) {
204 : fprintf(stderr,
205 : "dyn_array_test: ix %"NACL_PRIuS", first avail: expected %"
206 : NACL_PRIuS", got %"NACL_PRIuS"\n",
207 0 : ix, test_data[ix].expected, DynArrayFirstAvail(&da));
208 0 : ++nerrors;
209 : }
210 1 : }
211 :
212 1 : DynArrayDtor(&da);
213 :
214 : done:
215 1 : printf(0 != nerrors ? "FAILED\n" : "PASSED\n");
216 1 : return nerrors;
217 1 : }
218 :
219 :
220 1 : int main(void) {
221 1 : int nerrors = 0;
222 :
223 1 : NaClPlatformInit();
224 :
225 1 : nerrors += ReadWriteTest();
226 1 : nerrors += FfsTest();
227 :
228 1 : NaClPlatformFini();
229 :
230 1 : return nerrors != 0;
231 1 : }
|