Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: third_party/protobuf/objectivec/Tests/GPBDictionaryTests.pddm

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2015 Google Inc. All rights reserved. 2 // Copyright 2015 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 //% 62 //%
63 //%@interface GPB##KEY_NAME##VALUE_NAME##DictionaryTests : XCTestCase 63 //%@interface GPB##KEY_NAME##VALUE_NAME##DictionaryTests : XCTestCase
64 //%@end 64 //%@end
65 //% 65 //%
66 //%@implementation GPB##KEY_NAME##VALUE_NAME##DictionaryTests 66 //%@implementation GPB##KEY_NAME##VALUE_NAME##DictionaryTests
67 //% 67 //%
68 //%- (void)testEmpty { 68 //%- (void)testEmpty {
69 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [[ GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init]; 69 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [[ GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init];
70 //% XCTAssertNotNil(dict); 70 //% XCTAssertNotNil(dict);
71 //% XCTAssertEqual(dict.count, 0U); 71 //% XCTAssertEqual(dict.count, 0U);
72 //%VALUE_NOT_FOUND##VHELPER(dict, KEY1) 72 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
73 //% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_T YPE a##VNAME$u, BOOL *stop) { 73 //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VA LUE_TYPE a##VNAME$u, BOOL *stop) {
74 //% #pragma unused(aKey, a##VNAME$u, stop) 74 //% #pragma unused(aKey, a##VNAME$u, stop)
75 //% XCTFail(@"Shouldn't get here!"); 75 //% XCTFail(@"Shouldn't get here!");
76 //% }]; 76 //% }];
77 //% [dict release]; 77 //% [dict release];
78 //%} 78 //%}
79 //% 79 //%
80 //%- (void)testOne { 80 //%- (void)testOne {
81 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [G PB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWith##VNAME$u##:VAL1 forKey:KEY1] ; 81 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [G PB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWith##VALUE_NAME$u##:VAL1 forKey: KEY1];
82 //% XCTAssertNotNil(dict); 82 //% XCTAssertNotNil(dict);
83 //% XCTAssertEqual(dict.count, 1U); 83 //% XCTAssertEqual(dict.count, 1U);
84 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 84 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
85 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 85 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
86 //% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_T YPE a##VNAME$u, BOOL *stop) { 86 //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VA LUE_TYPE a##VNAME$u, BOOL *stop) {
87 //% XCTAssertEqual##KSUFFIX(aKey, KEY1); 87 //% XCTAssertEqual##KSUFFIX(aKey, KEY1);
88 //% XCTAssertEqual##VSUFFIX(a##VNAME$u, VAL1); 88 //% XCTAssertEqual##VSUFFIX(a##VNAME$u, VAL1);
89 //% XCTAssertNotEqual(stop, NULL); 89 //% XCTAssertNotEqual(stop, NULL);
90 //% }]; 90 //% }];
91 //%} 91 //%}
92 //% 92 //%
93 //%- (void)testBasics { 93 //%- (void)testBasics {
94 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3 }; 94 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3 };
95 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3 }; 95 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3 };
96 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 96 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
97 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 97 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME$u## s:k##VNAME$u##s
98 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 98 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
99 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s)]; 99 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
100 //% XCTAssertNotNil(dict); 100 //% XCTAssertNotNil(dict);
101 //% XCTAssertEqual(dict.count, 3U); 101 //% XCTAssertEqual(dict.count, 3U);
102 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 102 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
103 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 103 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
104 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) 104 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
105 //%VALUE_NOT_FOUND##VHELPER(dict, KEY4) 105 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
106 //% 106 //%
107 //% __block NSUInteger idx = 0; 107 //% __block NSUInteger idx = 0;
108 //% KEY_TYPE KisP##*seenKeys = malloc(3 * sizeof(KEY_TYPE##KisP)); 108 //% KEY_TYPE KisP##*seenKeys = malloc(3 * sizeof(KEY_TYPE##KisP));
109 //% VALUE_TYPE *seen##VNAME$u##s = malloc(3 * sizeof(VALUE_TYPE)); 109 //% VALUE_TYPE *seen##VNAME$u##s = malloc(3 * sizeof(VALUE_TYPE));
110 //% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_T YPE a##VNAME$u, BOOL *stop) { 110 //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VA LUE_TYPE a##VNAME$u, BOOL *stop) {
111 //% XCTAssertLessThan(idx, 3U); 111 //% XCTAssertLessThan(idx, 3U);
112 //% seenKeys[idx] = aKey; 112 //% seenKeys[idx] = aKey;
113 //% seen##VNAME$u##s[idx] = a##VNAME$u##; 113 //% seen##VNAME$u##s[idx] = a##VNAME$u##;
114 //% XCTAssertNotEqual(stop, NULL); 114 //% XCTAssertNotEqual(stop, NULL);
115 //% ++idx; 115 //% ++idx;
116 //% }]; 116 //% }];
117 //% for (int i = 0; i < 3; ++i) { 117 //% for (int i = 0; i < 3; ++i) {
118 //% BOOL foundKey = NO; 118 //% BOOL foundKey = NO;
119 //% for (int j = 0; (j < 3) && !foundKey; ++j) { 119 //% for (int j = 0; (j < 3) && !foundKey; ++j) {
120 //% if (COMPARE_KEYS##KSUFFIX(kKeys[i], seenKeys[j])) { 120 //% if (COMPARE_KEYS##KSUFFIX(kKeys[i], seenKeys[j])) {
121 //% foundKey = YES; 121 //% foundKey = YES;
122 //% XCTAssertEqual##VSUFFIX(k##VNAME$u##s[i], seen##VNAME$u##s[j], @"i = %d, j = %d", i, j); 122 //% XCTAssertEqual##VSUFFIX(k##VNAME$u##s[i], seen##VNAME$u##s[j], @"i = %d, j = %d", i, j);
123 //% } 123 //% }
124 //% } 124 //% }
125 //% XCTAssertTrue(foundKey, @"i = %d", i); 125 //% XCTAssertTrue(foundKey, @"i = %d", i);
126 //% } 126 //% }
127 //% free(seenKeys); 127 //% free(seenKeys);
128 //% free(seen##VNAME$u##s); 128 //% free(seen##VNAME$u##s);
129 //% 129 //%
130 //% // Stopping the enumeration. 130 //% // Stopping the enumeration.
131 //% idx = 0; 131 //% idx = 0;
132 //% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_T YPE a##VNAME$u, BOOL *stop) { 132 //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VA LUE_TYPE a##VNAME$u, BOOL *stop) {
133 //% #pragma unused(aKey, a##VNAME$u) 133 //% #pragma unused(aKey, a##VNAME$u)
134 //% if (idx == 1) *stop = YES; 134 //% if (idx == 1) *stop = YES;
135 //% XCTAssertNotEqual(idx, 2U); 135 //% XCTAssertNotEqual(idx, 2U);
136 //% ++idx; 136 //% ++idx;
137 //% }]; 137 //% }];
138 //% [dict release]; 138 //% [dict release];
139 //%} 139 //%}
140 //% 140 //%
141 //%- (void)testEquality { 141 //%- (void)testEquality {
142 //% const KEY_TYPE KisP##kKeys1[] = { KEY1, KEY2, KEY3, KEY4 }; 142 //% const KEY_TYPE KisP##kKeys1[] = { KEY1, KEY2, KEY3, KEY4 };
143 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY1, KEY4 }; 143 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY1, KEY4 };
144 //% const VALUE_TYPE k##VNAME$u##s1[] = { VAL1, VAL2, VAL3 }; 144 //% const VALUE_TYPE k##VNAME$u##s1[] = { VAL1, VAL2, VAL3 };
145 //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL1, VAL4, VAL3 }; 145 //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL1, VAL4, VAL3 };
146 //% const VALUE_TYPE k##VNAME$u##s3[] = { VAL1, VAL2, VAL3, VAL4 }; 146 //% const VALUE_TYPE k##VNAME$u##s3[] = { VAL1, VAL2, VAL3, VAL4 };
147 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1 = 147 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1 =
148 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s1 148 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s1
149 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1 149 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys1
150 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s1)]; 150 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s1)];
151 //% XCTAssertNotNil(dict1); 151 //% XCTAssertNotNil(dict1);
152 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1prim e = 152 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1prim e =
153 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s1 153 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s1
154 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1 154 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys1
155 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s1)]; 155 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s1)];
156 //% XCTAssertNotNil(dict1prime); 156 //% XCTAssertNotNil(dict1prime);
157 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 157 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
158 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s2 158 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s2
159 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1 159 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys1
160 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s2)]; 160 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s2)];
161 //% XCTAssertNotNil(dict2); 161 //% XCTAssertNotNil(dict2);
162 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict3 = 162 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict3 =
163 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s1 163 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s1
164 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 2 164 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys2
165 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s1)]; 165 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s1)];
166 //% XCTAssertNotNil(dict3); 166 //% XCTAssertNotNil(dict3);
167 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict4 = 167 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict4 =
168 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s3 168 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s3
169 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1 169 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys1
170 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s3)]; 170 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s3)];
171 //% XCTAssertNotNil(dict4); 171 //% XCTAssertNotNil(dict4);
172 //% 172 //%
173 //% // 1/1Prime should be different objects, but equal. 173 //% // 1/1Prime should be different objects, but equal.
174 //% XCTAssertNotEqual(dict1, dict1prime); 174 //% XCTAssertNotEqual(dict1, dict1prime);
175 //% XCTAssertEqualObjects(dict1, dict1prime); 175 //% XCTAssertEqualObjects(dict1, dict1prime);
176 //% // Equal, so they must have same hash. 176 //% // Equal, so they must have same hash.
177 //% XCTAssertEqual([dict1 hash], [dict1prime hash]); 177 //% XCTAssertEqual([dict1 hash], [dict1prime hash]);
178 //% 178 //%
179 //% // 2 is same keys, different ##VNAME##s; not equal. 179 //% // 2 is same keys, different ##VNAME##s; not equal.
180 //% XCTAssertNotEqualObjects(dict1, dict2); 180 //% XCTAssertNotEqualObjects(dict1, dict2);
181 //% 181 //%
182 //% // 3 is different keys, same ##VNAME##s; not equal. 182 //% // 3 is different keys, same ##VNAME##s; not equal.
183 //% XCTAssertNotEqualObjects(dict1, dict3); 183 //% XCTAssertNotEqualObjects(dict1, dict3);
184 //% 184 //%
185 //% // 4 extra pair; not equal 185 //% // 4 extra pair; not equal
186 //% XCTAssertNotEqualObjects(dict1, dict4); 186 //% XCTAssertNotEqualObjects(dict1, dict4);
187 //% 187 //%
188 //% [dict1 release]; 188 //% [dict1 release];
189 //% [dict1prime release]; 189 //% [dict1prime release];
190 //% [dict2 release]; 190 //% [dict2 release];
191 //% [dict3 release]; 191 //% [dict3 release];
192 //% [dict4 release]; 192 //% [dict4 release];
193 //%} 193 //%}
194 //% 194 //%
195 //%- (void)testCopy { 195 //%- (void)testCopy {
196 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; 196 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
197 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 }; 197 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 };
198 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 198 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
199 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 199 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
200 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 200 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
201 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s)]; 201 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
202 //% XCTAssertNotNil(dict); 202 //% XCTAssertNotNil(dict);
203 //% 203 //%
204 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = [ dict copy]; 204 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = [ dict copy];
205 //% XCTAssertNotNil(dict2); 205 //% XCTAssertNotNil(dict2);
206 //% 206 //%
207 //% // Should be new object but equal. 207 //% // Should be new object but equal.
208 //% XCTAssertNotEqual(dict, dict2); 208 //% XCTAssertNotEqual(dict, dict2);
209 //% XCTAssertEqualObjects(dict, dict2); 209 //% XCTAssertEqualObjects(dict, dict2);
210 //% XCTAssertTrue([dict2 isKindOfClass:[GPB##KEY_NAME##VALUE_NAME##Dictionary c lass]]); 210 //% XCTAssertTrue([dict2 isKindOfClass:[GPB##KEY_NAME##VALUE_NAME##Dictionary c lass]]);
211 //% 211 //%
212 //% [dict2 release]; 212 //% [dict2 release];
213 //% [dict release]; 213 //% [dict release];
214 //%} 214 //%}
215 //% 215 //%
216 //%- (void)testDictionaryFromDictionary { 216 //%- (void)testDictionaryFromDictionary {
217 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; 217 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
218 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 }; 218 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 };
219 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 219 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
220 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 220 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
221 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 221 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
222 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s)]; 222 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
223 //% XCTAssertNotNil(dict); 223 //% XCTAssertNotNil(dict);
224 //% 224 //%
225 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 225 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
226 //% [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWithDictionary:dict]; 226 //% [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWithDictionary:dict];
227 //% XCTAssertNotNil(dict2); 227 //% XCTAssertNotNil(dict2);
228 //% 228 //%
229 //% // Should be new pointer, but equal objects. 229 //% // Should be new pointer, but equal objects.
230 //% XCTAssertNotEqual(dict, dict2); 230 //% XCTAssertNotEqual(dict, dict2);
231 //% XCTAssertEqualObjects(dict, dict2); 231 //% XCTAssertEqualObjects(dict, dict2);
232 //% [dict release]; 232 //% [dict release];
233 //%} 233 //%}
234 //% 234 //%
235 //%- (void)testAdds { 235 //%- (void)testAdds {
236 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [G PB##KEY_NAME##VALUE_NAME##Dictionary dictionary]; 236 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [G PB##KEY_NAME##VALUE_NAME##Dictionary dictionary];
237 //% XCTAssertNotNil(dict); 237 //% XCTAssertNotNil(dict);
238 //% 238 //%
239 //% XCTAssertEqual(dict.count, 0U); 239 //% XCTAssertEqual(dict.count, 0U);
240 //% [dict set##VNAME$u##:VAL1 forKey:KEY1]; 240 //% [dict set##VALUE_NAME##:VAL1 forKey:KEY1];
241 //% XCTAssertEqual(dict.count, 1U); 241 //% XCTAssertEqual(dict.count, 1U);
242 //% 242 //%
243 //% const KEY_TYPE KisP##kKeys[] = { KEY2, KEY3, KEY4 }; 243 //% const KEY_TYPE KisP##kKeys[] = { KEY2, KEY3, KEY4 };
244 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL2, VAL3, VAL4 }; 244 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL2, VAL3, VAL4 };
245 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 245 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
246 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 246 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
247 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 247 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
248 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s)]; 248 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
249 //% XCTAssertNotNil(dict2); 249 //% XCTAssertNotNil(dict2);
250 //% [dict add##VACCESSOR##EntriesFromDictionary:dict2]; 250 //% [dict add##VACCESSOR##EntriesFromDictionary:dict2];
251 //% XCTAssertEqual(dict.count, 4U); 251 //% XCTAssertEqual(dict.count, 4U);
252 //% 252 //%
253 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 253 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
254 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 254 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
255 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) 255 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
256 //%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) 256 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
257 //% [dict2 release]; 257 //% [dict2 release];
258 //%} 258 //%}
259 //% 259 //%
260 //%- (void)testRemove { 260 //%- (void)testRemove {
261 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; 261 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
262 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 }; 262 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 };
263 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 263 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
264 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 264 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
265 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 265 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
266 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE (k##VNAME$u##s)]; 266 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
267 //% XCTAssertNotNil(dict); 267 //% XCTAssertNotNil(dict);
268 //% XCTAssertEqual(dict.count, 4U); 268 //% XCTAssertEqual(dict.count, 4U);
269 //% 269 //%
270 //% [dict remove##VNAME$u##ForKey:KEY2]; 270 //% [dict remove##VALUE_NAME##ForKey:KEY2];
271 //% XCTAssertEqual(dict.count, 3U); 271 //% XCTAssertEqual(dict.count, 3U);
272 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 272 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
273 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 273 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
274 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) 274 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
275 //%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) 275 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
276 //% 276 //%
277 //% // Remove again does nothing. 277 //% // Remove again does nothing.
278 //% [dict remove##VNAME$u##ForKey:KEY2]; 278 //% [dict remove##VALUE_NAME##ForKey:KEY2];
279 //% XCTAssertEqual(dict.count, 3U); 279 //% XCTAssertEqual(dict.count, 3U);
280 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) 280 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
281 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 281 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
282 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) 282 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
283 //%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) 283 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
284 //% 284 //%
285 //% [dict remove##VNAME$u##ForKey:KEY4]; 285 //% [dict remove##VALUE_NAME##ForKey:KEY4];
286 //% XCTAssertEqual(dict.count, 2U); 286 //% XCTAssertEqual(dict.count, 2U);
287 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) 287 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
288 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 288 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
289 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) 289 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
290 //%VALUE_NOT_FOUND##VHELPER(dict, KEY4) 290 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
291 //% 291 //%
292 //% [dict removeAll]; 292 //% [dict removeAll];
293 //% XCTAssertEqual(dict.count, 0U); 293 //% XCTAssertEqual(dict.count, 0U);
294 //%VALUE_NOT_FOUND##VHELPER(dict, KEY1) 294 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
295 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 295 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
296 //%VALUE_NOT_FOUND##VHELPER(dict, KEY3) 296 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY3)
297 //%VALUE_NOT_FOUND##VHELPER(dict, KEY4) 297 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
298 //% [dict release]; 298 //% [dict release];
299 //%} 299 //%}
300 //% 300 //%
301 //%- (void)testInplaceMutation { 301 //%- (void)testInplaceMutation {
302 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; 302 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
303 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 }; 303 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 };
304 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 304 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
305 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 305 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
306 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 306 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
307 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE (k##VNAME$u##s)]; 307 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
308 //% XCTAssertNotNil(dict); 308 //% XCTAssertNotNil(dict);
309 //% XCTAssertEqual(dict.count, 4U); 309 //% XCTAssertEqual(dict.count, 4U);
310 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 310 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
311 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 311 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
312 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) 312 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
313 //%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) 313 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
314 //% 314 //%
315 //% [dict set##VNAME$u##:VAL4 forKey:KEY1]; 315 //% [dict set##VALUE_NAME##:VAL4 forKey:KEY1];
316 //% XCTAssertEqual(dict.count, 4U); 316 //% XCTAssertEqual(dict.count, 4U);
317 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL4) 317 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL4)
318 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 318 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
319 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) 319 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
320 //%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) 320 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
321 //% 321 //%
322 //% [dict set##VNAME$u##:VAL2 forKey:KEY4]; 322 //% [dict set##VALUE_NAME##:VAL2 forKey:KEY4];
323 //% XCTAssertEqual(dict.count, 4U); 323 //% XCTAssertEqual(dict.count, 4U);
324 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL4) 324 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL4)
325 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 325 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
326 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) 326 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
327 //%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL2) 327 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL2)
328 //% 328 //%
329 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY3 }; 329 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY3 };
330 //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL3, VAL1 }; 330 //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL3, VAL1 };
331 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 331 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
332 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s2 332 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s2
333 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 2 333 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys2
334 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s2)]; 334 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s2)];
335 //% XCTAssertNotNil(dict2); 335 //% XCTAssertNotNil(dict2);
336 //% [dict add##VACCESSOR##EntriesFromDictionary:dict2]; 336 //% [dict add##VACCESSOR##EntriesFromDictionary:dict2];
337 //% XCTAssertEqual(dict.count, 4U); 337 //% XCTAssertEqual(dict.count, 4U);
338 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL4) 338 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL4)
339 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL3) 339 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL3)
340 //%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL1) 340 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL1)
341 //%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL2) 341 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL2)
342 //% 342 //%
343 //% [dict2 release]; 343 //% [dict2 release];
344 //% [dict release]; 344 //% [dict release];
345 //%} 345 //%}
346 //% 346 //%
347 //%@end 347 //%@end
348 //% 348 //%
349 349
350 //%PDDM-DEFINE TESTS_FOR_ENUM_VALUE_RAW_ADDITIONS(KEY_NAME, KEY_TYPE, KisP, KSUF FIX, KEY1, KEY2, KEY3, KEY4) 350 //%PDDM-DEFINE TESTS_FOR_ENUM_VALUE_RAW_ADDITIONS(KEY_NAME, KEY_TYPE, KisP, KSUF FIX, KEY1, KEY2, KEY3, KEY4)
351 //%TESTS_FOR_ENUM_VALUE_RAW_ADDITIONS2(KEY_NAME, KEY_TYPE, KisP, KSUFFIX, KEY1, KEY2, KEY3, KEY4, Enum, int32_t, , POD, 700, 801, 702, 803) 351 //%TESTS_FOR_ENUM_VALUE_RAW_ADDITIONS2(KEY_NAME, KEY_TYPE, KisP, KSUFFIX, KEY1, KEY2, KEY3, KEY4, Enum, int32_t, , POD, 700, 801, 702, 803)
(...skipping 10 matching lines...) Expand all
362 //% const VALUE_TYPE kValues[] = { VAL1, VAL2, VAL3 }; 362 //% const VALUE_TYPE kValues[] = { VAL1, VAL2, VAL3 };
363 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 363 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
364 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue 364 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue
365 //% KEY_NAME$S VALUE_NAME$S rawValues :kValues 365 //% KEY_NAME$S VALUE_NAME$S rawValues :kValues
366 //% KEY_NAME$S VALUE_NAME$S forKeys :kKeys 366 //% KEY_NAME$S VALUE_NAME$S forKeys :kKeys
367 //% KEY_NAME$S VALUE_NAME$S count :GPBARRAYSIZE(kValues)]; 367 //% KEY_NAME$S VALUE_NAME$S count :GPBARRAYSIZE(kValues)];
368 //% XCTAssertNotNil(dict); 368 //% XCTAssertNotNil(dict);
369 //% XCTAssertEqual(dict.count, 3U); 369 //% XCTAssertEqual(dict.count, 3U);
370 //% XCTAssertTrue(dict.validationFunc == TestingEnum_IsValidValue); // Pointer comparison 370 //% XCTAssertTrue(dict.validationFunc == TestingEnum_IsValidValue); // Pointer comparison
371 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_RAW_VALUE##VHELPER(dict , value, KEY1, VAL1) 371 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_RAW_VALUE##VHELPER(dict , value, KEY1, VAL1)
372 //%TEST_VALUE##VHELPER(dict, value, KEY2, kGPBUnrecognizedEnumeratorValue) 372 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY2, kGPBUnrecognizedEnumerator Value)
373 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) 373 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
374 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY3, VAL3) 374 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY3, VAL3)
375 //%RAW_VALUE_NOT_FOUND##VHELPER(dict, KEY4) 375 //%RAW_VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
376 //% 376 //%
377 //% __block NSUInteger idx = 0; 377 //% __block NSUInteger idx = 0;
378 //% KEY_TYPE KisP##*seenKeys = malloc(3 * sizeof(KEY_TYPE##KisP)); 378 //% KEY_TYPE KisP##*seenKeys = malloc(3 * sizeof(KEY_TYPE##KisP));
379 //% VALUE_TYPE *seenValues = malloc(3 * sizeof(VALUE_TYPE)); 379 //% VALUE_TYPE *seenValues = malloc(3 * sizeof(VALUE_TYPE));
380 //% [dict enumerateKeysAndValuesUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE aV alue, BOOL *stop) { 380 //% [dict enumerateKeysAndEnumsUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE aVa lue, BOOL *stop) {
381 //% XCTAssertLessThan(idx, 3U); 381 //% XCTAssertLessThan(idx, 3U);
382 //% seenKeys[idx] = aKey; 382 //% seenKeys[idx] = aKey;
383 //% seenValues[idx] = aValue; 383 //% seenValues[idx] = aValue;
384 //% XCTAssertNotEqual(stop, NULL); 384 //% XCTAssertNotEqual(stop, NULL);
385 //% ++idx; 385 //% ++idx;
386 //% }]; 386 //% }];
387 //% for (int i = 0; i < 3; ++i) { 387 //% for (int i = 0; i < 3; ++i) {
388 //% BOOL foundKey = NO; 388 //% BOOL foundKey = NO;
389 //% for (int j = 0; (j < 3) && !foundKey; ++j) { 389 //% for (int j = 0; (j < 3) && !foundKey; ++j) {
390 //% if (COMPARE_KEYS##KSUFFIX(kKeys[i], seenKeys[j])) { 390 //% if (COMPARE_KEYS##KSUFFIX(kKeys[i], seenKeys[j])) {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 //% XCTAssertEqual(dict.validationFunc, dict2.validationFunc); // Pointer comp arison 531 //% XCTAssertEqual(dict.validationFunc, dict2.validationFunc); // Pointer comp arison
532 //% [dict release]; 532 //% [dict release];
533 //%} 533 //%}
534 //% 534 //%
535 //%- (void)testUnknownAdds { 535 //%- (void)testUnknownAdds {
536 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 536 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
537 //% [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWithValidationFunction:T estingEnum_IsValidValue]; 537 //% [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWithValidationFunction:T estingEnum_IsValidValue];
538 //% XCTAssertNotNil(dict); 538 //% XCTAssertNotNil(dict);
539 //% 539 //%
540 //% XCTAssertEqual(dict.count, 0U); 540 //% XCTAssertEqual(dict.count, 0U);
541 //% XCTAssertThrowsSpecificNamed([dict setValue:VAL2 forKey:KEY2], // Unknown 541 //% XCTAssertThrowsSpecificNamed([dict setEnum:VAL2 forKey:KEY2], // Unknown
542 //% NSException, NSInvalidArgumentException); 542 //% NSException, NSInvalidArgumentException);
543 //% XCTAssertEqual(dict.count, 0U); 543 //% XCTAssertEqual(dict.count, 0U);
544 //% [dict setRawValue:VAL2 forKey:KEY2]; // Unknown 544 //% [dict setRawValue:VAL2 forKey:KEY2]; // Unknown
545 //% XCTAssertEqual(dict.count, 1U); 545 //% XCTAssertEqual(dict.count, 1U);
546 //% 546 //%
547 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY3, KEY4 }; 547 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY3, KEY4 };
548 //% const VALUE_TYPE kValues[] = { VAL1, VAL3, VAL4 }; // Unknown 548 //% const VALUE_TYPE kValues[] = { VAL1, VAL3, VAL4 }; // Unknown
549 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 549 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
550 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValues:kValues 550 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithEnums:kValues
551 //% KEY_NAME$S VALUE_NAME$S forKeys:kKeys 551 //% KEY_NAME$S VALUE_NAME$S forKeys:kKeys
552 //% KEY_NAME$S VALUE_NAME$S count:GPBARRAYSIZ E(kValues)]; 552 //% KEY_NAME$S VALUE_NAME$S count:GPBARRAYSI ZE(kValues)];
553 //% XCTAssertNotNil(dict2); 553 //% XCTAssertNotNil(dict2);
554 //% [dict addRawEntriesFromDictionary:dict2]; 554 //% [dict addRawEntriesFromDictionary:dict2];
555 //% XCTAssertEqual(dict.count, 4U); 555 //% XCTAssertEqual(dict.count, 4U);
556 //% 556 //%
557 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(dict, va lue, KEY1, VAL1) 557 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(VALUE_NA ME, dict, value, KEY1, VAL1)
558 //%TEST_VALUE##VHELPER(dict, value, KEY2, kGPBUnrecognizedEnumeratorValue) 558 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY2, kGPBUnrecognizedEnumerator Value)
559 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) 559 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
560 //%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) 560 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
561 //%TEST_VALUE##VHELPER(dict, value, KEY4, kGPBUnrecognizedEnumeratorValue) 561 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY4, kGPBUnrecognizedEnumerator Value)
562 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) 562 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
563 //% [dict2 release]; 563 //% [dict2 release];
564 //%} 564 //%}
565 //% 565 //%
566 //%- (void)testUnknownRemove { 566 //%- (void)testUnknownRemove {
567 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; 567 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
568 //% const VALUE_TYPE kValues[] = { VAL1, VAL2, VAL3, VAL4 }; // Unknowns 568 //% const VALUE_TYPE kValues[] = { VAL1, VAL2, VAL3, VAL4 }; // Unknowns
569 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 569 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
570 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue 570 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue
571 //% KEY_NAME$S VALUE_NAME$S rawValues :kValues 571 //% KEY_NAME$S VALUE_NAME$S rawValues :kValues
572 //% KEY_NAME$S VALUE_NAME$S forKeys :kKeys 572 //% KEY_NAME$S VALUE_NAME$S forKeys :kKeys
573 //% KEY_NAME$S VALUE_NAME$S count :GPBARRAYSIZE(kValues)]; 573 //% KEY_NAME$S VALUE_NAME$S count :GPBARRAYSIZE(kValues)];
574 //% XCTAssertNotNil(dict); 574 //% XCTAssertNotNil(dict);
575 //% XCTAssertEqual(dict.count, 4U); 575 //% XCTAssertEqual(dict.count, 4U);
576 //% 576 //%
577 //% [dict removeValueForKey:KEY2]; 577 //% [dict removeEnumForKey:KEY2];
578 //% XCTAssertEqual(dict.count, 3U); 578 //% XCTAssertEqual(dict.count, 3U);
579 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(dict, va lue, KEY1, VAL1) 579 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(VALUE_NA ME, dict, value, KEY1, VAL1)
580 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 580 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
581 //%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) 581 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
582 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) 582 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
583 //% 583 //%
584 //% // Remove again does nothing. 584 //% // Remove again does nothing.
585 //% [dict removeValueForKey:KEY2]; 585 //% [dict removeEnumForKey:KEY2];
586 //% XCTAssertEqual(dict.count, 3U); 586 //% XCTAssertEqual(dict.count, 3U);
587 //%TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) 587 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
588 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 588 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
589 //%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) 589 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
590 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) 590 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
591 //% 591 //%
592 //% [dict removeValueForKey:KEY4]; 592 //% [dict removeEnumForKey:KEY4];
593 //% XCTAssertEqual(dict.count, 2U); 593 //% XCTAssertEqual(dict.count, 2U);
594 //%TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) 594 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
595 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 595 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
596 //%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) 596 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
597 //%VALUE_NOT_FOUND##VHELPER(dict, KEY4) 597 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
598 //% 598 //%
599 //% [dict removeAll]; 599 //% [dict removeAll];
600 //% XCTAssertEqual(dict.count, 0U); 600 //% XCTAssertEqual(dict.count, 0U);
601 //%VALUE_NOT_FOUND##VHELPER(dict, KEY1) 601 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
602 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 602 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
603 //%VALUE_NOT_FOUND##VHELPER(dict, KEY3) 603 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY3)
604 //%VALUE_NOT_FOUND##VHELPER(dict, KEY4) 604 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
605 //% [dict release]; 605 //% [dict release];
606 //%} 606 //%}
607 //% 607 //%
608 //%- (void)testInplaceMutationUnknowns { 608 //%- (void)testInplaceMutationUnknowns {
609 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; 609 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
610 //% const VALUE_TYPE kValues[] = { VAL1, VAL2, VAL3, VAL4 }; // Unknowns 610 //% const VALUE_TYPE kValues[] = { VAL1, VAL2, VAL3, VAL4 }; // Unknowns
611 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 611 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
612 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue 612 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue
613 //% KEY_NAME$S VALUE_NAME$S rawValues :kValues 613 //% KEY_NAME$S VALUE_NAME$S rawValues :kValues
614 //% KEY_NAME$S VALUE_NAME$S forKeys :kKeys 614 //% KEY_NAME$S VALUE_NAME$S forKeys :kKeys
615 //% KEY_NAME$S VALUE_NAME$S count :GPBARRAYSIZE(kValues)]; 615 //% KEY_NAME$S VALUE_NAME$S count :GPBARRAYSIZE(kValues)];
616 //% XCTAssertNotNil(dict); 616 //% XCTAssertNotNil(dict);
617 //% XCTAssertEqual(dict.count, 4U); 617 //% XCTAssertEqual(dict.count, 4U);
618 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(dict, va lue, KEY1, VAL1) 618 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(VALUE_NA ME, dict, value, KEY1, VAL1)
619 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) 619 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
620 //%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) 620 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
621 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) 621 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
622 //% 622 //%
623 //% XCTAssertThrowsSpecificNamed([dict setValue:VAL4 forKey:KEY1], // Unknown 623 //% XCTAssertThrowsSpecificNamed([dict setEnum:VAL4 forKey:KEY1], // Unknown
624 //% NSException, NSInvalidArgumentException); 624 //% NSException, NSInvalidArgumentException);
625 //% XCTAssertEqual(dict.count, 4U); 625 //% XCTAssertEqual(dict.count, 4U);
626 //%TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) 626 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
627 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) 627 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
628 //%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) 628 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
629 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) 629 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
630 //% 630 //%
631 //% [dict setRawValue:VAL4 forKey:KEY1]; // Unknown 631 //% [dict setRawValue:VAL4 forKey:KEY1]; // Unknown
632 //% XCTAssertEqual(dict.count, 4U); 632 //% XCTAssertEqual(dict.count, 4U);
633 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4) 633 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4)
634 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) 634 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
635 //%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) 635 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
636 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) 636 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
637 //% 637 //%
638 //% [dict setRawValue:VAL1 forKey:KEY4]; 638 //% [dict setRawValue:VAL1 forKey:KEY4];
639 //% XCTAssertEqual(dict.count, 4U); 639 //% XCTAssertEqual(dict.count, 4U);
640 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4) 640 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4)
641 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) 641 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
642 //%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) 642 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
643 //%TEST_VALUE##VHELPER(dict, value, KEY4, VAL1) 643 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY4, VAL1)
644 //% 644 //%
645 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY3 }; 645 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY3 };
646 //% const VALUE_TYPE kValues2[] = { VAL3, VAL2 }; // Unknown 646 //% const VALUE_TYPE kValues2[] = { VAL3, VAL2 }; // Unknown
647 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 647 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
648 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue 648 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue
649 //% KEY_NAME$S VALUE_NAME$S rawValues :kValues2 649 //% KEY_NAME$S VALUE_NAME$S rawValues :kValues2
650 //% KEY_NAME$S VALUE_NAME$S forKeys :kKeys2 650 //% KEY_NAME$S VALUE_NAME$S forKeys :kKeys2
651 //% KEY_NAME$S VALUE_NAME$S count :GPBARRAYSIZE(kValues2)]; 651 //% KEY_NAME$S VALUE_NAME$S count :GPBARRAYSIZE(kValues2)];
652 //% XCTAssertNotNil(dict2); 652 //% XCTAssertNotNil(dict2);
653 //% [dict addRawEntriesFromDictionary:dict2]; 653 //% [dict addRawEntriesFromDictionary:dict2];
654 //% XCTAssertEqual(dict.count, 4U); 654 //% XCTAssertEqual(dict.count, 4U);
655 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4) 655 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4)
656 //%TEST_VALUE##VHELPER(dict, value, KEY2, VAL3) 656 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY2, VAL3)
657 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY3, VAL2) 657 //%TEST_RAW_VALUE##VHELPER(dict, value, KEY3, VAL2)
658 //%TEST_VALUE##VHELPER(dict, value, KEY4, VAL1) 658 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY4, VAL1)
659 //% 659 //%
660 //% [dict2 release]; 660 //% [dict2 release];
661 //% [dict release]; 661 //% [dict release];
662 //%} 662 //%}
663 //% 663 //%
664 //%- (void)testCopyUnknowns { 664 //%- (void)testCopyUnknowns {
665 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; 665 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
666 //% const VALUE_TYPE kValues[] = { VAL1, VAL2, VAL3, VAL4 }; 666 //% const VALUE_TYPE kValues[] = { VAL1, VAL2, VAL3, VAL4 };
667 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 667 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
668 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue 668 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValidationFuncti on:TestingEnum_IsValidValue
(...skipping 18 matching lines...) Expand all
687 //%@end 687 //%@end
688 //% 688 //%
689 689
690 // 690 //
691 // Helpers for PODs 691 // Helpers for PODs
692 // 692 //
693 693
694 //%PDDM-DEFINE DECLARE_VALUE_STORAGEPOD(VALUE_TYPE, NAME) 694 //%PDDM-DEFINE DECLARE_VALUE_STORAGEPOD(VALUE_TYPE, NAME)
695 //% VALUE_TYPE NAME; 695 //% VALUE_TYPE NAME;
696 //% 696 //%
697 //%PDDM-DEFINE VALUE_NOT_FOUNDPOD(DICT, KEY) 697 //%PDDM-DEFINE VALUE_NOT_FOUNDPOD(VALUE_NAME, DICT, KEY)
698 //% XCTAssertFalse([DICT valueForKey:KEY value:NULL]); 698 //% XCTAssertFalse([DICT get##VALUE_NAME##:NULL forKey:KEY]);
699 //%PDDM-DEFINE TEST_VALUEPOD(DICT, STORAGE, KEY, VALUE) 699 //%PDDM-DEFINE TEST_VALUEPOD(VALUE_NAME, DICT, STORAGE, KEY, VALUE)
700 //% XCTAssertTrue([DICT valueForKey:KEY value:NULL]); 700 //% XCTAssertTrue([DICT get##VALUE_NAME##:NULL forKey:KEY]);
701 //% XCTAssertTrue([DICT valueForKey:KEY value:&STORAGE]); 701 //% XCTAssertTrue([DICT get##VALUE_NAME##:&STORAGE forKey:KEY]);
702 //% XCTAssertEqual(STORAGE, VALUE); 702 //% XCTAssertEqual(STORAGE, VALUE);
703 //%PDDM-DEFINE COMPARE_KEYS(KEY1, KEY2) 703 //%PDDM-DEFINE COMPARE_KEYS(KEY1, KEY2)
704 //%KEY1 == KEY2 704 //%KEY1 == KEY2
705 //%PDDM-DEFINE RAW_VALUE_NOT_FOUNDPOD(DICT, KEY) 705 //%PDDM-DEFINE RAW_VALUE_NOT_FOUNDPOD(VALUE_NAME, DICT, KEY)
706 //% XCTAssertFalse([DICT valueForKey:KEY rawValue:NULL]); 706 //% XCTAssertFalse([DICT getRawValue:NULL forKey:KEY]);
707 //%PDDM-DEFINE TEST_RAW_VALUEPOD(DICT, STORAGE, KEY, VALUE) 707 //%PDDM-DEFINE TEST_RAW_VALUEPOD(DICT, STORAGE, KEY, VALUE)
708 //% XCTAssertTrue([DICT valueForKey:KEY rawValue:NULL]); 708 //% XCTAssertTrue([DICT getRawValue:NULL forKey:KEY]);
709 //% XCTAssertTrue([DICT valueForKey:KEY rawValue:&STORAGE]); 709 //% XCTAssertTrue([DICT getRawValue:&STORAGE forKey:KEY]);
710 //% XCTAssertEqual(STORAGE, VALUE); 710 //% XCTAssertEqual(STORAGE, VALUE);
711 711
712 // 712 //
713 // Helpers for Objects 713 // Helpers for Objects
714 // 714 //
715 715
716 //%PDDM-DEFINE DECLARE_VALUE_STORAGEOBJECT(VALUE_TYPE, NAME) 716 //%PDDM-DEFINE DECLARE_VALUE_STORAGEOBJECT(VALUE_TYPE, NAME)
717 // Empty 717 // Empty
718 //%PDDM-DEFINE VALUE_NOT_FOUNDOBJECT(DICT, KEY) 718 //%PDDM-DEFINE VALUE_NOT_FOUNDOBJECT(VALUE_NAME, DICT, KEY)
719 //% XCTAssertNil([DICT objectForKey:KEY]); 719 //% XCTAssertNil([DICT objectForKey:KEY]);
720 //%PDDM-DEFINE TEST_VALUEOBJECT(DICT, STORAGE, KEY, VALUE) 720 //%PDDM-DEFINE TEST_VALUEOBJECT(VALUE_NAME, DICT, STORAGE, KEY, VALUE)
721 //% XCTAssertEqualObjects([DICT objectForKey:KEY], VALUE); 721 //% XCTAssertEqualObjects([DICT objectForKey:KEY], VALUE);
722 //%PDDM-DEFINE COMPARE_KEYSObjects(KEY1, KEY2) 722 //%PDDM-DEFINE COMPARE_KEYSObjects(KEY1, KEY2)
723 //%[KEY1 isEqual:KEY2] 723 //%[KEY1 isEqual:KEY2]
724 724
725 // 725 //
726 // Helpers for tests. 726 // Helpers for tests.
727 // 727 //
728 728
729 //%PDDM-DEFINE TEST_HELPERS(KEY_NAME, KEY_TYPE, KisP) 729 //%PDDM-DEFINE TEST_HELPERS(KEY_NAME, KEY_TYPE, KisP)
730 //%// To let the testing macros work, add some extra methods to simplify things. 730 //%// To let the testing macros work, add some extra methods to simplify things.
731 //%@interface GPB##KEY_NAME##EnumDictionary (TestingTweak) 731 //%@interface GPB##KEY_NAME##EnumDictionary (TestingTweak)
732 //%+ (instancetype)dictionaryWithValue:(int32_t)value forKey:(KEY_TYPE##KisP$S## KisP)key; 732 //%+ (instancetype)dictionaryWithEnum:(int32_t)value forKey:(KEY_TYPE##KisP$S##K isP)key;
733 //%- (instancetype)initWithValues:(const int32_t [])values 733 //%- (instancetype)initWithEnums:(const int32_t [])values
734 //% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys 734 //% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys
735 //% count:(NSUInteger)count; 735 //% count:(NSUInteger)count;
736 //%@end 736 //%@end
737 //% 737 //%
738 //%static BOOL TestingEnum_IsValidValue(int32_t value) { 738 //%static BOOL TestingEnum_IsValidValue(int32_t value) {
739 //% switch (value) { 739 //% switch (value) {
740 //% case 700: 740 //% case 700:
741 //% case 701: 741 //% case 701:
742 //% case 702: 742 //% case 702:
743 //% case 703: 743 //% case 703:
744 //% return YES; 744 //% return YES;
745 //% default: 745 //% default:
746 //% return NO; 746 //% return NO;
747 //% } 747 //% }
748 //%} 748 //%}
749 //% 749 //%
750 //%@implementation GPB##KEY_NAME##EnumDictionary (TestingTweak) 750 //%@implementation GPB##KEY_NAME##EnumDictionary (TestingTweak)
751 //%+ (instancetype)dictionaryWithValue:(int32_t)value forKey:(KEY_TYPE##KisP$S## KisP)key { 751 //%+ (instancetype)dictionaryWithEnum:(int32_t)value forKey:(KEY_TYPE##KisP$S##K isP)key {
752 //% // Cast is needed to compiler knows what class we are invoking initWithValu es: on to get the 752 //% // Cast is needed to compiler knows what class we are invoking initWithValu es: on to get the
753 //% // type correct. 753 //% // type correct.
754 //% return [[(GPB##KEY_NAME##EnumDictionary*)[self alloc] initWithValidationFun ction:TestingEnum_IsValidValue 754 //% return [[(GPB##KEY_NAME##EnumDictionary*)[self alloc] initWithValidationFun ction:TestingEnum_IsValidValue
755 //% KEY_NAME$S rawVal ues:&value 755 //% KEY_NAME$S rawVal ues:&value
756 //% KEY_NAME$S forK eys:&key 756 //% KEY_NAME$S forK eys:&key
757 //% KEY_NAME$S co unt:1] autorelease]; 757 //% KEY_NAME$S co unt:1] autorelease];
758 //%} 758 //%}
759 //%- (instancetype)initWithValues:(const int32_t [])values 759 //%- (instancetype)initWithEnums:(const int32_t [])values
760 //% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys 760 //% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys
761 //% count:(NSUInteger)count { 761 //% count:(NSUInteger)count {
762 //% return [self initWithValidationFunction:TestingEnum_IsValidValue 762 //% return [self initWithValidationFunction:TestingEnum_IsValidValue
763 //% rawValues:values 763 //% rawValues:values
764 //% forKeys:keys 764 //% forKeys:keys
765 //% count:count]; 765 //% count:count];
766 //%} 766 //%}
767 //%@end 767 //%@end
768 //% 768 //%
769 //% 769 //%
770 770
771 771
(...skipping 13 matching lines...) Expand all
785 //% 785 //%
786 //%@interface GPB##KEY_NAME##VALUE_NAME##DictionaryTests : XCTestCase 786 //%@interface GPB##KEY_NAME##VALUE_NAME##DictionaryTests : XCTestCase
787 //%@end 787 //%@end
788 //% 788 //%
789 //%@implementation GPB##KEY_NAME##VALUE_NAME##DictionaryTests 789 //%@implementation GPB##KEY_NAME##VALUE_NAME##DictionaryTests
790 //% 790 //%
791 //%- (void)testEmpty { 791 //%- (void)testEmpty {
792 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [[ GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init]; 792 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [[ GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init];
793 //% XCTAssertNotNil(dict); 793 //% XCTAssertNotNil(dict);
794 //% XCTAssertEqual(dict.count, 0U); 794 //% XCTAssertEqual(dict.count, 0U);
795 //%VALUE_NOT_FOUND##VHELPER(dict, KEY1) 795 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
796 //% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_T YPE a##VNAME$u##, BOOL *stop) { 796 //% [dict enumerateKeysAnd##VALUE_NAME##sUsingBlock:^(KEY_TYPE KisP##aKey, VALU E_TYPE a##VNAME$u##, BOOL *stop) {
797 //% #pragma unused(aKey, a##VNAME$u##, stop) 797 //% #pragma unused(aKey, a##VNAME$u##, stop)
798 //% XCTFail(@"Shouldn't get here!"); 798 //% XCTFail(@"Shouldn't get here!");
799 //% }]; 799 //% }];
800 //% [dict release]; 800 //% [dict release];
801 //%} 801 //%}
802 //% 802 //%
803 //%- (void)testOne { 803 //%- (void)testOne {
804 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [G PB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWith##VNAME$u##:VAL1 forKey:KEY1] ; 804 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [G PB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWith##VALUE_NAME$u##:VAL1 forKey: KEY1];
805 //% XCTAssertNotNil(dict); 805 //% XCTAssertNotNil(dict);
806 //% XCTAssertEqual(dict.count, 1U); 806 //% XCTAssertEqual(dict.count, 1U);
807 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 807 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
808 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 808 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
809 //% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_T YPE a##VNAME$u, BOOL *stop) { 809 //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VA LUE_TYPE a##VNAME$u, BOOL *stop) {
810 //% XCTAssertEqual##KSUFFIX(aKey, KEY1); 810 //% XCTAssertEqual##KSUFFIX(aKey, KEY1);
811 //% XCTAssertEqual##VSUFFIX(a##VNAME$u, VAL1); 811 //% XCTAssertEqual##VSUFFIX(a##VNAME$u, VAL1);
812 //% XCTAssertNotEqual(stop, NULL); 812 //% XCTAssertNotEqual(stop, NULL);
813 //% }]; 813 //% }];
814 //%} 814 //%}
815 //% 815 //%
816 //%- (void)testBasics { 816 //%- (void)testBasics {
817 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 }; 817 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 };
818 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; 818 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
819 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 819 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
820 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 820 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
821 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 821 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
822 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s)]; 822 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
823 //% XCTAssertNotNil(dict); 823 //% XCTAssertNotNil(dict);
824 //% XCTAssertEqual(dict.count, 2U); 824 //% XCTAssertEqual(dict.count, 2U);
825 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 825 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
826 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 826 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
827 //% 827 //%
828 //% __block NSUInteger idx = 0; 828 //% __block NSUInteger idx = 0;
829 //% KEY_TYPE KisP##*seenKeys = malloc(2 * sizeof(KEY_TYPE##KisP)); 829 //% KEY_TYPE KisP##*seenKeys = malloc(2 * sizeof(KEY_TYPE##KisP));
830 //% VALUE_TYPE *seen##VNAME$u##s = malloc(2 * sizeof(VALUE_TYPE)); 830 //% VALUE_TYPE *seen##VNAME$u##s = malloc(2 * sizeof(VALUE_TYPE));
831 //% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_T YPE a##VNAME$u##, BOOL *stop) { 831 //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VA LUE_TYPE a##VNAME$u##, BOOL *stop) {
832 //% XCTAssertLessThan(idx, 2U); 832 //% XCTAssertLessThan(idx, 2U);
833 //% seenKeys[idx] = aKey; 833 //% seenKeys[idx] = aKey;
834 //% seen##VNAME$u##s[idx] = a##VNAME$u; 834 //% seen##VNAME$u##s[idx] = a##VNAME$u;
835 //% XCTAssertNotEqual(stop, NULL); 835 //% XCTAssertNotEqual(stop, NULL);
836 //% ++idx; 836 //% ++idx;
837 //% }]; 837 //% }];
838 //% for (int i = 0; i < 2; ++i) { 838 //% for (int i = 0; i < 2; ++i) {
839 //% BOOL foundKey = NO; 839 //% BOOL foundKey = NO;
840 //% for (int j = 0; (j < 2) && !foundKey; ++j) { 840 //% for (int j = 0; (j < 2) && !foundKey; ++j) {
841 //% if (COMPARE_KEYS##KSUFFIX(kKeys[i], seenKeys[j])) { 841 //% if (COMPARE_KEYS##KSUFFIX(kKeys[i], seenKeys[j])) {
842 //% foundKey = YES; 842 //% foundKey = YES;
843 //% XCTAssertEqual##VSUFFIX(k##VNAME$u##s[i], seen##VNAME$u##s[j], @"i = %d, j = %d", i, j); 843 //% XCTAssertEqual##VSUFFIX(k##VNAME$u##s[i], seen##VNAME$u##s[j], @"i = %d, j = %d", i, j);
844 //% } 844 //% }
845 //% } 845 //% }
846 //% XCTAssertTrue(foundKey, @"i = %d", i); 846 //% XCTAssertTrue(foundKey, @"i = %d", i);
847 //% } 847 //% }
848 //% free(seenKeys); 848 //% free(seenKeys);
849 //% free(seen##VNAME$u##s); 849 //% free(seen##VNAME$u##s);
850 //% 850 //%
851 //% // Stopping the enumeration. 851 //% // Stopping the enumeration.
852 //% idx = 0; 852 //% idx = 0;
853 //% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_T YPE a##VNAME$u##, BOOL *stop) { 853 //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VA LUE_TYPE a##VNAME$u##, BOOL *stop) {
854 //% #pragma unused(aKey, a##VNAME$u) 854 //% #pragma unused(aKey, a##VNAME$u)
855 //% if (idx == 0) *stop = YES; 855 //% if (idx == 0) *stop = YES;
856 //% XCTAssertNotEqual(idx, 2U); 856 //% XCTAssertNotEqual(idx, 2U);
857 //% ++idx; 857 //% ++idx;
858 //% }]; 858 //% }];
859 //% [dict release]; 859 //% [dict release];
860 //%} 860 //%}
861 //% 861 //%
862 //%- (void)testEquality { 862 //%- (void)testEquality {
863 //% const KEY_TYPE KisP##kKeys1[] = { KEY1, KEY2 }; 863 //% const KEY_TYPE KisP##kKeys1[] = { KEY1, KEY2 };
864 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY1 }; 864 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY1 };
865 //% const VALUE_TYPE k##VNAME$u##s1[] = { VAL1, VAL2 }; 865 //% const VALUE_TYPE k##VNAME$u##s1[] = { VAL1, VAL2 };
866 //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL2, VAL1 }; 866 //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL2, VAL1 };
867 //% const VALUE_TYPE k##VNAME$u##s3[] = { VAL2 }; 867 //% const VALUE_TYPE k##VNAME$u##s3[] = { VAL2 };
868 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1 = 868 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1 =
869 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s1 869 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s1
870 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1 870 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys1
871 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s1)]; 871 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s1)];
872 //% XCTAssertNotNil(dict1); 872 //% XCTAssertNotNil(dict1);
873 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1prim e = 873 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1prim e =
874 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s1 874 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s1
875 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1 875 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys1
876 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s1)]; 876 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s1)];
877 //% XCTAssertNotNil(dict1prime); 877 //% XCTAssertNotNil(dict1prime);
878 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 878 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
879 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s2 879 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s2
880 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1 880 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys1
881 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s2)]; 881 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s2)];
882 //% XCTAssertNotNil(dict2); 882 //% XCTAssertNotNil(dict2);
883 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict3 = 883 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict3 =
884 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s1 884 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s1
885 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 2 885 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys2
886 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s1)]; 886 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s1)];
887 //% XCTAssertNotNil(dict3); 887 //% XCTAssertNotNil(dict3);
888 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict4 = 888 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict4 =
889 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s3 889 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s3
890 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1 890 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys1
891 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s3)]; 891 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s3)];
892 //% XCTAssertNotNil(dict4); 892 //% XCTAssertNotNil(dict4);
893 //% 893 //%
894 //% // 1/1Prime should be different objects, but equal. 894 //% // 1/1Prime should be different objects, but equal.
895 //% XCTAssertNotEqual(dict1, dict1prime); 895 //% XCTAssertNotEqual(dict1, dict1prime);
896 //% XCTAssertEqualObjects(dict1, dict1prime); 896 //% XCTAssertEqualObjects(dict1, dict1prime);
897 //% // Equal, so they must have same hash. 897 //% // Equal, so they must have same hash.
898 //% XCTAssertEqual([dict1 hash], [dict1prime hash]); 898 //% XCTAssertEqual([dict1 hash], [dict1prime hash]);
899 //% 899 //%
900 //% // 2 is same keys, different ##VNAME##s; not equal. 900 //% // 2 is same keys, different ##VNAME##s; not equal.
901 //% XCTAssertNotEqualObjects(dict1, dict2); 901 //% XCTAssertNotEqualObjects(dict1, dict2);
902 //% 902 //%
903 //% // 3 is different keys, same ##VNAME##s; not equal. 903 //% // 3 is different keys, same ##VNAME##s; not equal.
904 //% XCTAssertNotEqualObjects(dict1, dict3); 904 //% XCTAssertNotEqualObjects(dict1, dict3);
905 //% 905 //%
906 //% // 4 Fewer pairs; not equal 906 //% // 4 Fewer pairs; not equal
907 //% XCTAssertNotEqualObjects(dict1, dict4); 907 //% XCTAssertNotEqualObjects(dict1, dict4);
908 //% 908 //%
909 //% [dict1 release]; 909 //% [dict1 release];
910 //% [dict1prime release]; 910 //% [dict1prime release];
911 //% [dict2 release]; 911 //% [dict2 release];
912 //% [dict3 release]; 912 //% [dict3 release];
913 //% [dict4 release]; 913 //% [dict4 release];
914 //%} 914 //%}
915 //% 915 //%
916 //%- (void)testCopy { 916 //%- (void)testCopy {
917 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 }; 917 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 };
918 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; 918 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
919 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 919 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
920 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 920 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
921 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 921 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
922 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s)]; 922 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
923 //% XCTAssertNotNil(dict); 923 //% XCTAssertNotNil(dict);
924 //% 924 //%
925 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = [ dict copy]; 925 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = [ dict copy];
926 //% XCTAssertNotNil(dict2); 926 //% XCTAssertNotNil(dict2);
927 //% 927 //%
928 //% // Should be new object but equal. 928 //% // Should be new object but equal.
929 //% XCTAssertNotEqual(dict, dict2); 929 //% XCTAssertNotEqual(dict, dict2);
930 //% XCTAssertEqualObjects(dict, dict2); 930 //% XCTAssertEqualObjects(dict, dict2);
931 //% XCTAssertTrue([dict2 isKindOfClass:[GPB##KEY_NAME##VALUE_NAME##Dictionary c lass]]); 931 //% XCTAssertTrue([dict2 isKindOfClass:[GPB##KEY_NAME##VALUE_NAME##Dictionary c lass]]);
932 //% 932 //%
933 //% [dict2 release]; 933 //% [dict2 release];
934 //% [dict release]; 934 //% [dict release];
935 //%} 935 //%}
936 //% 936 //%
937 //%- (void)testDictionaryFromDictionary { 937 //%- (void)testDictionaryFromDictionary {
938 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 }; 938 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 };
939 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; 939 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
940 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 940 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
941 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 941 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
942 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 942 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
943 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s)]; 943 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
944 //% XCTAssertNotNil(dict); 944 //% XCTAssertNotNil(dict);
945 //% 945 //%
946 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 946 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
947 //% [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWithDictionary:dict]; 947 //% [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWithDictionary:dict];
948 //% XCTAssertNotNil(dict2); 948 //% XCTAssertNotNil(dict2);
949 //% 949 //%
950 //% // Should be new pointer, but equal objects. 950 //% // Should be new pointer, but equal objects.
951 //% XCTAssertNotEqual(dict, dict2); 951 //% XCTAssertNotEqual(dict, dict2);
952 //% XCTAssertEqualObjects(dict, dict2); 952 //% XCTAssertEqualObjects(dict, dict2);
953 //% [dict release]; 953 //% [dict release];
954 //%} 954 //%}
955 //% 955 //%
956 //%- (void)testAdds { 956 //%- (void)testAdds {
957 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [G PB##KEY_NAME##VALUE_NAME##Dictionary dictionary]; 957 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [G PB##KEY_NAME##VALUE_NAME##Dictionary dictionary];
958 //% XCTAssertNotNil(dict); 958 //% XCTAssertNotNil(dict);
959 //% 959 //%
960 //% XCTAssertEqual(dict.count, 0U); 960 //% XCTAssertEqual(dict.count, 0U);
961 //% [dict set##VNAME$u:VAL1 forKey:KEY1]; 961 //% [dict set##VALUE_NAME:VAL1 forKey:KEY1];
962 //% XCTAssertEqual(dict.count, 1U); 962 //% XCTAssertEqual(dict.count, 1U);
963 //% 963 //%
964 //% const KEY_TYPE KisP##kKeys[] = { KEY2 }; 964 //% const KEY_TYPE KisP##kKeys[] = { KEY2 };
965 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL2 }; 965 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL2 };
966 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 966 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
967 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 967 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
968 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 968 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
969 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s)]; 969 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
970 //% XCTAssertNotNil(dict2); 970 //% XCTAssertNotNil(dict2);
971 //% [dict addEntriesFromDictionary:dict2]; 971 //% [dict addEntriesFromDictionary:dict2];
972 //% XCTAssertEqual(dict.count, 2U); 972 //% XCTAssertEqual(dict.count, 2U);
973 //% 973 //%
974 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 974 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
975 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 975 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
976 //% [dict2 release]; 976 //% [dict2 release];
977 //%} 977 //%}
978 //% 978 //%
979 //%- (void)testRemove { 979 //%- (void)testRemove {
980 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2}; 980 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2};
981 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; 981 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
982 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 982 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
983 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 983 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
984 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 984 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
985 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE (k##VNAME$u##s)]; 985 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRA YSIZE(k##VNAME$u##s)];
986 //% XCTAssertNotNil(dict); 986 //% XCTAssertNotNil(dict);
987 //% XCTAssertEqual(dict.count, 2U); 987 //% XCTAssertEqual(dict.count, 2U);
988 //% 988 //%
989 //% [dict remove##VNAME$u##ForKey:KEY2]; 989 //% [dict remove##VALUE_NAME##ForKey:KEY2];
990 //% XCTAssertEqual(dict.count, 1U); 990 //% XCTAssertEqual(dict.count, 1U);
991 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 991 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
992 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 992 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
993 //% 993 //%
994 //% // Remove again does nothing. 994 //% // Remove again does nothing.
995 //% [dict remove##VNAME$u##ForKey:KEY2]; 995 //% [dict remove##VALUE_NAME##ForKey:KEY2];
996 //% XCTAssertEqual(dict.count, 1U); 996 //% XCTAssertEqual(dict.count, 1U);
997 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) 997 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
998 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 998 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
999 //% 999 //%
1000 //% [dict removeAll]; 1000 //% [dict removeAll];
1001 //% XCTAssertEqual(dict.count, 0U); 1001 //% XCTAssertEqual(dict.count, 0U);
1002 //%VALUE_NOT_FOUND##VHELPER(dict, KEY1) 1002 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
1003 //%VALUE_NOT_FOUND##VHELPER(dict, KEY2) 1003 //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
1004 //% [dict release]; 1004 //% [dict release];
1005 //%} 1005 //%}
1006 //% 1006 //%
1007 //%- (void)testInplaceMutation { 1007 //%- (void)testInplaceMutation {
1008 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 }; 1008 //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 };
1009 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; 1009 //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
1010 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = 1010 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
1011 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s 1011 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s
1012 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 1012 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys
1013 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE (k##VNAME$u##s)]; 1013 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s)];
1014 //% XCTAssertNotNil(dict); 1014 //% XCTAssertNotNil(dict);
1015 //% XCTAssertEqual(dict.count, 2U); 1015 //% XCTAssertEqual(dict.count, 2U);
1016 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VN AME, KEY1, VAL1) 1016 //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NA ME, dict, VNAME, KEY1, VAL1)
1017 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 1017 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
1018 //% 1018 //%
1019 //% [dict set##VNAME$u##:VAL2 forKey:KEY1]; 1019 //% [dict set##VALUE_NAME##:VAL2 forKey:KEY1];
1020 //% XCTAssertEqual(dict.count, 2U); 1020 //% XCTAssertEqual(dict.count, 2U);
1021 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL2) 1021 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL2)
1022 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 1022 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
1023 //% 1023 //%
1024 //% [dict set##VNAME$u##:VAL1 forKey:KEY2]; 1024 //% [dict set##VALUE_NAME##:VAL1 forKey:KEY2];
1025 //% XCTAssertEqual(dict.count, 2U); 1025 //% XCTAssertEqual(dict.count, 2U);
1026 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL2) 1026 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL2)
1027 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL1) 1027 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL1)
1028 //% 1028 //%
1029 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY1 }; 1029 //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY1 };
1030 //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL2, VAL1 }; 1030 //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL2, VAL1 };
1031 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = 1031 //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
1032 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k## VNAME$u##s2 1032 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s: k##VNAME$u##s2
1033 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys 2 1033 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys: kKeys2
1034 //% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBAR RAYSIZE(k##VNAME$u##s2)]; 1034 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count: GPBARRAYSIZE(k##VNAME$u##s2)];
1035 //% XCTAssertNotNil(dict2); 1035 //% XCTAssertNotNil(dict2);
1036 //% [dict addEntriesFromDictionary:dict2]; 1036 //% [dict addEntriesFromDictionary:dict2];
1037 //% XCTAssertEqual(dict.count, 2U); 1037 //% XCTAssertEqual(dict.count, 2U);
1038 //%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) 1038 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
1039 //%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) 1039 //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
1040 //% 1040 //%
1041 //% [dict2 release]; 1041 //% [dict2 release];
1042 //% [dict release]; 1042 //% [dict release];
1043 //%} 1043 //%}
1044 //% 1044 //%
1045 //%@end 1045 //%@end
1046 //% 1046 //%
1047 1047
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698