xref: /aosp_15_r20/external/libcups/cups/testarray.c (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
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