1*e3723e1fSApple OSS Distributions /*
2*e3723e1fSApple OSS Distributions * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3*e3723e1fSApple OSS Distributions *
4*e3723e1fSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*e3723e1fSApple OSS Distributions *
6*e3723e1fSApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code
7*e3723e1fSApple OSS Distributions * as defined in and that are subject to the Apple Public Source License
8*e3723e1fSApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in
9*e3723e1fSApple OSS Distributions * compliance with the License. The rights granted to you under the License
10*e3723e1fSApple OSS Distributions * may not be used to create, or enable the creation or redistribution of,
11*e3723e1fSApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to
12*e3723e1fSApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any
13*e3723e1fSApple OSS Distributions * terms of an Apple operating system software license agreement.
14*e3723e1fSApple OSS Distributions *
15*e3723e1fSApple OSS Distributions * Please obtain a copy of the License at
16*e3723e1fSApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*e3723e1fSApple OSS Distributions *
18*e3723e1fSApple OSS Distributions * The Original Code and all software distributed under the License are
19*e3723e1fSApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*e3723e1fSApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*e3723e1fSApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*e3723e1fSApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*e3723e1fSApple OSS Distributions * Please see the License for the specific language governing rights and
24*e3723e1fSApple OSS Distributions * limitations under the License.
25*e3723e1fSApple OSS Distributions *
26*e3723e1fSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*e3723e1fSApple OSS Distributions */
28*e3723e1fSApple OSS Distributions #if DEBUG
29*e3723e1fSApple OSS Distributions #include "Tests.h"
30*e3723e1fSApple OSS Distributions
31*e3723e1fSApple OSS Distributions #include <libkern/c++/OSArray.h>
32*e3723e1fSApple OSS Distributions #include <libkern/c++/OSSet.h>
33*e3723e1fSApple OSS Distributions #include <libkern/c++/OSDictionary.h>
34*e3723e1fSApple OSS Distributions #include <libkern/c++/OSString.h>
35*e3723e1fSApple OSS Distributions #include <libkern/c++/OSSymbol.h>
36*e3723e1fSApple OSS Distributions #include <libkern/c++/OSCollectionIterator.h>
37*e3723e1fSApple OSS Distributions
38*e3723e1fSApple OSS Distributions void
testArray()39*e3723e1fSApple OSS Distributions testArray()
40*e3723e1fSApple OSS Distributions {
41*e3723e1fSApple OSS Distributions bool res = true;
42*e3723e1fSApple OSS Distributions void *spaceCheck, *spaceCheck2, *spaceCheck3;
43*e3723e1fSApple OSS Distributions int i, j, count, count2;
44*e3723e1fSApple OSS Distributions OSObject *cache[numStrCache], *str, *sym;
45*e3723e1fSApple OSS Distributions OSArray *array1, *array2;
46*e3723e1fSApple OSS Distributions
47*e3723e1fSApple OSS Distributions // Do first test without memory leak tests to initialise the metaclass
48*e3723e1fSApple OSS Distributions array1 = OSArray::withCapacity(1);
49*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "0a", array1);
50*e3723e1fSApple OSS Distributions if (array1) {
51*e3723e1fSApple OSS Distributions array1->release();
52*e3723e1fSApple OSS Distributions }
53*e3723e1fSApple OSS Distributions
54*e3723e1fSApple OSS Distributions // Grow the symbol pool to maximum
55*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
56*e3723e1fSApple OSS Distributions cache[i] = (OSObject *) OSSymbol::withCStringNoCopy(strCache[i]);
57*e3723e1fSApple OSS Distributions }
58*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
59*e3723e1fSApple OSS Distributions cache[i]->release();
60*e3723e1fSApple OSS Distributions }
61*e3723e1fSApple OSS Distributions
62*e3723e1fSApple OSS Distributions // Create and destroy an array
63*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
64*e3723e1fSApple OSS Distributions array1 = OSArray::withCapacity(1);
65*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1a", array1);
66*e3723e1fSApple OSS Distributions if (array1) {
67*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1b", !array1->getCount());
68*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1c", 1 == array1->getCapacity());
69*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1d", 1 == array1->getCapacityIncrement());
70*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1e", 4 == array1->setCapacityIncrement(4));
71*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1f", 4 == array1->getCapacityIncrement());
72*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1g", 8 == array1->ensureCapacity(5));
73*e3723e1fSApple OSS Distributions
74*e3723e1fSApple OSS Distributions spaceCheck2 = checkPointSpace();
75*e3723e1fSApple OSS Distributions cache[0] = IOString::withCStringNoCopy(strCache[0]);
76*e3723e1fSApple OSS Distributions
77*e3723e1fSApple OSS Distributions spaceCheck3 = checkPointSpace();
78*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1h", array1->setObject(cache[0]));
79*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1i", cache[0] == array1->getObject(0));
80*e3723e1fSApple OSS Distributions cache[0]->release();
81*e3723e1fSApple OSS Distributions res = res && checkSpace("(A)1j", spaceCheck3, 0);
82*e3723e1fSApple OSS Distributions
83*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1k", 1 == array1->getCount());
84*e3723e1fSApple OSS Distributions array1->flushCollection();
85*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "1l", !array1->getCount());
86*e3723e1fSApple OSS Distributions res = res && checkSpace("(A)1m", spaceCheck2, 0);
87*e3723e1fSApple OSS Distributions
88*e3723e1fSApple OSS Distributions array1->release();
89*e3723e1fSApple OSS Distributions }
90*e3723e1fSApple OSS Distributions res = res && checkSpace("(A)1", spaceCheck, 0);
91*e3723e1fSApple OSS Distributions
92*e3723e1fSApple OSS Distributions // Check the creation of a sizable OSArray from an array of IOObjects
93*e3723e1fSApple OSS Distributions // Also check indexing into the array.
94*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
95*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
96*e3723e1fSApple OSS Distributions cache[i] = OSString::withCStringNoCopy(strCache[i]);
97*e3723e1fSApple OSS Distributions }
98*e3723e1fSApple OSS Distributions array1 = OSArray::withObjects(cache, numStrCache, numStrCache);
99*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "2a", array1);
100*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
101*e3723e1fSApple OSS Distributions cache[i]->release();
102*e3723e1fSApple OSS Distributions }
103*e3723e1fSApple OSS Distributions if (array1) {
104*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "2b", numStrCache == (int) array1->getCount());
105*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "2c", numStrCache == (int) array1->getCapacity());
106*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "2d",
107*e3723e1fSApple OSS Distributions numStrCache == (int) array1->getCapacityIncrement());
108*e3723e1fSApple OSS Distributions
109*e3723e1fSApple OSS Distributions for (i = 0; (str = array1->getObject(i)); i++) {
110*e3723e1fSApple OSS Distributions if (str != cache[i]) {
111*e3723e1fSApple OSS Distributions verPrintf(("testArray(A) test 2e%d failed\n", i));
112*e3723e1fSApple OSS Distributions res = false;
113*e3723e1fSApple OSS Distributions }
114*e3723e1fSApple OSS Distributions }
115*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "2f", numStrCache == i);
116*e3723e1fSApple OSS Distributions array1->release();
117*e3723e1fSApple OSS Distributions }
118*e3723e1fSApple OSS Distributions res = res && checkSpace("(A)2", spaceCheck, 0);
119*e3723e1fSApple OSS Distributions
120*e3723e1fSApple OSS Distributions // Test array creation from another array by both the setObject method
121*e3723e1fSApple OSS Distributions // and the withArray factory. And test __takeObject code first
122*e3723e1fSApple OSS Distributions // with tail removal then with head removal
123*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
124*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
125*e3723e1fSApple OSS Distributions cache[i] = OSString::withCStringNoCopy(strCache[i]);
126*e3723e1fSApple OSS Distributions }
127*e3723e1fSApple OSS Distributions array1 = OSArray::withObjects(cache, numStrCache, numStrCache);
128*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3a", array1);
129*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
130*e3723e1fSApple OSS Distributions cache[i]->release();
131*e3723e1fSApple OSS Distributions }
132*e3723e1fSApple OSS Distributions array2 = 0;
133*e3723e1fSApple OSS Distributions if (array1) {
134*e3723e1fSApple OSS Distributions array2 = OSArray::withCapacity(1);
135*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3b", array2);
136*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3c", !array2->getCount());
137*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3d", array2->setObject(array1));
138*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3e", array1->getCount() == array2->getCount());
139*e3723e1fSApple OSS Distributions }
140*e3723e1fSApple OSS Distributions if (array2) {
141*e3723e1fSApple OSS Distributions count = 0;
142*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3f", numStrCache == (int) array2->getCount());
143*e3723e1fSApple OSS Distributions for (i = array2->getCount(); (str = array2->__takeObject(--i));) {
144*e3723e1fSApple OSS Distributions if (str != cache[i]) {
145*e3723e1fSApple OSS Distributions verPrintf(("testArray(A) test 3g%d failed\n", i));
146*e3723e1fSApple OSS Distributions res = false;
147*e3723e1fSApple OSS Distributions }
148*e3723e1fSApple OSS Distributions count += ((int) array2->getCount() == i);
149*e3723e1fSApple OSS Distributions str->release();
150*e3723e1fSApple OSS Distributions }
151*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3h", count == numStrCache);
152*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3i", -1 == i);
153*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3j", !array2->getCount());
154*e3723e1fSApple OSS Distributions
155*e3723e1fSApple OSS Distributions spaceCheck2 = checkPointSpace();
156*e3723e1fSApple OSS Distributions array2->flushCollection();
157*e3723e1fSApple OSS Distributions res = res && checkSpace("(A)3k", spaceCheck2, 0);
158*e3723e1fSApple OSS Distributions
159*e3723e1fSApple OSS Distributions array2->release();
160*e3723e1fSApple OSS Distributions array2 = 0;
161*e3723e1fSApple OSS Distributions }
162*e3723e1fSApple OSS Distributions if (array1) {
163*e3723e1fSApple OSS Distributions array2 = OSArray::withArray(array1, numStrCache - 1);
164*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3l", !array2);
165*e3723e1fSApple OSS Distributions array2 = OSArray::withArray(array1, array1->getCount());
166*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3m", array2);
167*e3723e1fSApple OSS Distributions array1->release();
168*e3723e1fSApple OSS Distributions }
169*e3723e1fSApple OSS Distributions if (array2) {
170*e3723e1fSApple OSS Distributions count = 0;
171*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3o", numStrCache == (int) array2->getCount());
172*e3723e1fSApple OSS Distributions for (i = 0; (str = array2->__takeObject(0)); i++) {
173*e3723e1fSApple OSS Distributions count += (str == cache[i]);
174*e3723e1fSApple OSS Distributions str->release();
175*e3723e1fSApple OSS Distributions }
176*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3p", count == numStrCache);
177*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "3q", !array2->getCount());
178*e3723e1fSApple OSS Distributions array2->release();
179*e3723e1fSApple OSS Distributions array2 = 0;
180*e3723e1fSApple OSS Distributions }
181*e3723e1fSApple OSS Distributions res = res && checkSpace("(A)3", spaceCheck, 0);
182*e3723e1fSApple OSS Distributions
183*e3723e1fSApple OSS Distributions // Test object replacement from one array to another
184*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
185*e3723e1fSApple OSS Distributions array1 = OSArray::withCapacity(numStrCache);
186*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4a", array1);
187*e3723e1fSApple OSS Distributions if (array1) {
188*e3723e1fSApple OSS Distributions count = count2 = 0;
189*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
190*e3723e1fSApple OSS Distributions str = OSString::withCStringNoCopy(strCache[i]);
191*e3723e1fSApple OSS Distributions count += array1->setObject(str);
192*e3723e1fSApple OSS Distributions count2 += (str == array1->lastObject());
193*e3723e1fSApple OSS Distributions str->release();
194*e3723e1fSApple OSS Distributions }
195*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4b", numStrCache == (int) array1->getCount());
196*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4c", count == numStrCache);
197*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4d", count2 == numStrCache);
198*e3723e1fSApple OSS Distributions }
199*e3723e1fSApple OSS Distributions array2 = OSArray::withCapacity(1);
200*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4e", array2);
201*e3723e1fSApple OSS Distributions if (array2) {
202*e3723e1fSApple OSS Distributions count = count2 = 0;
203*e3723e1fSApple OSS Distributions str = (OSObject *) OSSymbol::withCStringNoCopy(strCache[0]);
204*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
205*e3723e1fSApple OSS Distributions sym = (OSObject *) OSSymbol::withCStringNoCopy(strCache[i]);
206*e3723e1fSApple OSS Distributions count += array2->setObject(sym, 0);
207*e3723e1fSApple OSS Distributions count2 += (str == array2->lastObject());
208*e3723e1fSApple OSS Distributions sym->release();
209*e3723e1fSApple OSS Distributions }
210*e3723e1fSApple OSS Distributions str->release();
211*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4f", numStrCache == (int) array2->getCount());
212*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4g", count == numStrCache);
213*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4h", count2 == numStrCache);
214*e3723e1fSApple OSS Distributions }
215*e3723e1fSApple OSS Distributions if (array1 && array2) {
216*e3723e1fSApple OSS Distributions count = count2 = 0;
217*e3723e1fSApple OSS Distributions for (i = array1->getCount() - 1; (sym = array2->__takeObject(0)); i--) {
218*e3723e1fSApple OSS Distributions str = array1->replaceObject(sym, i);
219*e3723e1fSApple OSS Distributions count += (str != 0);
220*e3723e1fSApple OSS Distributions count2 += (sym != str);
221*e3723e1fSApple OSS Distributions if (str) {
222*e3723e1fSApple OSS Distributions str->release();
223*e3723e1fSApple OSS Distributions }
224*e3723e1fSApple OSS Distributions if (sym) {
225*e3723e1fSApple OSS Distributions sym->release();
226*e3723e1fSApple OSS Distributions }
227*e3723e1fSApple OSS Distributions }
228*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4k", numStrCache == (int) array1->getCount());
229*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4l", count == numStrCache);
230*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "4m", count2 == numStrCache);
231*e3723e1fSApple OSS Distributions array1->release();
232*e3723e1fSApple OSS Distributions array2->release();
233*e3723e1fSApple OSS Distributions } else {
234*e3723e1fSApple OSS Distributions if (array1) {
235*e3723e1fSApple OSS Distributions array1->release();
236*e3723e1fSApple OSS Distributions }
237*e3723e1fSApple OSS Distributions if (array2) {
238*e3723e1fSApple OSS Distributions array2->release();
239*e3723e1fSApple OSS Distributions }
240*e3723e1fSApple OSS Distributions }
241*e3723e1fSApple OSS Distributions res = res && checkSpace("(A)4", spaceCheck, 0);
242*e3723e1fSApple OSS Distributions
243*e3723e1fSApple OSS Distributions // Test array duplicate removal
244*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
245*e3723e1fSApple OSS Distributions array1 = OSArray::withCapacity(numStrCache);
246*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "5a", array1);
247*e3723e1fSApple OSS Distributions if (array1) {
248*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
249*e3723e1fSApple OSS Distributions sym = (OSObject *) OSSymbol::withCStringNoCopy(strCache[i]);
250*e3723e1fSApple OSS Distributions count += array1->setObject(sym);
251*e3723e1fSApple OSS Distributions sym->release();
252*e3723e1fSApple OSS Distributions }
253*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "5b", numStrCache == (int) array1->getCount());
254*e3723e1fSApple OSS Distributions
255*e3723e1fSApple OSS Distributions // remove duplicates
256*e3723e1fSApple OSS Distributions for (i = 0; (sym = array1->getObject(i));) {
257*e3723e1fSApple OSS Distributions if (sym->getRetainCount() == 1) {
258*e3723e1fSApple OSS Distributions i++;
259*e3723e1fSApple OSS Distributions } else {
260*e3723e1fSApple OSS Distributions //sym = array1->__takeObject(i);
261*e3723e1fSApple OSS Distributions //sym->release();
262*e3723e1fSApple OSS Distributions array1->removeObject(i);
263*e3723e1fSApple OSS Distributions }
264*e3723e1fSApple OSS Distributions }
265*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "5c", numStrCache != (int) array1->getCount());
266*e3723e1fSApple OSS Distributions
267*e3723e1fSApple OSS Distributions // check to see that all symbols are really there
268*e3723e1fSApple OSS Distributions for (count = 0, i = 0; i < numStrCache; i++) {
269*e3723e1fSApple OSS Distributions sym = (OSObject *) OSSymbol::withCStringNoCopy(strCache[i]);
270*e3723e1fSApple OSS Distributions for (count2 = false, j = 0; (str = array1->getObject(j)); j++) {
271*e3723e1fSApple OSS Distributions if (str == sym) {
272*e3723e1fSApple OSS Distributions count2 = true;
273*e3723e1fSApple OSS Distributions break;
274*e3723e1fSApple OSS Distributions }
275*e3723e1fSApple OSS Distributions }
276*e3723e1fSApple OSS Distributions count += count2;
277*e3723e1fSApple OSS Distributions sym->release();
278*e3723e1fSApple OSS Distributions }
279*e3723e1fSApple OSS Distributions TEST_ASSERT('A', "5c", count == numStrCache);
280*e3723e1fSApple OSS Distributions array1->release();
281*e3723e1fSApple OSS Distributions }
282*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)5", spaceCheck, 0);
283*e3723e1fSApple OSS Distributions
284*e3723e1fSApple OSS Distributions if (res) {
285*e3723e1fSApple OSS Distributions verPrintf(("testArray: All OSArray Tests passed\n"));
286*e3723e1fSApple OSS Distributions } else {
287*e3723e1fSApple OSS Distributions logPrintf(("testArray: Some OSArray Tests failed\n"));
288*e3723e1fSApple OSS Distributions }
289*e3723e1fSApple OSS Distributions }
290*e3723e1fSApple OSS Distributions
291*e3723e1fSApple OSS Distributions void
testSet()292*e3723e1fSApple OSS Distributions testSet()
293*e3723e1fSApple OSS Distributions {
294*e3723e1fSApple OSS Distributions bool res = true;
295*e3723e1fSApple OSS Distributions void *spaceCheck, *spaceCheck2, *spaceCheck3;
296*e3723e1fSApple OSS Distributions int i, count, count2;
297*e3723e1fSApple OSS Distributions OSObject *cache[numStrCache], *str, *sym;
298*e3723e1fSApple OSS Distributions OSSet *set1, *set2;
299*e3723e1fSApple OSS Distributions OSArray *array;
300*e3723e1fSApple OSS Distributions
301*e3723e1fSApple OSS Distributions // Do first test without memory leak tests to initialise the metaclass
302*e3723e1fSApple OSS Distributions set1 = OSSet::withCapacity(1);
303*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "0a", set1);
304*e3723e1fSApple OSS Distributions if (set1) {
305*e3723e1fSApple OSS Distributions set1->release();
306*e3723e1fSApple OSS Distributions }
307*e3723e1fSApple OSS Distributions
308*e3723e1fSApple OSS Distributions // Grow the symbol pool to maximum
309*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
310*e3723e1fSApple OSS Distributions cache[i] = (OSObject *) OSSymbol::withCStringNoCopy(strCache[i]);
311*e3723e1fSApple OSS Distributions }
312*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
313*e3723e1fSApple OSS Distributions cache[i]->release();
314*e3723e1fSApple OSS Distributions }
315*e3723e1fSApple OSS Distributions
316*e3723e1fSApple OSS Distributions // Create and destroy an set
317*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
318*e3723e1fSApple OSS Distributions set1 = OSSet::withCapacity(1);
319*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1a", set1);
320*e3723e1fSApple OSS Distributions if (set1) {
321*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1b", !set1->getCount());
322*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1c", 1 == set1->getCapacity());
323*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1d", 1 == set1->getCapacityIncrement());
324*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1e", 4 == set1->setCapacityIncrement(4));
325*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1f", 4 == set1->getCapacityIncrement());
326*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1g", 8 == set1->ensureCapacity(5));
327*e3723e1fSApple OSS Distributions
328*e3723e1fSApple OSS Distributions spaceCheck2 = checkPointSpace();
329*e3723e1fSApple OSS Distributions cache[0] = IOString::withCStringNoCopy(strCache[0]);
330*e3723e1fSApple OSS Distributions
331*e3723e1fSApple OSS Distributions spaceCheck3 = checkPointSpace();
332*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1h", set1->setObject(cache[0]));
333*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1i", set1->containsObject(cache[0]));
334*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1j", cache[0] == set1->getAnyObject());
335*e3723e1fSApple OSS Distributions cache[0]->release();
336*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)1k", spaceCheck3, 0);
337*e3723e1fSApple OSS Distributions
338*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1l", 1 == set1->getCount());
339*e3723e1fSApple OSS Distributions set1->flushCollection();
340*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "1m", !set1->getCount());
341*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)1n", spaceCheck2, 0);
342*e3723e1fSApple OSS Distributions
343*e3723e1fSApple OSS Distributions set1->release();
344*e3723e1fSApple OSS Distributions }
345*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)1", spaceCheck, 0);
346*e3723e1fSApple OSS Distributions
347*e3723e1fSApple OSS Distributions // Check the creation of a sizable OSSet from an set of IOObjects
348*e3723e1fSApple OSS Distributions // Also check member test of set.
349*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
350*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
351*e3723e1fSApple OSS Distributions cache[i] = OSString::withCStringNoCopy(strCache[i]);
352*e3723e1fSApple OSS Distributions }
353*e3723e1fSApple OSS Distributions set1 = OSSet::withObjects(cache, numStrCache, numStrCache);
354*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "2a", set1);
355*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
356*e3723e1fSApple OSS Distributions cache[i]->release();
357*e3723e1fSApple OSS Distributions }
358*e3723e1fSApple OSS Distributions if (set1) {
359*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "2b", numStrCache == (int) set1->getCount());
360*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "2c", numStrCache == (int) set1->getCapacity());
361*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "2d",
362*e3723e1fSApple OSS Distributions numStrCache == (int) set1->getCapacityIncrement());
363*e3723e1fSApple OSS Distributions
364*e3723e1fSApple OSS Distributions count = 0;
365*e3723e1fSApple OSS Distributions for (i = set1->getCount(); --i >= 0;) {
366*e3723e1fSApple OSS Distributions count += set1->member(cache[i]);
367*e3723e1fSApple OSS Distributions }
368*e3723e1fSApple OSS Distributions
369*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "2e", numStrCache == count);
370*e3723e1fSApple OSS Distributions set1->release();
371*e3723e1fSApple OSS Distributions }
372*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)2", spaceCheck, 0);
373*e3723e1fSApple OSS Distributions
374*e3723e1fSApple OSS Distributions // Test set creation from another set by both the setObject method
375*e3723e1fSApple OSS Distributions // and the withArray factory. And test __takeObject code first
376*e3723e1fSApple OSS Distributions // with tail removal then with head removal
377*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
378*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
379*e3723e1fSApple OSS Distributions cache[i] = OSString::withCStringNoCopy(strCache[i]);
380*e3723e1fSApple OSS Distributions }
381*e3723e1fSApple OSS Distributions set1 = OSSet::withObjects(cache, numStrCache, numStrCache);
382*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3a", set1);
383*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
384*e3723e1fSApple OSS Distributions cache[i]->release();
385*e3723e1fSApple OSS Distributions }
386*e3723e1fSApple OSS Distributions set2 = 0;
387*e3723e1fSApple OSS Distributions if (set1) {
388*e3723e1fSApple OSS Distributions set2 = OSSet::withCapacity(set1->getCount());
389*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3b", set2);
390*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3c", !set2->getCount());
391*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3d", set2->setObject(set1));
392*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3e", set1->getCount() == set2->getCount());
393*e3723e1fSApple OSS Distributions }
394*e3723e1fSApple OSS Distributions if (set2) {
395*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3f", numStrCache == (int) set2->getCount());
396*e3723e1fSApple OSS Distributions count = count2 = 0;
397*e3723e1fSApple OSS Distributions while ((str = set2->getAnyObject())) {
398*e3723e1fSApple OSS Distributions count += set2->__takeObject(str);
399*e3723e1fSApple OSS Distributions count2 += set1->member(str);
400*e3723e1fSApple OSS Distributions str->release();
401*e3723e1fSApple OSS Distributions }
402*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3g", !set2->getCount());
403*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3h", numStrCache == count);
404*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3i", numStrCache == count2);
405*e3723e1fSApple OSS Distributions
406*e3723e1fSApple OSS Distributions spaceCheck2 = checkPointSpace();
407*e3723e1fSApple OSS Distributions set2->flushCollection();
408*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)3j", spaceCheck2, 0);
409*e3723e1fSApple OSS Distributions
410*e3723e1fSApple OSS Distributions set2->release();
411*e3723e1fSApple OSS Distributions set2 = 0;
412*e3723e1fSApple OSS Distributions }
413*e3723e1fSApple OSS Distributions if (set1) {
414*e3723e1fSApple OSS Distributions set2 = OSSet::withSet(set1, numStrCache - 1);
415*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3k", !set2);
416*e3723e1fSApple OSS Distributions set2 = OSSet::withSet(set1, set1->getCount());
417*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3l", set2);
418*e3723e1fSApple OSS Distributions set1->release();
419*e3723e1fSApple OSS Distributions }
420*e3723e1fSApple OSS Distributions if (set2) {
421*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3m", numStrCache == (int) set2->getCount());
422*e3723e1fSApple OSS Distributions i = count = count2 = 0;
423*e3723e1fSApple OSS Distributions while ((str = set2->getAnyObject())) {
424*e3723e1fSApple OSS Distributions count += set2->__takeObject(str);
425*e3723e1fSApple OSS Distributions count2 += (cache[i++] == str);
426*e3723e1fSApple OSS Distributions str->release();
427*e3723e1fSApple OSS Distributions }
428*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3n", !set2->getCount());
429*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3o", numStrCache == count);
430*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "3p", numStrCache == count2);
431*e3723e1fSApple OSS Distributions
432*e3723e1fSApple OSS Distributions set2->release();
433*e3723e1fSApple OSS Distributions set2 = 0;
434*e3723e1fSApple OSS Distributions }
435*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)3", spaceCheck, 0);
436*e3723e1fSApple OSS Distributions
437*e3723e1fSApple OSS Distributions // Test duplicate removal
438*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
439*e3723e1fSApple OSS Distributions set2 = 0;
440*e3723e1fSApple OSS Distributions set1 = OSSet::withCapacity(numStrCache);
441*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "4a", set1);
442*e3723e1fSApple OSS Distributions if (set1) {
443*e3723e1fSApple OSS Distributions count = 0;
444*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
445*e3723e1fSApple OSS Distributions sym = (OSObject *) OSSymbol::withCStringNoCopy(strCache[i]);
446*e3723e1fSApple OSS Distributions count += set1->setObject(sym);
447*e3723e1fSApple OSS Distributions sym->release();
448*e3723e1fSApple OSS Distributions }
449*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "4b", numStrCache != (int) set1->getCount());
450*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "4c", count == (int) set1->getCount());
451*e3723e1fSApple OSS Distributions
452*e3723e1fSApple OSS Distributions count = count2 = 0;
453*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
454*e3723e1fSApple OSS Distributions sym = (OSObject *) OSSymbol::withCStringNoCopy(strCache[i]);
455*e3723e1fSApple OSS Distributions count += set1->member(sym);
456*e3723e1fSApple OSS Distributions count2 += sym->getRetainCount();
457*e3723e1fSApple OSS Distributions sym->release();
458*e3723e1fSApple OSS Distributions }
459*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "4d", count == numStrCache);
460*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "4e", count2 == numStrCache * 2);
461*e3723e1fSApple OSS Distributions
462*e3723e1fSApple OSS Distributions set2 = OSSet::withSet(set1, 2 * set1->getCount());
463*e3723e1fSApple OSS Distributions }
464*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "4f", set2);
465*e3723e1fSApple OSS Distributions if (set2) {
466*e3723e1fSApple OSS Distributions set2->setObject(set1);
467*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "4g", set1->getCount() == set2->getCount());
468*e3723e1fSApple OSS Distributions set1->release();
469*e3723e1fSApple OSS Distributions set2->release();
470*e3723e1fSApple OSS Distributions }
471*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)4", spaceCheck, 0);
472*e3723e1fSApple OSS Distributions
473*e3723e1fSApple OSS Distributions // Test array duplicate removal
474*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
475*e3723e1fSApple OSS Distributions array = OSArray::withCapacity(numStrCache);
476*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
477*e3723e1fSApple OSS Distributions sym = (OSObject *) OSSymbol::withCStringNoCopy(strCache[i]);
478*e3723e1fSApple OSS Distributions count += array->setObject(sym);
479*e3723e1fSApple OSS Distributions sym->release();
480*e3723e1fSApple OSS Distributions }
481*e3723e1fSApple OSS Distributions set1 = OSSet::withArray(array, numStrCache);
482*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "5a", set1);
483*e3723e1fSApple OSS Distributions if (set1) {
484*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "5b", array->getCount() != set1->getCount());
485*e3723e1fSApple OSS Distributions array->release();
486*e3723e1fSApple OSS Distributions
487*e3723e1fSApple OSS Distributions count = count2 = set1->getCount();
488*e3723e1fSApple OSS Distributions while ((sym = set1->getAnyObject())) {
489*e3723e1fSApple OSS Distributions count -= set1->__takeObject(sym);
490*e3723e1fSApple OSS Distributions count2 -= sym->getRetainCount();
491*e3723e1fSApple OSS Distributions sym->release();
492*e3723e1fSApple OSS Distributions }
493*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "5c", !count);
494*e3723e1fSApple OSS Distributions TEST_ASSERT('S', "5d", !count2);
495*e3723e1fSApple OSS Distributions set1->release();
496*e3723e1fSApple OSS Distributions }
497*e3723e1fSApple OSS Distributions res = res && checkSpace("(S)5", spaceCheck, 0);
498*e3723e1fSApple OSS Distributions
499*e3723e1fSApple OSS Distributions if (res) {
500*e3723e1fSApple OSS Distributions verPrintf(("testSet: All OSSet Tests passed\n"));
501*e3723e1fSApple OSS Distributions } else {
502*e3723e1fSApple OSS Distributions logPrintf(("testSet: Some OSSet Tests failed\n"));
503*e3723e1fSApple OSS Distributions }
504*e3723e1fSApple OSS Distributions }
505*e3723e1fSApple OSS Distributions
506*e3723e1fSApple OSS Distributions void
testDictionary()507*e3723e1fSApple OSS Distributions testDictionary()
508*e3723e1fSApple OSS Distributions {
509*e3723e1fSApple OSS Distributions bool res = true;
510*e3723e1fSApple OSS Distributions void *spaceCheck, *spaceCheck2, *spaceCheck3;
511*e3723e1fSApple OSS Distributions OSObject *cache[numStrCache];
512*e3723e1fSApple OSS Distributions OSString *str;
513*e3723e1fSApple OSS Distributions const OSSymbol *symCache[numStrCache], *sym;
514*e3723e1fSApple OSS Distributions OSDictionary *dict1, *dict2;
515*e3723e1fSApple OSS Distributions int i, numSymbols, count1, count2;
516*e3723e1fSApple OSS Distributions
517*e3723e1fSApple OSS Distributions // Do first test without memory leak tests to initialise the metaclass
518*e3723e1fSApple OSS Distributions dict1 = OSDictionary::withCapacity(1);
519*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "0a", dict1);
520*e3723e1fSApple OSS Distributions if (dict1) {
521*e3723e1fSApple OSS Distributions dict1->release();
522*e3723e1fSApple OSS Distributions }
523*e3723e1fSApple OSS Distributions
524*e3723e1fSApple OSS Distributions // Grow the symbol pool to maximum
525*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
526*e3723e1fSApple OSS Distributions symCache[i] = OSSymbol::withCStringNoCopy(strCache[i]);
527*e3723e1fSApple OSS Distributions }
528*e3723e1fSApple OSS Distributions for (i = 0; i < numStrCache; i++) {
529*e3723e1fSApple OSS Distributions symCache[i]->release();
530*e3723e1fSApple OSS Distributions }
531*e3723e1fSApple OSS Distributions
532*e3723e1fSApple OSS Distributions // Create and destroy a dictionary
533*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
534*e3723e1fSApple OSS Distributions dict1 = OSDictionary::withCapacity(1);
535*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1a", dict1);
536*e3723e1fSApple OSS Distributions if (dict1) {
537*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1b", !dict1->getCount());
538*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1c", 1 == dict1->getCapacity());
539*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1d", 1 == dict1->getCapacityIncrement());
540*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1e", 4 == dict1->setCapacityIncrement(4));
541*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1f", 4 == dict1->getCapacityIncrement());
542*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1g", 8 == dict1->ensureCapacity(5));
543*e3723e1fSApple OSS Distributions
544*e3723e1fSApple OSS Distributions spaceCheck2 = checkPointSpace();
545*e3723e1fSApple OSS Distributions sym = OSSymbol::withCStringNoCopy(strCache[0]);
546*e3723e1fSApple OSS Distributions
547*e3723e1fSApple OSS Distributions spaceCheck3 = checkPointSpace();
548*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1h", dict1->setObject((OSObject *) sym, sym));
549*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1i", (OSObject *) sym == dict1->getObject(sym));
550*e3723e1fSApple OSS Distributions sym->release();
551*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1i", 2 == sym->getRetainCount());
552*e3723e1fSApple OSS Distributions res = res && checkSpace("(D)1j", spaceCheck3, 0);
553*e3723e1fSApple OSS Distributions
554*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1k", 1 == dict1->getCount());
555*e3723e1fSApple OSS Distributions dict1->flushCollection();
556*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "1l", !dict1->getCount());
557*e3723e1fSApple OSS Distributions res = res && checkSpace("(D)1m", spaceCheck2, 0);
558*e3723e1fSApple OSS Distributions
559*e3723e1fSApple OSS Distributions dict1->release();
560*e3723e1fSApple OSS Distributions }
561*e3723e1fSApple OSS Distributions res = res && checkSpace("(D)1", spaceCheck, 0);
562*e3723e1fSApple OSS Distributions
563*e3723e1fSApple OSS Distributions // Check the creation of a sizable OSDictionary from an array of IOObjects
564*e3723e1fSApple OSS Distributions // Also check indexing into the array.
565*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
566*e3723e1fSApple OSS Distributions for (i = 0, numSymbols = 0; i < numStrCache; i++) {
567*e3723e1fSApple OSS Distributions sym = OSSymbol::withCStringNoCopy(strCache[i]);
568*e3723e1fSApple OSS Distributions if (1 == sym->getRetainCount()) {
569*e3723e1fSApple OSS Distributions symCache[numSymbols++] = sym;
570*e3723e1fSApple OSS Distributions } else {
571*e3723e1fSApple OSS Distributions sym->release();
572*e3723e1fSApple OSS Distributions }
573*e3723e1fSApple OSS Distributions }
574*e3723e1fSApple OSS Distributions dict1 = OSDictionary::withObjects(
575*e3723e1fSApple OSS Distributions (OSObject **) symCache, symCache, numSymbols, numSymbols);
576*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "2a", dict1);
577*e3723e1fSApple OSS Distributions count1 = count2 = 0;
578*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
579*e3723e1fSApple OSS Distributions count1 += (symCache[i]->getRetainCount() == 3);
580*e3723e1fSApple OSS Distributions }
581*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "2b", count1 == numSymbols);
582*e3723e1fSApple OSS Distributions if (dict1) {
583*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "2c", numSymbols == (int) dict1->getCount());
584*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "2d", numSymbols == (int) dict1->getCapacity());
585*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "2e",
586*e3723e1fSApple OSS Distributions numSymbols == (int) dict1->getCapacityIncrement());
587*e3723e1fSApple OSS Distributions
588*e3723e1fSApple OSS Distributions for (i = dict1->getCount(); --i >= 0;) {
589*e3723e1fSApple OSS Distributions str = (OSString *) dict1->getObject(symCache[i]);
590*e3723e1fSApple OSS Distributions if (str != (OSString *) symCache[i]) {
591*e3723e1fSApple OSS Distributions verPrintf(("testDictionary(D) test 2f%d failed\n", i));
592*e3723e1fSApple OSS Distributions res = false;
593*e3723e1fSApple OSS Distributions }
594*e3723e1fSApple OSS Distributions }
595*e3723e1fSApple OSS Distributions dict1->release();
596*e3723e1fSApple OSS Distributions }
597*e3723e1fSApple OSS Distributions count1 = count2 = 0;
598*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
599*e3723e1fSApple OSS Distributions count1 += (symCache[i]->getRetainCount() == 1);
600*e3723e1fSApple OSS Distributions symCache[i]->release();
601*e3723e1fSApple OSS Distributions }
602*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "2g", count1 == numSymbols);
603*e3723e1fSApple OSS Distributions res = res && checkSpace("(D)2", spaceCheck, 0);
604*e3723e1fSApple OSS Distributions
605*e3723e1fSApple OSS Distributions // Check the creation of a sizable Dictionary from an array of IOStrings
606*e3723e1fSApple OSS Distributions // Also check searching dictionary use OSString for a key.
607*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
608*e3723e1fSApple OSS Distributions for (i = 0, numSymbols = 0; i < numStrCache; i++) {
609*e3723e1fSApple OSS Distributions sym = OSSymbol::withCStringNoCopy(strCache[i]);
610*e3723e1fSApple OSS Distributions if (1 == sym->getRetainCount()) {
611*e3723e1fSApple OSS Distributions cache[numSymbols] = OSString::withCStringNoCopy(strCache[i]);
612*e3723e1fSApple OSS Distributions symCache[numSymbols] = sym;
613*e3723e1fSApple OSS Distributions numSymbols++;
614*e3723e1fSApple OSS Distributions } else {
615*e3723e1fSApple OSS Distributions sym->release();
616*e3723e1fSApple OSS Distributions }
617*e3723e1fSApple OSS Distributions }
618*e3723e1fSApple OSS Distributions dict1 = OSDictionary::withObjects((OSObject **) symCache,
619*e3723e1fSApple OSS Distributions (OSString **) cache,
620*e3723e1fSApple OSS Distributions numSymbols, numSymbols);
621*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "3a", dict1);
622*e3723e1fSApple OSS Distributions count1 = count2 = 0;
623*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
624*e3723e1fSApple OSS Distributions count1 += (symCache[i]->getRetainCount() == 3);
625*e3723e1fSApple OSS Distributions count2 += (cache[i]->getRetainCount() == 1);
626*e3723e1fSApple OSS Distributions }
627*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "3b", count1 == numSymbols);
628*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "3c", count2 == numSymbols);
629*e3723e1fSApple OSS Distributions if (dict1) {
630*e3723e1fSApple OSS Distributions count1 = count2 = 0;
631*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
632*e3723e1fSApple OSS Distributions str = (OSString *) cache[i];
633*e3723e1fSApple OSS Distributions count1 += (symCache[i] == (const OSSymbol *) dict1->getObject(str));
634*e3723e1fSApple OSS Distributions count2 += (symCache[i]->getRetainCount() == 3);
635*e3723e1fSApple OSS Distributions }
636*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "3d", count1 == numSymbols);
637*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "3e", count2 == numSymbols);
638*e3723e1fSApple OSS Distributions
639*e3723e1fSApple OSS Distributions count1 = count2 = 0;
640*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
641*e3723e1fSApple OSS Distributions const char *cStr = ((OSString *) cache[i])->getCStringNoCopy();
642*e3723e1fSApple OSS Distributions
643*e3723e1fSApple OSS Distributions count1 += (symCache[i] == (const OSSymbol *) dict1->getObject(cStr));
644*e3723e1fSApple OSS Distributions count2 += (symCache[i]->getRetainCount() == 3);
645*e3723e1fSApple OSS Distributions }
646*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "3f", count1 == numSymbols);
647*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "3g", count2 == numSymbols);
648*e3723e1fSApple OSS Distributions
649*e3723e1fSApple OSS Distributions dict1->release();
650*e3723e1fSApple OSS Distributions }
651*e3723e1fSApple OSS Distributions count1 = count2 = 0;
652*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
653*e3723e1fSApple OSS Distributions count1 += (symCache[i]->getRetainCount() == 1);
654*e3723e1fSApple OSS Distributions count2 += (cache[i]->getRetainCount() == 1);
655*e3723e1fSApple OSS Distributions symCache[i]->release();
656*e3723e1fSApple OSS Distributions cache[i]->release();
657*e3723e1fSApple OSS Distributions }
658*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "3h", count1 == numSymbols);
659*e3723e1fSApple OSS Distributions res = res && checkSpace("(D)3", spaceCheck, 0);
660*e3723e1fSApple OSS Distributions
661*e3723e1fSApple OSS Distributions // Check the creation of a small dictionary then grow it one item at a time
662*e3723e1fSApple OSS Distributions // Create a new dictionary from the old dictionary.
663*e3723e1fSApple OSS Distributions // Finally remove each item permanently.
664*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
665*e3723e1fSApple OSS Distributions for (i = 0, numSymbols = 0; i < numStrCache; i++) {
666*e3723e1fSApple OSS Distributions sym = OSSymbol::withCStringNoCopy(strCache[i]);
667*e3723e1fSApple OSS Distributions if (1 == sym->getRetainCount()) {
668*e3723e1fSApple OSS Distributions cache[numSymbols] = OSString::withCStringNoCopy(strCache[i]);
669*e3723e1fSApple OSS Distributions symCache[numSymbols] = sym;
670*e3723e1fSApple OSS Distributions numSymbols++;
671*e3723e1fSApple OSS Distributions } else {
672*e3723e1fSApple OSS Distributions sym->release();
673*e3723e1fSApple OSS Distributions }
674*e3723e1fSApple OSS Distributions }
675*e3723e1fSApple OSS Distributions dict2 = 0;
676*e3723e1fSApple OSS Distributions dict1 = OSDictionary::withCapacity(1);
677*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4a", dict1);
678*e3723e1fSApple OSS Distributions if (dict1) {
679*e3723e1fSApple OSS Distributions count1 = count2 = 0;
680*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
681*e3723e1fSApple OSS Distributions sym = symCache[i];
682*e3723e1fSApple OSS Distributions count1 += ((OSObject *) sym == dict1->setObject((OSObject *) sym,
683*e3723e1fSApple OSS Distributions sym->getCStringNoCopy()));
684*e3723e1fSApple OSS Distributions count2 += (sym->getRetainCount() == 3);
685*e3723e1fSApple OSS Distributions }
686*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4b", numSymbols == (int) dict1->getCount());
687*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4c", numSymbols == count1);
688*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4d", numSymbols == count2);
689*e3723e1fSApple OSS Distributions
690*e3723e1fSApple OSS Distributions dict2 = OSDictionary::withDictionary(dict1, numSymbols - 1);
691*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4b", !dict2);
692*e3723e1fSApple OSS Distributions dict2 = OSDictionary::withDictionary(dict1, numSymbols);
693*e3723e1fSApple OSS Distributions }
694*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4e", dict2);
695*e3723e1fSApple OSS Distributions if (dict2) {
696*e3723e1fSApple OSS Distributions dict1->release(); dict1 = 0;
697*e3723e1fSApple OSS Distributions
698*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4f", numSymbols == (int) dict2->getCount());
699*e3723e1fSApple OSS Distributions
700*e3723e1fSApple OSS Distributions count1 = count2 = 0;
701*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
702*e3723e1fSApple OSS Distributions OSObject *replacedObject;
703*e3723e1fSApple OSS Distributions
704*e3723e1fSApple OSS Distributions sym = symCache[i];
705*e3723e1fSApple OSS Distributions str = (OSString *) cache[i];
706*e3723e1fSApple OSS Distributions replacedObject = dict2->setObject(str, str);
707*e3723e1fSApple OSS Distributions count1 += ((OSString *) sym == replacedObject);
708*e3723e1fSApple OSS Distributions replacedObject->release();
709*e3723e1fSApple OSS Distributions count2 += (sym->getRetainCount() == 2);
710*e3723e1fSApple OSS Distributions str->release();
711*e3723e1fSApple OSS Distributions }
712*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4g", numSymbols == count1);
713*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4h", numSymbols == count2);
714*e3723e1fSApple OSS Distributions
715*e3723e1fSApple OSS Distributions count1 = count2 = 0;
716*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
717*e3723e1fSApple OSS Distributions sym = symCache[i];
718*e3723e1fSApple OSS Distributions str = (OSString *) cache[i];
719*e3723e1fSApple OSS Distributions count1 += (str == dict2->__takeObject(sym));
720*e3723e1fSApple OSS Distributions str->release();
721*e3723e1fSApple OSS Distributions count2 += (sym->getRetainCount() == 1);
722*e3723e1fSApple OSS Distributions sym->release();
723*e3723e1fSApple OSS Distributions }
724*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4i", numSymbols == count1);
725*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4j", numSymbols == count2);
726*e3723e1fSApple OSS Distributions TEST_ASSERT('D', "4k", !dict2->getCount());
727*e3723e1fSApple OSS Distributions dict2->release(); dict2 = 0;
728*e3723e1fSApple OSS Distributions } else if (dict1) {
729*e3723e1fSApple OSS Distributions dict1->release();
730*e3723e1fSApple OSS Distributions }
731*e3723e1fSApple OSS Distributions res = res && checkSpace("(D)4", spaceCheck, 0);
732*e3723e1fSApple OSS Distributions
733*e3723e1fSApple OSS Distributions if (res) {
734*e3723e1fSApple OSS Distributions verPrintf(("testDictionary: All OSDictionary Tests passed\n"));
735*e3723e1fSApple OSS Distributions } else {
736*e3723e1fSApple OSS Distributions logPrintf(("testDictionary: Some OSDictionary Tests failed\n"));
737*e3723e1fSApple OSS Distributions }
738*e3723e1fSApple OSS Distributions }
739*e3723e1fSApple OSS Distributions
740*e3723e1fSApple OSS Distributions void
testIterator()741*e3723e1fSApple OSS Distributions testIterator()
742*e3723e1fSApple OSS Distributions {
743*e3723e1fSApple OSS Distributions bool res = true;
744*e3723e1fSApple OSS Distributions void *spaceCheck;
745*e3723e1fSApple OSS Distributions OSObject *cache[numStrCache];
746*e3723e1fSApple OSS Distributions OSString *str = 0;
747*e3723e1fSApple OSS Distributions const OSSymbol *symCache[numStrCache], *sym;
748*e3723e1fSApple OSS Distributions OSDictionary *dict;
749*e3723e1fSApple OSS Distributions OSSet *set;
750*e3723e1fSApple OSS Distributions OSArray *array, *bigReturn;
751*e3723e1fSApple OSS Distributions OSCollectionIterator *iter1, *iter2;
752*e3723e1fSApple OSS Distributions int i, numSymbols, count1, count2, count3;
753*e3723e1fSApple OSS Distributions
754*e3723e1fSApple OSS Distributions // Setup symbol and string pools
755*e3723e1fSApple OSS Distributions for (i = 0, numSymbols = 0; i < numStrCache; i++) {
756*e3723e1fSApple OSS Distributions sym = OSSymbol::withCStringNoCopy(strCache[i]);
757*e3723e1fSApple OSS Distributions if (1 == sym->getRetainCount()) {
758*e3723e1fSApple OSS Distributions cache[numSymbols] = OSString::withCStringNoCopy(strCache[i]);
759*e3723e1fSApple OSS Distributions symCache[numSymbols] = sym;
760*e3723e1fSApple OSS Distributions numSymbols++;
761*e3723e1fSApple OSS Distributions } else {
762*e3723e1fSApple OSS Distributions sym->release();
763*e3723e1fSApple OSS Distributions }
764*e3723e1fSApple OSS Distributions }
765*e3723e1fSApple OSS Distributions
766*e3723e1fSApple OSS Distributions // Test the array iterator
767*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
768*e3723e1fSApple OSS Distributions iter1 = iter2 = 0;
769*e3723e1fSApple OSS Distributions array = OSArray::withCapacity(numSymbols);
770*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1a", array);
771*e3723e1fSApple OSS Distributions if (array) {
772*e3723e1fSApple OSS Distributions count1 = count2 = 0;
773*e3723e1fSApple OSS Distributions for (i = numSymbols; --i >= 0;) {
774*e3723e1fSApple OSS Distributions count1 += array->setObject(cache[i], 0);
775*e3723e1fSApple OSS Distributions }
776*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1b", count1 == numSymbols);
777*e3723e1fSApple OSS Distributions
778*e3723e1fSApple OSS Distributions iter1 = OSCollectionIterator::withCollection(array);
779*e3723e1fSApple OSS Distributions iter2 = OSCollectionIterator::withCollection(array);
780*e3723e1fSApple OSS Distributions }
781*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1c", iter1);
782*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1d", iter2);
783*e3723e1fSApple OSS Distributions if (iter1 && iter2) {
784*e3723e1fSApple OSS Distributions count1 = count2 = count3 = 0;
785*e3723e1fSApple OSS Distributions for (i = 0; (str = (IOString *) iter1->getNextObject()); i++) {
786*e3723e1fSApple OSS Distributions bigReturn = iter2->nextEntries();
787*e3723e1fSApple OSS Distributions count1 += (bigReturn->getCount() == 1);
788*e3723e1fSApple OSS Distributions count2 += (cache[i] == bigReturn->getObject(0));
789*e3723e1fSApple OSS Distributions count3 += (cache[i] == str);
790*e3723e1fSApple OSS Distributions }
791*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1e", count1 == numSymbols);
792*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1f", count2 == numSymbols);
793*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1g", count3 == numSymbols);
794*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1h", iter1->valid());
795*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1i", iter2->valid());
796*e3723e1fSApple OSS Distributions
797*e3723e1fSApple OSS Distributions iter1->reset();
798*e3723e1fSApple OSS Distributions str = (OSString *) array->__takeObject(0);
799*e3723e1fSApple OSS Distributions array->setObject(str, 0);
800*e3723e1fSApple OSS Distributions str->release();
801*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1j", !iter1->getNextObject());
802*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1k", !iter1->valid());
803*e3723e1fSApple OSS Distributions
804*e3723e1fSApple OSS Distributions iter1->reset();
805*e3723e1fSApple OSS Distributions count1 = count2 = count3 = 0;
806*e3723e1fSApple OSS Distributions for (i = 0;; i++) {
807*e3723e1fSApple OSS Distributions if (i & 1) {
808*e3723e1fSApple OSS Distributions str = (OSString *) iter1->getNextObject();
809*e3723e1fSApple OSS Distributions } else if ((bigReturn = iter1->nextEntries())) {
810*e3723e1fSApple OSS Distributions str = (OSString *) bigReturn->getObject(0);
811*e3723e1fSApple OSS Distributions } else {
812*e3723e1fSApple OSS Distributions str = 0;
813*e3723e1fSApple OSS Distributions }
814*e3723e1fSApple OSS Distributions
815*e3723e1fSApple OSS Distributions if (!str) {
816*e3723e1fSApple OSS Distributions break;
817*e3723e1fSApple OSS Distributions }
818*e3723e1fSApple OSS Distributions count1 += (cache[i] == str);
819*e3723e1fSApple OSS Distributions }
820*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1l", count1 == numSymbols);
821*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1m", i == numSymbols);
822*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1n", iter1->valid());
823*e3723e1fSApple OSS Distributions
824*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "1o", 3 == array->getRetainCount());
825*e3723e1fSApple OSS Distributions array->release();
826*e3723e1fSApple OSS Distributions }
827*e3723e1fSApple OSS Distributions
828*e3723e1fSApple OSS Distributions if (iter1) {
829*e3723e1fSApple OSS Distributions iter1->release();
830*e3723e1fSApple OSS Distributions }
831*e3723e1fSApple OSS Distributions if (iter2) {
832*e3723e1fSApple OSS Distributions iter2->release();
833*e3723e1fSApple OSS Distributions }
834*e3723e1fSApple OSS Distributions res = res && checkSpace("(I)1", spaceCheck, 0);
835*e3723e1fSApple OSS Distributions
836*e3723e1fSApple OSS Distributions // Test the set iterator
837*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
838*e3723e1fSApple OSS Distributions iter1 = 0;
839*e3723e1fSApple OSS Distributions set = OSSet::withCapacity(numSymbols);
840*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2a", set);
841*e3723e1fSApple OSS Distributions if (set) {
842*e3723e1fSApple OSS Distributions count1 = count2 = 0;
843*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
844*e3723e1fSApple OSS Distributions count1 += set->setObject(cache[i]);
845*e3723e1fSApple OSS Distributions }
846*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2b", count1 == numSymbols);
847*e3723e1fSApple OSS Distributions
848*e3723e1fSApple OSS Distributions iter1 = OSCollectionIterator::withCollection(set);
849*e3723e1fSApple OSS Distributions iter2 = OSCollectionIterator::withCollection(set);
850*e3723e1fSApple OSS Distributions }
851*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2c", iter1);
852*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2d", iter2);
853*e3723e1fSApple OSS Distributions if (iter1 && iter2) {
854*e3723e1fSApple OSS Distributions count1 = count2 = count3 = 0;
855*e3723e1fSApple OSS Distributions for (i = 0; (str = (IOString *) iter1->getNextObject()); i++) {
856*e3723e1fSApple OSS Distributions bigReturn = iter2->nextEntries();
857*e3723e1fSApple OSS Distributions count1 += (bigReturn->getCount() == 1);
858*e3723e1fSApple OSS Distributions count2 += (cache[i] == bigReturn->getObject(0));
859*e3723e1fSApple OSS Distributions count3 += (cache[i] == str);
860*e3723e1fSApple OSS Distributions }
861*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2e", count1 == numSymbols);
862*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2f", count2 == numSymbols);
863*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2g", count3 == numSymbols);
864*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2h", iter1->valid());
865*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2i", iter2->valid());
866*e3723e1fSApple OSS Distributions
867*e3723e1fSApple OSS Distributions iter1->reset();
868*e3723e1fSApple OSS Distributions count1 = count2 = count3 = 0;
869*e3723e1fSApple OSS Distributions for (i = 0;; i++) {
870*e3723e1fSApple OSS Distributions if (i & 1) {
871*e3723e1fSApple OSS Distributions str = (OSString *) iter1->getNextObject();
872*e3723e1fSApple OSS Distributions } else if ((bigReturn = iter1->nextEntries())) {
873*e3723e1fSApple OSS Distributions str = (OSString *) bigReturn->getObject(0);
874*e3723e1fSApple OSS Distributions } else {
875*e3723e1fSApple OSS Distributions str = 0;
876*e3723e1fSApple OSS Distributions }
877*e3723e1fSApple OSS Distributions
878*e3723e1fSApple OSS Distributions if (!str) {
879*e3723e1fSApple OSS Distributions break;
880*e3723e1fSApple OSS Distributions }
881*e3723e1fSApple OSS Distributions count1 += (cache[i] == str);
882*e3723e1fSApple OSS Distributions }
883*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2l", count1 == numSymbols);
884*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2m", i == numSymbols);
885*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2n", iter1->valid());
886*e3723e1fSApple OSS Distributions
887*e3723e1fSApple OSS Distributions iter1->reset();
888*e3723e1fSApple OSS Distributions str = (OSString *) set->getAnyObject();
889*e3723e1fSApple OSS Distributions (void) set->__takeObject(str);
890*e3723e1fSApple OSS Distributions set->setObject(str);
891*e3723e1fSApple OSS Distributions str->release();
892*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2j", !iter1->getNextObject());
893*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2k", !iter1->valid());
894*e3723e1fSApple OSS Distributions
895*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "2o", 3 == set->getRetainCount());
896*e3723e1fSApple OSS Distributions set->release();
897*e3723e1fSApple OSS Distributions }
898*e3723e1fSApple OSS Distributions
899*e3723e1fSApple OSS Distributions if (iter1) {
900*e3723e1fSApple OSS Distributions iter1->release();
901*e3723e1fSApple OSS Distributions }
902*e3723e1fSApple OSS Distributions if (iter2) {
903*e3723e1fSApple OSS Distributions iter2->release();
904*e3723e1fSApple OSS Distributions }
905*e3723e1fSApple OSS Distributions res = res && checkSpace("(I)2", spaceCheck, 0);
906*e3723e1fSApple OSS Distributions
907*e3723e1fSApple OSS Distributions // Test the dictionary iterator
908*e3723e1fSApple OSS Distributions spaceCheck = checkPointSpace();
909*e3723e1fSApple OSS Distributions iter1 = 0;
910*e3723e1fSApple OSS Distributions dict = OSDictionary::withCapacity(numSymbols);
911*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3a", dict);
912*e3723e1fSApple OSS Distributions if (dict) {
913*e3723e1fSApple OSS Distributions count1 = count2 = 0;
914*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
915*e3723e1fSApple OSS Distributions count1 += (0 != dict->setObject(cache[i], symCache[i]));
916*e3723e1fSApple OSS Distributions }
917*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3b", count1 == numSymbols);
918*e3723e1fSApple OSS Distributions
919*e3723e1fSApple OSS Distributions iter1 = OSCollectionIterator::withCollection(dict);
920*e3723e1fSApple OSS Distributions iter2 = OSCollectionIterator::withCollection(dict);
921*e3723e1fSApple OSS Distributions }
922*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3c", iter1);
923*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3d", iter2);
924*e3723e1fSApple OSS Distributions if (iter1 && iter2) {
925*e3723e1fSApple OSS Distributions count1 = count2 = count3 = 0;
926*e3723e1fSApple OSS Distributions for (i = 0; (sym = (const IOSymbol *) iter1->getNextObject()); i++) {
927*e3723e1fSApple OSS Distributions bigReturn = iter2->nextEntries();
928*e3723e1fSApple OSS Distributions count1 += (bigReturn->getCount() == 2);
929*e3723e1fSApple OSS Distributions count2 += (cache[i] == bigReturn->getObject(1));
930*e3723e1fSApple OSS Distributions count3 += (symCache[i] == sym);
931*e3723e1fSApple OSS Distributions }
932*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3e", count1 == numSymbols);
933*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3f", count2 == numSymbols);
934*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3g", count3 == numSymbols);
935*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3h", iter1->valid());
936*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3i", iter2->valid());
937*e3723e1fSApple OSS Distributions
938*e3723e1fSApple OSS Distributions iter1->reset();
939*e3723e1fSApple OSS Distributions count1 = count2 = count3 = 0;
940*e3723e1fSApple OSS Distributions i = 0;
941*e3723e1fSApple OSS Distributions for (i = 0;; i++) {
942*e3723e1fSApple OSS Distributions if (i & 1) {
943*e3723e1fSApple OSS Distributions sym = (const OSSymbol *) iter1->getNextObject();
944*e3723e1fSApple OSS Distributions str = 0;
945*e3723e1fSApple OSS Distributions } else if ((bigReturn = iter1->nextEntries())) {
946*e3723e1fSApple OSS Distributions sym = (const OSSymbol *) bigReturn->getObject(0);
947*e3723e1fSApple OSS Distributions str = (OSString *) bigReturn->getObject(1);
948*e3723e1fSApple OSS Distributions } else {
949*e3723e1fSApple OSS Distributions sym = 0;
950*e3723e1fSApple OSS Distributions }
951*e3723e1fSApple OSS Distributions
952*e3723e1fSApple OSS Distributions if (!sym) {
953*e3723e1fSApple OSS Distributions break;
954*e3723e1fSApple OSS Distributions }
955*e3723e1fSApple OSS Distributions
956*e3723e1fSApple OSS Distributions count1 += (symCache[i] == sym);
957*e3723e1fSApple OSS Distributions count2 += (!str || cache[i] == str);
958*e3723e1fSApple OSS Distributions }
959*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3l", count1 == numSymbols);
960*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3m", count2 == numSymbols);
961*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3n", i == numSymbols);
962*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3o", iter1->valid());
963*e3723e1fSApple OSS Distributions
964*e3723e1fSApple OSS Distributions iter1->reset();
965*e3723e1fSApple OSS Distributions str = (OSString *) dict->__takeObject(symCache[numSymbols - 1]);
966*e3723e1fSApple OSS Distributions dict->setObject(str, symCache[numSymbols - 1]);
967*e3723e1fSApple OSS Distributions str->release();
968*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3j", !iter1->getNextObject());
969*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3k", !iter1->valid());
970*e3723e1fSApple OSS Distributions
971*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "3p", 3 == dict->getRetainCount());
972*e3723e1fSApple OSS Distributions dict->release();
973*e3723e1fSApple OSS Distributions }
974*e3723e1fSApple OSS Distributions
975*e3723e1fSApple OSS Distributions if (iter1) {
976*e3723e1fSApple OSS Distributions iter1->release();
977*e3723e1fSApple OSS Distributions }
978*e3723e1fSApple OSS Distributions if (iter2) {
979*e3723e1fSApple OSS Distributions iter2->release();
980*e3723e1fSApple OSS Distributions }
981*e3723e1fSApple OSS Distributions res = res && checkSpace("(I)3", spaceCheck, 0);
982*e3723e1fSApple OSS Distributions
983*e3723e1fSApple OSS Distributions count1 = count2 = count3 = 0;
984*e3723e1fSApple OSS Distributions for (i = 0; i < numSymbols; i++) {
985*e3723e1fSApple OSS Distributions count1 += (1 == cache[i]->getRetainCount());
986*e3723e1fSApple OSS Distributions count2 += (1 == symCache[i]->getRetainCount());
987*e3723e1fSApple OSS Distributions cache[i]->release();
988*e3723e1fSApple OSS Distributions symCache[i]->release();
989*e3723e1fSApple OSS Distributions }
990*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "4a", count1 == numSymbols);
991*e3723e1fSApple OSS Distributions TEST_ASSERT('I', "4b", count2 == numSymbols);
992*e3723e1fSApple OSS Distributions
993*e3723e1fSApple OSS Distributions if (res) {
994*e3723e1fSApple OSS Distributions verPrintf(("testIterator: All OSCollectionIterator Tests passed\n"));
995*e3723e1fSApple OSS Distributions } else {
996*e3723e1fSApple OSS Distributions logPrintf(("testIterator: Some OSCollectionIterator Tests failed\n"));
997*e3723e1fSApple OSS Distributions }
998*e3723e1fSApple OSS Distributions }
999*e3723e1fSApple OSS Distributions
1000*e3723e1fSApple OSS Distributions #endif /* DEBUG */
1001