1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * Array test program for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Copyright 2007-2014 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker * Copyright 1997-2006 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker *
7*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker */
9*5e7646d2SAndroid Build Coastguard Worker
10*5e7646d2SAndroid Build Coastguard Worker /*
11*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers...
12*5e7646d2SAndroid Build Coastguard Worker */
13*5e7646d2SAndroid Build Coastguard Worker
14*5e7646d2SAndroid Build Coastguard Worker #include "string-private.h"
15*5e7646d2SAndroid Build Coastguard Worker #include "debug-private.h"
16*5e7646d2SAndroid Build Coastguard Worker #include "array-private.h"
17*5e7646d2SAndroid Build Coastguard Worker #include "dir.h"
18*5e7646d2SAndroid Build Coastguard Worker
19*5e7646d2SAndroid Build Coastguard Worker
20*5e7646d2SAndroid Build Coastguard Worker /*
21*5e7646d2SAndroid Build Coastguard Worker * Local functions...
22*5e7646d2SAndroid Build Coastguard Worker */
23*5e7646d2SAndroid Build Coastguard Worker
24*5e7646d2SAndroid Build Coastguard Worker static double get_seconds(void);
25*5e7646d2SAndroid Build Coastguard Worker static int load_words(const char *filename, cups_array_t *array);
26*5e7646d2SAndroid Build Coastguard Worker
27*5e7646d2SAndroid Build Coastguard Worker
28*5e7646d2SAndroid Build Coastguard Worker /*
29*5e7646d2SAndroid Build Coastguard Worker * 'main()' - Main entry.
30*5e7646d2SAndroid Build Coastguard Worker */
31*5e7646d2SAndroid Build Coastguard Worker
32*5e7646d2SAndroid Build Coastguard Worker int /* O - Exit status */
main(void)33*5e7646d2SAndroid Build Coastguard Worker main(void)
34*5e7646d2SAndroid Build Coastguard Worker {
35*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
36*5e7646d2SAndroid Build Coastguard Worker cups_array_t *array, /* Test array */
37*5e7646d2SAndroid Build Coastguard Worker *dup_array; /* Duplicate array */
38*5e7646d2SAndroid Build Coastguard Worker int status; /* Exit status */
39*5e7646d2SAndroid Build Coastguard Worker char *text; /* Text from array */
40*5e7646d2SAndroid Build Coastguard Worker char word[256]; /* Word from file */
41*5e7646d2SAndroid Build Coastguard Worker double start, /* Start time */
42*5e7646d2SAndroid Build Coastguard Worker end; /* End time */
43*5e7646d2SAndroid Build Coastguard Worker cups_dir_t *dir; /* Current directory */
44*5e7646d2SAndroid Build Coastguard Worker cups_dentry_t *dent; /* Directory entry */
45*5e7646d2SAndroid Build Coastguard Worker char *saved[32]; /* Saved entries */
46*5e7646d2SAndroid Build Coastguard Worker void *data; /* User data for arrays */
47*5e7646d2SAndroid Build Coastguard Worker
48*5e7646d2SAndroid Build Coastguard Worker
49*5e7646d2SAndroid Build Coastguard Worker /*
50*5e7646d2SAndroid Build Coastguard Worker * No errors so far...
51*5e7646d2SAndroid Build Coastguard Worker */
52*5e7646d2SAndroid Build Coastguard Worker
53*5e7646d2SAndroid Build Coastguard Worker status = 0;
54*5e7646d2SAndroid Build Coastguard Worker
55*5e7646d2SAndroid Build Coastguard Worker /*
56*5e7646d2SAndroid Build Coastguard Worker * cupsArrayNew()
57*5e7646d2SAndroid Build Coastguard Worker */
58*5e7646d2SAndroid Build Coastguard Worker
59*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayNew: ", stdout);
60*5e7646d2SAndroid Build Coastguard Worker
61*5e7646d2SAndroid Build Coastguard Worker data = (void *)"testarray";
62*5e7646d2SAndroid Build Coastguard Worker array = cupsArrayNew((cups_array_func_t)strcmp, data);
63*5e7646d2SAndroid Build Coastguard Worker
64*5e7646d2SAndroid Build Coastguard Worker if (array)
65*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
66*5e7646d2SAndroid Build Coastguard Worker else
67*5e7646d2SAndroid Build Coastguard Worker {
68*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (returned NULL, expected pointer)");
69*5e7646d2SAndroid Build Coastguard Worker status ++;
70*5e7646d2SAndroid Build Coastguard Worker }
71*5e7646d2SAndroid Build Coastguard Worker
72*5e7646d2SAndroid Build Coastguard Worker /*
73*5e7646d2SAndroid Build Coastguard Worker * cupsArrayUserData()
74*5e7646d2SAndroid Build Coastguard Worker */
75*5e7646d2SAndroid Build Coastguard Worker
76*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayUserData: ", stdout);
77*5e7646d2SAndroid Build Coastguard Worker if (cupsArrayUserData(array) == data)
78*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
79*5e7646d2SAndroid Build Coastguard Worker else
80*5e7646d2SAndroid Build Coastguard Worker {
81*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned %p instead of %p!)\n", cupsArrayUserData(array),
82*5e7646d2SAndroid Build Coastguard Worker data);
83*5e7646d2SAndroid Build Coastguard Worker status ++;
84*5e7646d2SAndroid Build Coastguard Worker }
85*5e7646d2SAndroid Build Coastguard Worker
86*5e7646d2SAndroid Build Coastguard Worker /*
87*5e7646d2SAndroid Build Coastguard Worker * cupsArrayAdd()
88*5e7646d2SAndroid Build Coastguard Worker */
89*5e7646d2SAndroid Build Coastguard Worker
90*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayAdd: ", stdout);
91*5e7646d2SAndroid Build Coastguard Worker
92*5e7646d2SAndroid Build Coastguard Worker if (!cupsArrayAdd(array, strdup("One Fish")))
93*5e7646d2SAndroid Build Coastguard Worker {
94*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (\"One Fish\")");
95*5e7646d2SAndroid Build Coastguard Worker status ++;
96*5e7646d2SAndroid Build Coastguard Worker }
97*5e7646d2SAndroid Build Coastguard Worker else
98*5e7646d2SAndroid Build Coastguard Worker {
99*5e7646d2SAndroid Build Coastguard Worker if (!cupsArrayAdd(array, strdup("Two Fish")))
100*5e7646d2SAndroid Build Coastguard Worker {
101*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (\"Two Fish\")");
102*5e7646d2SAndroid Build Coastguard Worker status ++;
103*5e7646d2SAndroid Build Coastguard Worker }
104*5e7646d2SAndroid Build Coastguard Worker else
105*5e7646d2SAndroid Build Coastguard Worker {
106*5e7646d2SAndroid Build Coastguard Worker if (!cupsArrayAdd(array, strdup("Red Fish")))
107*5e7646d2SAndroid Build Coastguard Worker {
108*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (\"Red Fish\")");
109*5e7646d2SAndroid Build Coastguard Worker status ++;
110*5e7646d2SAndroid Build Coastguard Worker }
111*5e7646d2SAndroid Build Coastguard Worker else
112*5e7646d2SAndroid Build Coastguard Worker {
113*5e7646d2SAndroid Build Coastguard Worker if (!cupsArrayAdd(array, strdup("Blue Fish")))
114*5e7646d2SAndroid Build Coastguard Worker {
115*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (\"Blue Fish\")");
116*5e7646d2SAndroid Build Coastguard Worker status ++;
117*5e7646d2SAndroid Build Coastguard Worker }
118*5e7646d2SAndroid Build Coastguard Worker else
119*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
120*5e7646d2SAndroid Build Coastguard Worker }
121*5e7646d2SAndroid Build Coastguard Worker }
122*5e7646d2SAndroid Build Coastguard Worker }
123*5e7646d2SAndroid Build Coastguard Worker
124*5e7646d2SAndroid Build Coastguard Worker /*
125*5e7646d2SAndroid Build Coastguard Worker * cupsArrayCount()
126*5e7646d2SAndroid Build Coastguard Worker */
127*5e7646d2SAndroid Build Coastguard Worker
128*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayCount: ", stdout);
129*5e7646d2SAndroid Build Coastguard Worker if (cupsArrayCount(array) == 4)
130*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
131*5e7646d2SAndroid Build Coastguard Worker else
132*5e7646d2SAndroid Build Coastguard Worker {
133*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned %d, expected 4)\n", cupsArrayCount(array));
134*5e7646d2SAndroid Build Coastguard Worker status ++;
135*5e7646d2SAndroid Build Coastguard Worker }
136*5e7646d2SAndroid Build Coastguard Worker
137*5e7646d2SAndroid Build Coastguard Worker /*
138*5e7646d2SAndroid Build Coastguard Worker * cupsArrayFirst()
139*5e7646d2SAndroid Build Coastguard Worker */
140*5e7646d2SAndroid Build Coastguard Worker
141*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayFirst: ", stdout);
142*5e7646d2SAndroid Build Coastguard Worker if ((text = (char *)cupsArrayFirst(array)) != NULL &&
143*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "Blue Fish"))
144*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
145*5e7646d2SAndroid Build Coastguard Worker else
146*5e7646d2SAndroid Build Coastguard Worker {
147*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned \"%s\", expected \"Blue Fish\")\n", text);
148*5e7646d2SAndroid Build Coastguard Worker status ++;
149*5e7646d2SAndroid Build Coastguard Worker }
150*5e7646d2SAndroid Build Coastguard Worker
151*5e7646d2SAndroid Build Coastguard Worker /*
152*5e7646d2SAndroid Build Coastguard Worker * cupsArrayNext()
153*5e7646d2SAndroid Build Coastguard Worker */
154*5e7646d2SAndroid Build Coastguard Worker
155*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayNext: ", stdout);
156*5e7646d2SAndroid Build Coastguard Worker if ((text = (char *)cupsArrayNext(array)) != NULL &&
157*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "One Fish"))
158*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
159*5e7646d2SAndroid Build Coastguard Worker else
160*5e7646d2SAndroid Build Coastguard Worker {
161*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned \"%s\", expected \"One Fish\")\n", text);
162*5e7646d2SAndroid Build Coastguard Worker status ++;
163*5e7646d2SAndroid Build Coastguard Worker }
164*5e7646d2SAndroid Build Coastguard Worker
165*5e7646d2SAndroid Build Coastguard Worker /*
166*5e7646d2SAndroid Build Coastguard Worker * cupsArrayLast()
167*5e7646d2SAndroid Build Coastguard Worker */
168*5e7646d2SAndroid Build Coastguard Worker
169*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayLast: ", stdout);
170*5e7646d2SAndroid Build Coastguard Worker if ((text = (char *)cupsArrayLast(array)) != NULL &&
171*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "Two Fish"))
172*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
173*5e7646d2SAndroid Build Coastguard Worker else
174*5e7646d2SAndroid Build Coastguard Worker {
175*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned \"%s\", expected \"Two Fish\")\n", text);
176*5e7646d2SAndroid Build Coastguard Worker status ++;
177*5e7646d2SAndroid Build Coastguard Worker }
178*5e7646d2SAndroid Build Coastguard Worker
179*5e7646d2SAndroid Build Coastguard Worker /*
180*5e7646d2SAndroid Build Coastguard Worker * cupsArrayPrev()
181*5e7646d2SAndroid Build Coastguard Worker */
182*5e7646d2SAndroid Build Coastguard Worker
183*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayPrev: ", stdout);
184*5e7646d2SAndroid Build Coastguard Worker if ((text = (char *)cupsArrayPrev(array)) != NULL &&
185*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "Red Fish"))
186*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
187*5e7646d2SAndroid Build Coastguard Worker else
188*5e7646d2SAndroid Build Coastguard Worker {
189*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned \"%s\", expected \"Red Fish\")\n", text);
190*5e7646d2SAndroid Build Coastguard Worker status ++;
191*5e7646d2SAndroid Build Coastguard Worker }
192*5e7646d2SAndroid Build Coastguard Worker
193*5e7646d2SAndroid Build Coastguard Worker /*
194*5e7646d2SAndroid Build Coastguard Worker * cupsArrayFind()
195*5e7646d2SAndroid Build Coastguard Worker */
196*5e7646d2SAndroid Build Coastguard Worker
197*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayFind: ", stdout);
198*5e7646d2SAndroid Build Coastguard Worker if ((text = (char *)cupsArrayFind(array, (void *)"One Fish")) != NULL &&
199*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "One Fish"))
200*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
201*5e7646d2SAndroid Build Coastguard Worker else
202*5e7646d2SAndroid Build Coastguard Worker {
203*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned \"%s\", expected \"One Fish\")\n", text);
204*5e7646d2SAndroid Build Coastguard Worker status ++;
205*5e7646d2SAndroid Build Coastguard Worker }
206*5e7646d2SAndroid Build Coastguard Worker
207*5e7646d2SAndroid Build Coastguard Worker /*
208*5e7646d2SAndroid Build Coastguard Worker * cupsArrayCurrent()
209*5e7646d2SAndroid Build Coastguard Worker */
210*5e7646d2SAndroid Build Coastguard Worker
211*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayCurrent: ", stdout);
212*5e7646d2SAndroid Build Coastguard Worker if ((text = (char *)cupsArrayCurrent(array)) != NULL &&
213*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "One Fish"))
214*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
215*5e7646d2SAndroid Build Coastguard Worker else
216*5e7646d2SAndroid Build Coastguard Worker {
217*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned \"%s\", expected \"One Fish\")\n", text);
218*5e7646d2SAndroid Build Coastguard Worker status ++;
219*5e7646d2SAndroid Build Coastguard Worker }
220*5e7646d2SAndroid Build Coastguard Worker
221*5e7646d2SAndroid Build Coastguard Worker /*
222*5e7646d2SAndroid Build Coastguard Worker * cupsArrayDup()
223*5e7646d2SAndroid Build Coastguard Worker */
224*5e7646d2SAndroid Build Coastguard Worker
225*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayDup: ", stdout);
226*5e7646d2SAndroid Build Coastguard Worker if ((dup_array = cupsArrayDup(array)) != NULL &&
227*5e7646d2SAndroid Build Coastguard Worker cupsArrayCount(dup_array) == 4)
228*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
229*5e7646d2SAndroid Build Coastguard Worker else
230*5e7646d2SAndroid Build Coastguard Worker {
231*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned %p with %d elements, expected pointer with 4 elements)\n", (void *)dup_array, cupsArrayCount(dup_array));
232*5e7646d2SAndroid Build Coastguard Worker status ++;
233*5e7646d2SAndroid Build Coastguard Worker }
234*5e7646d2SAndroid Build Coastguard Worker
235*5e7646d2SAndroid Build Coastguard Worker /*
236*5e7646d2SAndroid Build Coastguard Worker * cupsArrayRemove()
237*5e7646d2SAndroid Build Coastguard Worker */
238*5e7646d2SAndroid Build Coastguard Worker
239*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayRemove: ", stdout);
240*5e7646d2SAndroid Build Coastguard Worker if (cupsArrayRemove(array, (void *)"One Fish") &&
241*5e7646d2SAndroid Build Coastguard Worker cupsArrayCount(array) == 3)
242*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
243*5e7646d2SAndroid Build Coastguard Worker else
244*5e7646d2SAndroid Build Coastguard Worker {
245*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (returned 0 with %d elements, expected 1 with 4 elements)\n",
246*5e7646d2SAndroid Build Coastguard Worker cupsArrayCount(array));
247*5e7646d2SAndroid Build Coastguard Worker status ++;
248*5e7646d2SAndroid Build Coastguard Worker }
249*5e7646d2SAndroid Build Coastguard Worker
250*5e7646d2SAndroid Build Coastguard Worker /*
251*5e7646d2SAndroid Build Coastguard Worker * cupsArrayClear()
252*5e7646d2SAndroid Build Coastguard Worker */
253*5e7646d2SAndroid Build Coastguard Worker
254*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayClear: ", stdout);
255*5e7646d2SAndroid Build Coastguard Worker cupsArrayClear(array);
256*5e7646d2SAndroid Build Coastguard Worker if (cupsArrayCount(array) == 0)
257*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
258*5e7646d2SAndroid Build Coastguard Worker else
259*5e7646d2SAndroid Build Coastguard Worker {
260*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d elements, expected 0 elements)\n",
261*5e7646d2SAndroid Build Coastguard Worker cupsArrayCount(array));
262*5e7646d2SAndroid Build Coastguard Worker status ++;
263*5e7646d2SAndroid Build Coastguard Worker }
264*5e7646d2SAndroid Build Coastguard Worker
265*5e7646d2SAndroid Build Coastguard Worker /*
266*5e7646d2SAndroid Build Coastguard Worker * Now load this source file and grab all of the unique words...
267*5e7646d2SAndroid Build Coastguard Worker */
268*5e7646d2SAndroid Build Coastguard Worker
269*5e7646d2SAndroid Build Coastguard Worker fputs("Load unique words: ", stdout);
270*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
271*5e7646d2SAndroid Build Coastguard Worker
272*5e7646d2SAndroid Build Coastguard Worker start = get_seconds();
273*5e7646d2SAndroid Build Coastguard Worker
274*5e7646d2SAndroid Build Coastguard Worker if ((dir = cupsDirOpen(".")) == NULL)
275*5e7646d2SAndroid Build Coastguard Worker {
276*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (cupsDirOpen failed)");
277*5e7646d2SAndroid Build Coastguard Worker status ++;
278*5e7646d2SAndroid Build Coastguard Worker }
279*5e7646d2SAndroid Build Coastguard Worker else
280*5e7646d2SAndroid Build Coastguard Worker {
281*5e7646d2SAndroid Build Coastguard Worker while ((dent = cupsDirRead(dir)) != NULL)
282*5e7646d2SAndroid Build Coastguard Worker {
283*5e7646d2SAndroid Build Coastguard Worker i = (int)strlen(dent->filename) - 2;
284*5e7646d2SAndroid Build Coastguard Worker
285*5e7646d2SAndroid Build Coastguard Worker if (i > 0 && dent->filename[i] == '.' &&
286*5e7646d2SAndroid Build Coastguard Worker (dent->filename[i + 1] == 'c' ||
287*5e7646d2SAndroid Build Coastguard Worker dent->filename[i + 1] == 'h'))
288*5e7646d2SAndroid Build Coastguard Worker load_words(dent->filename, array);
289*5e7646d2SAndroid Build Coastguard Worker }
290*5e7646d2SAndroid Build Coastguard Worker
291*5e7646d2SAndroid Build Coastguard Worker cupsDirClose(dir);
292*5e7646d2SAndroid Build Coastguard Worker
293*5e7646d2SAndroid Build Coastguard Worker end = get_seconds();
294*5e7646d2SAndroid Build Coastguard Worker
295*5e7646d2SAndroid Build Coastguard Worker printf("%d words in %.3f seconds (%.0f words/sec), ", cupsArrayCount(array),
296*5e7646d2SAndroid Build Coastguard Worker end - start, cupsArrayCount(array) / (end - start));
297*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
298*5e7646d2SAndroid Build Coastguard Worker
299*5e7646d2SAndroid Build Coastguard Worker for (text = (char *)cupsArrayFirst(array); text;)
300*5e7646d2SAndroid Build Coastguard Worker {
301*5e7646d2SAndroid Build Coastguard Worker /*
302*5e7646d2SAndroid Build Coastguard Worker * Copy this word to the word buffer (safe because we strdup'd from
303*5e7646d2SAndroid Build Coastguard Worker * the same buffer in the first place... :)
304*5e7646d2SAndroid Build Coastguard Worker */
305*5e7646d2SAndroid Build Coastguard Worker
306*5e7646d2SAndroid Build Coastguard Worker strlcpy(word, text, sizeof(word));
307*5e7646d2SAndroid Build Coastguard Worker
308*5e7646d2SAndroid Build Coastguard Worker /*
309*5e7646d2SAndroid Build Coastguard Worker * Grab the next word and compare...
310*5e7646d2SAndroid Build Coastguard Worker */
311*5e7646d2SAndroid Build Coastguard Worker
312*5e7646d2SAndroid Build Coastguard Worker if ((text = (char *)cupsArrayNext(array)) == NULL)
313*5e7646d2SAndroid Build Coastguard Worker break;
314*5e7646d2SAndroid Build Coastguard Worker
315*5e7646d2SAndroid Build Coastguard Worker if (strcmp(word, text) >= 0)
316*5e7646d2SAndroid Build Coastguard Worker break;
317*5e7646d2SAndroid Build Coastguard Worker }
318*5e7646d2SAndroid Build Coastguard Worker
319*5e7646d2SAndroid Build Coastguard Worker if (text)
320*5e7646d2SAndroid Build Coastguard Worker {
321*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" >= \"%s\"!)\n", word, text);
322*5e7646d2SAndroid Build Coastguard Worker status ++;
323*5e7646d2SAndroid Build Coastguard Worker }
324*5e7646d2SAndroid Build Coastguard Worker else
325*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
326*5e7646d2SAndroid Build Coastguard Worker }
327*5e7646d2SAndroid Build Coastguard Worker
328*5e7646d2SAndroid Build Coastguard Worker /*
329*5e7646d2SAndroid Build Coastguard Worker * Test deleting with iteration...
330*5e7646d2SAndroid Build Coastguard Worker */
331*5e7646d2SAndroid Build Coastguard Worker
332*5e7646d2SAndroid Build Coastguard Worker fputs("Delete While Iterating: ", stdout);
333*5e7646d2SAndroid Build Coastguard Worker
334*5e7646d2SAndroid Build Coastguard Worker text = (char *)cupsArrayFirst(array);
335*5e7646d2SAndroid Build Coastguard Worker cupsArrayRemove(array, text);
336*5e7646d2SAndroid Build Coastguard Worker free(text);
337*5e7646d2SAndroid Build Coastguard Worker
338*5e7646d2SAndroid Build Coastguard Worker text = (char *)cupsArrayNext(array);
339*5e7646d2SAndroid Build Coastguard Worker if (!text)
340*5e7646d2SAndroid Build Coastguard Worker {
341*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (cupsArrayNext returned NULL!)");
342*5e7646d2SAndroid Build Coastguard Worker status ++;
343*5e7646d2SAndroid Build Coastguard Worker }
344*5e7646d2SAndroid Build Coastguard Worker else
345*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
346*5e7646d2SAndroid Build Coastguard Worker
347*5e7646d2SAndroid Build Coastguard Worker /*
348*5e7646d2SAndroid Build Coastguard Worker * Test save/restore...
349*5e7646d2SAndroid Build Coastguard Worker */
350*5e7646d2SAndroid Build Coastguard Worker
351*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArraySave: ", stdout);
352*5e7646d2SAndroid Build Coastguard Worker
353*5e7646d2SAndroid Build Coastguard Worker for (i = 0, text = (char *)cupsArrayFirst(array);
354*5e7646d2SAndroid Build Coastguard Worker i < 32;
355*5e7646d2SAndroid Build Coastguard Worker i ++, text = (char *)cupsArrayNext(array))
356*5e7646d2SAndroid Build Coastguard Worker {
357*5e7646d2SAndroid Build Coastguard Worker saved[i] = text;
358*5e7646d2SAndroid Build Coastguard Worker
359*5e7646d2SAndroid Build Coastguard Worker if (!cupsArraySave(array))
360*5e7646d2SAndroid Build Coastguard Worker break;
361*5e7646d2SAndroid Build Coastguard Worker }
362*5e7646d2SAndroid Build Coastguard Worker
363*5e7646d2SAndroid Build Coastguard Worker if (i < 32)
364*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (depth = %d)\n", i);
365*5e7646d2SAndroid Build Coastguard Worker else
366*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
367*5e7646d2SAndroid Build Coastguard Worker
368*5e7646d2SAndroid Build Coastguard Worker fputs("cupsArrayRestore: ", stdout);
369*5e7646d2SAndroid Build Coastguard Worker
370*5e7646d2SAndroid Build Coastguard Worker while (i > 0)
371*5e7646d2SAndroid Build Coastguard Worker {
372*5e7646d2SAndroid Build Coastguard Worker i --;
373*5e7646d2SAndroid Build Coastguard Worker
374*5e7646d2SAndroid Build Coastguard Worker text = cupsArrayRestore(array);
375*5e7646d2SAndroid Build Coastguard Worker if (text != saved[i])
376*5e7646d2SAndroid Build Coastguard Worker break;
377*5e7646d2SAndroid Build Coastguard Worker }
378*5e7646d2SAndroid Build Coastguard Worker
379*5e7646d2SAndroid Build Coastguard Worker if (i)
380*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (depth = %d)\n", i);
381*5e7646d2SAndroid Build Coastguard Worker else
382*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
383*5e7646d2SAndroid Build Coastguard Worker
384*5e7646d2SAndroid Build Coastguard Worker /*
385*5e7646d2SAndroid Build Coastguard Worker * Delete the arrays...
386*5e7646d2SAndroid Build Coastguard Worker */
387*5e7646d2SAndroid Build Coastguard Worker
388*5e7646d2SAndroid Build Coastguard Worker cupsArrayDelete(array);
389*5e7646d2SAndroid Build Coastguard Worker cupsArrayDelete(dup_array);
390*5e7646d2SAndroid Build Coastguard Worker
391*5e7646d2SAndroid Build Coastguard Worker /*
392*5e7646d2SAndroid Build Coastguard Worker * Test the array with string functions...
393*5e7646d2SAndroid Build Coastguard Worker */
394*5e7646d2SAndroid Build Coastguard Worker
395*5e7646d2SAndroid Build Coastguard Worker fputs("_cupsArrayNewStrings(\" \\t\\nfoo bar\\tboo\\nfar\", ' '): ", stdout);
396*5e7646d2SAndroid Build Coastguard Worker array = _cupsArrayNewStrings(" \t\nfoo bar\tboo\nfar", ' ');
397*5e7646d2SAndroid Build Coastguard Worker if (!array)
398*5e7646d2SAndroid Build Coastguard Worker {
399*5e7646d2SAndroid Build Coastguard Worker status = 1;
400*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (unable to create array)");
401*5e7646d2SAndroid Build Coastguard Worker }
402*5e7646d2SAndroid Build Coastguard Worker else if (cupsArrayCount(array) != 4)
403*5e7646d2SAndroid Build Coastguard Worker {
404*5e7646d2SAndroid Build Coastguard Worker status = 1;
405*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got %d elements, expected 4)\n", cupsArrayCount(array));
406*5e7646d2SAndroid Build Coastguard Worker }
407*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayFirst(array), "bar"))
408*5e7646d2SAndroid Build Coastguard Worker {
409*5e7646d2SAndroid Build Coastguard Worker status = 1;
410*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"bar\")\n", text);
411*5e7646d2SAndroid Build Coastguard Worker }
412*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayNext(array), "boo"))
413*5e7646d2SAndroid Build Coastguard Worker {
414*5e7646d2SAndroid Build Coastguard Worker status = 1;
415*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"boo\")\n", text);
416*5e7646d2SAndroid Build Coastguard Worker }
417*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayNext(array), "far"))
418*5e7646d2SAndroid Build Coastguard Worker {
419*5e7646d2SAndroid Build Coastguard Worker status = 1;
420*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"far\")\n", text);
421*5e7646d2SAndroid Build Coastguard Worker }
422*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayNext(array), "foo"))
423*5e7646d2SAndroid Build Coastguard Worker {
424*5e7646d2SAndroid Build Coastguard Worker status = 1;
425*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"foo\")\n", text);
426*5e7646d2SAndroid Build Coastguard Worker }
427*5e7646d2SAndroid Build Coastguard Worker else
428*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
429*5e7646d2SAndroid Build Coastguard Worker
430*5e7646d2SAndroid Build Coastguard Worker fputs("_cupsArrayAddStrings(array, \"foo2,bar2\", ','): ", stdout);
431*5e7646d2SAndroid Build Coastguard Worker _cupsArrayAddStrings(array, "foo2,bar2", ',');
432*5e7646d2SAndroid Build Coastguard Worker
433*5e7646d2SAndroid Build Coastguard Worker if (cupsArrayCount(array) != 6)
434*5e7646d2SAndroid Build Coastguard Worker {
435*5e7646d2SAndroid Build Coastguard Worker status = 1;
436*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got %d elements, expected 6)\n", cupsArrayCount(array));
437*5e7646d2SAndroid Build Coastguard Worker }
438*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayFirst(array), "bar"))
439*5e7646d2SAndroid Build Coastguard Worker {
440*5e7646d2SAndroid Build Coastguard Worker status = 1;
441*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"bar\")\n", text);
442*5e7646d2SAndroid Build Coastguard Worker }
443*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayNext(array), "bar2"))
444*5e7646d2SAndroid Build Coastguard Worker {
445*5e7646d2SAndroid Build Coastguard Worker status = 1;
446*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"bar2\")\n", text);
447*5e7646d2SAndroid Build Coastguard Worker }
448*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayNext(array), "boo"))
449*5e7646d2SAndroid Build Coastguard Worker {
450*5e7646d2SAndroid Build Coastguard Worker status = 1;
451*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"boo\")\n", text);
452*5e7646d2SAndroid Build Coastguard Worker }
453*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayNext(array), "far"))
454*5e7646d2SAndroid Build Coastguard Worker {
455*5e7646d2SAndroid Build Coastguard Worker status = 1;
456*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"far\")\n", text);
457*5e7646d2SAndroid Build Coastguard Worker }
458*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayNext(array), "foo"))
459*5e7646d2SAndroid Build Coastguard Worker {
460*5e7646d2SAndroid Build Coastguard Worker status = 1;
461*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"foo\")\n", text);
462*5e7646d2SAndroid Build Coastguard Worker }
463*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(text = (char *)cupsArrayNext(array), "foo2"))
464*5e7646d2SAndroid Build Coastguard Worker {
465*5e7646d2SAndroid Build Coastguard Worker status = 1;
466*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (first element \"%s\", expected \"foo2\")\n", text);
467*5e7646d2SAndroid Build Coastguard Worker }
468*5e7646d2SAndroid Build Coastguard Worker else
469*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
470*5e7646d2SAndroid Build Coastguard Worker
471*5e7646d2SAndroid Build Coastguard Worker cupsArrayDelete(array);
472*5e7646d2SAndroid Build Coastguard Worker
473*5e7646d2SAndroid Build Coastguard Worker /*
474*5e7646d2SAndroid Build Coastguard Worker * Summarize the results and return...
475*5e7646d2SAndroid Build Coastguard Worker */
476*5e7646d2SAndroid Build Coastguard Worker
477*5e7646d2SAndroid Build Coastguard Worker if (!status)
478*5e7646d2SAndroid Build Coastguard Worker puts("\nALL TESTS PASSED!");
479*5e7646d2SAndroid Build Coastguard Worker else
480*5e7646d2SAndroid Build Coastguard Worker printf("\n%d TEST(S) FAILED!\n", status);
481*5e7646d2SAndroid Build Coastguard Worker
482*5e7646d2SAndroid Build Coastguard Worker return (status);
483*5e7646d2SAndroid Build Coastguard Worker }
484*5e7646d2SAndroid Build Coastguard Worker
485*5e7646d2SAndroid Build Coastguard Worker
486*5e7646d2SAndroid Build Coastguard Worker /*
487*5e7646d2SAndroid Build Coastguard Worker * 'get_seconds()' - Get the current time in seconds...
488*5e7646d2SAndroid Build Coastguard Worker */
489*5e7646d2SAndroid Build Coastguard Worker
490*5e7646d2SAndroid Build Coastguard Worker #ifdef _WIN32
491*5e7646d2SAndroid Build Coastguard Worker # include <windows.h>
492*5e7646d2SAndroid Build Coastguard Worker
493*5e7646d2SAndroid Build Coastguard Worker
494*5e7646d2SAndroid Build Coastguard Worker static double
get_seconds(void)495*5e7646d2SAndroid Build Coastguard Worker get_seconds(void)
496*5e7646d2SAndroid Build Coastguard Worker {
497*5e7646d2SAndroid Build Coastguard Worker }
498*5e7646d2SAndroid Build Coastguard Worker #else
499*5e7646d2SAndroid Build Coastguard Worker # include <sys/time.h>
500*5e7646d2SAndroid Build Coastguard Worker
501*5e7646d2SAndroid Build Coastguard Worker
502*5e7646d2SAndroid Build Coastguard Worker static double
get_seconds(void)503*5e7646d2SAndroid Build Coastguard Worker get_seconds(void)
504*5e7646d2SAndroid Build Coastguard Worker {
505*5e7646d2SAndroid Build Coastguard Worker struct timeval curtime; /* Current time */
506*5e7646d2SAndroid Build Coastguard Worker
507*5e7646d2SAndroid Build Coastguard Worker
508*5e7646d2SAndroid Build Coastguard Worker gettimeofday(&curtime, NULL);
509*5e7646d2SAndroid Build Coastguard Worker return (curtime.tv_sec + 0.000001 * curtime.tv_usec);
510*5e7646d2SAndroid Build Coastguard Worker }
511*5e7646d2SAndroid Build Coastguard Worker #endif /* _WIN32 */
512*5e7646d2SAndroid Build Coastguard Worker
513*5e7646d2SAndroid Build Coastguard Worker
514*5e7646d2SAndroid Build Coastguard Worker /*
515*5e7646d2SAndroid Build Coastguard Worker * 'load_words()' - Load words from a file.
516*5e7646d2SAndroid Build Coastguard Worker */
517*5e7646d2SAndroid Build Coastguard Worker
518*5e7646d2SAndroid Build Coastguard Worker static int /* O - 1 on success, 0 on failure */
load_words(const char * filename,cups_array_t * array)519*5e7646d2SAndroid Build Coastguard Worker load_words(const char *filename, /* I - File to load */
520*5e7646d2SAndroid Build Coastguard Worker cups_array_t *array) /* I - Array to add to */
521*5e7646d2SAndroid Build Coastguard Worker {
522*5e7646d2SAndroid Build Coastguard Worker FILE *fp; /* Test file */
523*5e7646d2SAndroid Build Coastguard Worker char word[256]; /* Word from file */
524*5e7646d2SAndroid Build Coastguard Worker
525*5e7646d2SAndroid Build Coastguard Worker
526*5e7646d2SAndroid Build Coastguard Worker if ((fp = fopen(filename, "r")) == NULL)
527*5e7646d2SAndroid Build Coastguard Worker {
528*5e7646d2SAndroid Build Coastguard Worker perror(filename);
529*5e7646d2SAndroid Build Coastguard Worker return (0);
530*5e7646d2SAndroid Build Coastguard Worker }
531*5e7646d2SAndroid Build Coastguard Worker
532*5e7646d2SAndroid Build Coastguard Worker while (fscanf(fp, "%255s", word) == 1)
533*5e7646d2SAndroid Build Coastguard Worker {
534*5e7646d2SAndroid Build Coastguard Worker if (!cupsArrayFind(array, word))
535*5e7646d2SAndroid Build Coastguard Worker cupsArrayAdd(array, strdup(word));
536*5e7646d2SAndroid Build Coastguard Worker }
537*5e7646d2SAndroid Build Coastguard Worker
538*5e7646d2SAndroid Build Coastguard Worker fclose(fp);
539*5e7646d2SAndroid Build Coastguard Worker
540*5e7646d2SAndroid Build Coastguard Worker return (1);
541*5e7646d2SAndroid Build Coastguard Worker }
542