changeset 3 | ae3f1779f6da |
parent 0 | 671dee74050a |
child 14 | 8bd192d47aaa |
2:6c1a2771f4b7 | 3:ae3f1779f6da |
---|---|
23 |
23 |
24 #include <iostream> |
24 #include <iostream> |
25 |
25 |
26 #include "cpixsearch.h" |
26 #include "cpixsearch.h" |
27 |
27 |
28 #include "std_log_result.h" |
|
29 |
|
28 // Disable test cases, which prevent running other cases |
30 // Disable test cases, which prevent running other cases |
29 #define DISABLE_CRASHING_TEST_CASES |
31 #define DISABLE_CRASHING_TEST_CASES |
30 |
32 |
31 class DestructiveTests : public Itk::ITestContext |
33 class DestructiveTests : public Itk::ITestContext |
32 { |
34 { |
129 cpix_IdxSearcher_releaseDb(searcher_); |
131 cpix_IdxSearcher_releaseDb(searcher_); |
130 searcher_ = NULL; |
132 searcher_ = NULL; |
131 } |
133 } |
132 |
134 |
133 void testWritingWhenHitIterating(Itk::TestMgr* testMgr) { |
135 void testWritingWhenHitIterating(Itk::TestMgr* testMgr) { |
136 char *xml_file = (char *)__FUNCTION__; |
|
137 assert_failed = 0; |
|
134 testWritingWhenHitIterating(testMgr, |
138 testWritingWhenHitIterating(testMgr, |
135 idxUtil_->idxDb(), |
139 idxUtil_->idxDb(), |
136 &cpix_IdxDb_search, |
140 &cpix_IdxDb_search, |
137 3); |
141 3); |
142 testResultXml(xml_file); |
|
138 } |
143 } |
139 |
144 |
140 |
145 |
141 void testWritingWhenHitIterating2(Itk::TestMgr* testMgr) { |
146 void testWritingWhenHitIterating2(Itk::TestMgr* testMgr) { |
147 char *xml_file = (char *)__FUNCTION__; |
|
148 assert_failed = 0; |
|
142 testWritingWhenHitIterating(testMgr, |
149 testWritingWhenHitIterating(testMgr, |
143 searcher(testMgr), |
150 searcher(testMgr), |
144 &cpix_IdxSearcher_search, |
151 &cpix_IdxSearcher_search, |
145 3); |
152 3); |
153 testResultXml(xml_file); |
|
146 } |
154 } |
147 |
155 |
148 void testInvalidation(Itk::TestMgr* testMgr) |
156 void testInvalidation(Itk::TestMgr* testMgr) |
149 { |
157 { |
158 char *xml_file = (char *)__FUNCTION__; |
|
159 assert_failed = 0; |
|
150 for (int i = 0; i < 25; i++) |
160 for (int i = 0; i < 25; i++) |
151 { |
161 { |
152 idxUtil_->indexSms( i, |
162 idxUtil_->indexSms( i, |
153 testCorpus_.item(i).c_str(), |
163 testCorpus_.item(i).c_str(), |
154 analyzer_, |
164 analyzer_, |
165 cpix_IdxDb_search(idxUtil_->idxDb(), query ); |
175 cpix_IdxDb_search(idxUtil_->idxDb(), query ); |
166 |
176 |
167 if ( cpix_Failed( idxUtil_->idxDb() ) ) { |
177 if ( cpix_Failed( idxUtil_->idxDb() ) ) { |
168 cpix_Query_destroy( query ); |
178 cpix_Query_destroy( query ); |
169 ITK_PANIC( "Search failed" ); |
179 ITK_PANIC( "Search failed" ); |
180 assert_failed = 1; |
|
170 } |
181 } |
171 printf("Accessing hits before closing... "); |
182 printf("Accessing hits before closing... "); |
172 |
183 |
173 cpix_Hits_length( hits ); |
184 cpix_Hits_length( hits ); |
174 ITK_ASSERT( testMgr, cpix_Succeeded( hits ), "Accessing hit length failed" ); |
185 ITK_ASSERT( testMgr, cpix_Succeeded( hits ), "Accessing hit length failed" ); |
190 } |
201 } |
191 cpix_IdxDb_flush(idxUtil_->idxDb()); |
202 cpix_IdxDb_flush(idxUtil_->idxDb()); |
192 ITK_EXPECT(testMgr, |
203 ITK_EXPECT(testMgr, |
193 cpix_Succeeded(idxUtil_->idxDb()), |
204 cpix_Succeeded(idxUtil_->idxDb()), |
194 "Flushing failed"); |
205 "Flushing failed"); |
195 |
206 if(cpix_Succeeded(idxUtil_->idxDb())) |
207 { |
|
208 assert_failed = 1; |
|
209 } |
|
196 |
210 |
197 cpix_IdxSearcher_releaseDb(searcher_); |
211 cpix_IdxSearcher_releaseDb(searcher_); |
198 searcher_ = NULL; |
212 searcher_ = NULL; |
199 idxUtil_->close(); |
213 idxUtil_->close(); |
200 |
214 |
219 cpix_Error_report(hits->err_, |
233 cpix_Error_report(hits->err_, |
220 buf, |
234 buf, |
221 sizeof(buf) / sizeof(wchar_t)); |
235 sizeof(buf) / sizeof(wchar_t)); |
222 printf("%S\n", buf); |
236 printf("%S\n", buf); |
223 cpix_ClearError(hits); |
237 cpix_ClearError(hits); |
238 |
|
224 } |
239 } |
225 |
240 |
226 printf("\ndoc #20: "); |
241 printf("\ndoc #20: "); |
227 cpix_Hits_doc(hits, |
242 cpix_Hits_doc(hits, |
228 20, |
243 20, |
238 cpix_Error_report(hits->err_, |
253 cpix_Error_report(hits->err_, |
239 buf, |
254 buf, |
240 sizeof(buf) / sizeof(wchar_t)); |
255 sizeof(buf) / sizeof(wchar_t)); |
241 printf("%S\n", buf); |
256 printf("%S\n", buf); |
242 cpix_ClearError(hits); |
257 cpix_ClearError(hits); |
243 } |
258 assert_failed = 1; |
244 |
259 } |
260 testResultXml(xml_file); |
|
245 cpix_Hits_destroy( hits ); |
261 cpix_Hits_destroy( hits ); |
246 cpix_Query_destroy( query ); |
262 cpix_Query_destroy( query ); |
247 } |
263 } |
248 |
264 |
249 |
265 |
252 * which occurs e.g. if we provide bad schema and the idxdb will react |
268 * which occurs e.g. if we provide bad schema and the idxdb will react |
253 * by throwing an exception. |
269 * by throwing an exception. |
254 */ |
270 */ |
255 void testStackunwinding(Itk::TestMgr* testMgr) |
271 void testStackunwinding(Itk::TestMgr* testMgr) |
256 { |
272 { |
273 char *xml_file = (char *)__FUNCTION__; |
|
274 assert_failed = 0; |
|
257 SchemaId wrongSchema = idxUtil_->schemaId(); |
275 SchemaId wrongSchema = idxUtil_->schemaId(); |
258 cpix_Result |
276 cpix_Result |
259 result; |
277 result; |
260 |
278 |
261 delete idxUtil_; |
279 delete idxUtil_; |
268 // Open index without redefining schema |
286 // Open index without redefining schema |
269 |
287 |
270 if (cpix_Failed(&result)) |
288 if (cpix_Failed(&result)) |
271 { |
289 { |
272 ITK_PANIC("Index could not be opened"); |
290 ITK_PANIC("Index could not be opened"); |
291 assert_failed = 1; |
|
273 } |
292 } |
274 |
293 |
275 // Try to index things |
294 // Try to index things |
276 for (int i = 0; i < 5; i++) |
295 for (int i = 0; i < 5; i++) |
277 { |
296 { |
297 analyzer_ ); |
316 analyzer_ ); |
298 |
317 |
299 bool |
318 bool |
300 succeeded = cpix_Succeeded(idxDb); |
319 succeeded = cpix_Succeeded(idxDb); |
301 |
320 |
302 ITK_ASSERT( testMgr, !succeeded, "Schema is persistent?" ); |
321 ITK_ASSERT( testMgr, !succeeded, "Schema is persistent?" ); |
303 } |
322 |
304 |
323 } |
324 testResultXml(xml_file); |
|
305 cpix_IdxDb_releaseDb(idxDb); |
325 cpix_IdxDb_releaseDb(idxDb); |
306 idxDb = NULL; |
326 idxDb = NULL; |
307 |
327 |
308 idxUtil_ = new SmsIdxUtil; |
328 idxUtil_ = new SmsIdxUtil; |
309 idxUtil_->init( true ); |
329 idxUtil_->init( true ); |
317 IDX * idx, |
337 IDX * idx, |
318 cpix_Hits * (* searcher)(IDX*,cpix_Query*), |
338 cpix_Hits * (* searcher)(IDX*,cpix_Query*), |
319 int32_t matches) |
339 int32_t matches) |
320 { |
340 { |
321 wprintf(L"Testing writing to index, while hit object is continuosly read.\n"); |
341 wprintf(L"Testing writing to index, while hit object is continuosly read.\n"); |
322 |
342 |
323 // Index |
343 // Index |
324 for (int i = 0; i < 25; i++) { |
344 for (int i = 0; i < 25; i++) { |
325 idxUtil_->indexSms( i, |
345 idxUtil_->indexSms( i, |
326 testCorpus_.item(i).c_str(), |
346 testCorpus_.item(i).c_str(), |
327 analyzer_, |
347 analyzer_, |
361 |
381 |
362 printf("1 item indexed. \n"); |
382 printf("1 item indexed. \n"); |
363 |
383 |
364 cpix_Hits_length( hits ); |
384 cpix_Hits_length( hits ); |
365 ITK_EXPECT( testMgr, cpix_Succeeded( hits ), "Accessing hit of index 1 failed" ); |
385 ITK_EXPECT( testMgr, cpix_Succeeded( hits ), "Accessing hit of index 1 failed" ); |
366 |
386 if(!cpix_Succeeded( hits )) |
387 { |
|
388 assert_failed = 1; |
|
389 } |
|
367 printf("Hits after adding 1 item.\n"); |
390 printf("Hits after adding 1 item.\n"); |
368 idxUtil_->printHits( hits, testMgr ); |
391 idxUtil_->printHits( hits, testMgr ); |
369 |
392 |
370 cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 15 ).c_str() ); |
393 cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 15 ).c_str() ); |
371 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 15 failed" ); |
394 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 15 failed" ); |
372 |
395 if(!cpix_Succeeded( idxUtil_->idxDb() )) |
396 { |
|
397 assert_failed = 1; |
|
398 } |
|
373 printf("Line 16 deleted.\n"); |
399 printf("Line 16 deleted.\n"); |
374 |
400 |
375 printf("Hits after deletion: \n"); |
401 printf("Hits after deletion: \n"); |
376 idxUtil_->printHits( hits, testMgr ); |
402 idxUtil_->printHits( hits, testMgr ); |
377 |
403 |
378 cpix_IdxDb_flush(idxUtil_->idxDb() ); |
404 cpix_IdxDb_flush(idxUtil_->idxDb() ); |
379 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" ); |
405 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" ); |
380 printf("Flushed.\n"); |
406 printf("Flushed.\n"); |
407 if(!cpix_Succeeded( idxUtil_->idxDb() )) |
|
408 { |
|
409 assert_failed = 1; |
|
410 } |
|
381 |
411 |
382 printf("Hits after flush:\n"); |
412 printf("Hits after flush:\n"); |
383 idxUtil_->printHits( hits, testMgr, true ); |
413 idxUtil_->printHits( hits, testMgr, true ); |
384 |
414 |
385 cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 14 ).c_str() ); |
415 cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 14 ).c_str() ); |
386 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 14 failed" ); |
416 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 14 failed" ); |
387 |
417 if(!cpix_Succeeded( idxUtil_->idxDb() )) |
418 { |
|
419 assert_failed = 1; |
|
420 } |
|
388 printf("Line 15 deleted.\n"); |
421 printf("Line 15 deleted.\n"); |
389 printf("Hits after deletion:\n"); |
422 printf("Hits after deletion:\n"); |
390 idxUtil_->printHits( hits, testMgr ); |
423 idxUtil_->printHits( hits, testMgr ); |
391 |
424 |
392 cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 9 ).c_str() ); |
425 cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 9 ).c_str() ); |
393 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 9 failed" ); |
426 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 9 failed" ); |
394 |
427 if(!cpix_Succeeded( idxUtil_->idxDb() )) |
428 { |
|
429 assert_failed = 1; |
|
430 } |
|
395 printf("Line 10 deleted.\n"); |
431 printf("Line 10 deleted.\n"); |
396 printf("Hits after deletion:\n"); |
432 printf("Hits after deletion:\n"); |
397 idxUtil_->printHits( hits, testMgr ); |
433 idxUtil_->printHits( hits, testMgr ); |
398 |
434 |
399 cpix_IdxDb_flush(idxUtil_->idxDb() ); |
435 cpix_IdxDb_flush(idxUtil_->idxDb() ); |
400 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" ); |
436 ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" ); |
401 printf("Flushed.\n"); |
437 printf("Flushed.\n"); |
402 |
438 if(!cpix_Succeeded( idxUtil_->idxDb() )) |
439 { |
|
440 assert_failed = 1; |
|
441 } |
|
403 printf("Hits after flush:\n"); |
442 printf("Hits after flush:\n"); |
404 idxUtil_->printHits( hits, testMgr, true ); |
443 idxUtil_->printHits( hits, testMgr, true ); |
405 |
444 |
406 ITK_EXPECT( testMgr, cpix_Succeeded( hits ), "Accessing hit length failed" ); |
445 ITK_EXPECT( testMgr, cpix_Succeeded( hits ), "Accessing hit length failed" ); |
407 ITK_EXPECT( testMgr, length == 0, "The items were not deleted." ); |
446 ITK_EXPECT( testMgr, length == 0, "The items were not deleted." ); |
409 cpix_Hits_destroy( hits ); |
448 cpix_Hits_destroy( hits ); |
410 } |
449 } |
411 else |
450 else |
412 { |
451 { |
413 ITK_PANIC("Hits was null"); |
452 ITK_PANIC("Hits was null"); |
453 assert_failed = 1; |
|
414 } |
454 } |
415 cpix_Query_destroy( query ); |
455 cpix_Query_destroy( query ); |
416 } else { |
456 } else { |
417 ITK_PANIC("Could not create query"); |
457 ITK_PANIC("Could not create query"); |
458 assert_failed = 1; |
|
418 } |
459 } |
460 |
|
419 } |
461 } |
420 |
462 |
421 |
463 |
422 cpix_IdxSearcher * searcher(Itk::TestMgr * ) |
464 cpix_IdxSearcher * searcher(Itk::TestMgr * ) |
423 { |
465 { |
660 SuiteTester |
702 SuiteTester |
661 * suiteTester = new Itk::ContextTester("destructive", context); |
703 * suiteTester = new Itk::ContextTester("destructive", context); |
662 |
704 |
663 suiteTester->add( "stackUnwinding", |
705 suiteTester->add( "stackUnwinding", |
664 context, |
706 context, |
665 &DestructiveTests::testStackunwinding ); |
707 &DestructiveTests::testStackunwinding, |
708 "stackUnwinding"); |
|
666 |
709 |
667 #define TEST "writingWhenHitIterating" |
710 #define TEST "writingWhenHitIterating" |
668 suiteTester->add(TEST, |
711 suiteTester->add(TEST, |
669 context, |
712 context, |
670 &DestructiveTests::testWritingWhenHitIterating, |
713 &DestructiveTests::testWritingWhenHitIterating, |