void _TestSearchesRun(CuTest *tc, Analyzer* analyzer, Searcher* search, const TCHAR* qry){ Query* q = NULL; Hits* h = NULL; try{ q = QueryParser::parse(qry , _T("contents"), analyzer); if ( q != NULL ){ h = search->search( q ); if ( h->length() > 0 ){ //check for explanation memory leaks... CL_NS(search)::Explanation expl1; search->explain(q, h->id(0), &expl1); TCHAR* tmp = expl1.toString(); _CLDELETE_CARRAY(tmp); if ( h->length() > 1 ){ //do a second one just in case CL_NS(search)::Explanation expl2; search->explain(q, h->id(1), &expl2); tmp = expl2.toString(); _CLDELETE_CARRAY(tmp); } } } }catch(CLuceneError& err){ CuFail(tc,_T("Error: %s\n"), err.twhat()); }catch(...){ CuFail(tc,_T("Error: unknown\n")); } _CLDELETE(h); _CLDELETE(q); }
void test_sorting(CuTest* tc) { double flux[] = { 50, 100, 50, 100, 20, 20, 40, 40 }; double bg[] = { 0, 10, 10, 0, 10, 0, 5, 0 }; int trueorder[] = { 4, 5, 7, 6, 2, 0, 1, 3 }; int i, N; starxy_t* s; char* infn = "/tmp/test-resort-xylist"; char* outfn = "/tmp/test-resort-xylist-out"; xylist_t* xy; xylist_t* xy2; starxy_t* s2; xy = xylist_open_for_writing(infn); CuAssertPtrNotNull(tc, xy); xylist_set_include_flux(xy, TRUE); xylist_set_include_background(xy, TRUE); if (xylist_write_primary_header(xy) || xylist_write_header(xy)) { CuFail(tc, "write header"); } N = sizeof(flux) / sizeof(double); s = starxy_new(N, TRUE, TRUE); for (i=0; i<N; i++) { starxy_setx(s, i, random()%1000); starxy_sety(s, i, random()%1000); } starxy_set_flux_array(s, flux); starxy_set_bg_array(s, bg); if (xylist_write_field(xy, s) || xylist_fix_header(xy) || xylist_fix_primary_header(xy) || xylist_close(xy)) { CuFail(tc, "close xy"); } CuAssertIntEquals(tc, 0, resort_xylist(infn, outfn, NULL, NULL, TRUE)); xy2 = xylist_open(outfn); s2 = xylist_read_field(xy2, NULL); CuAssertPtrNotNull(tc, s2); CuAssertPtrNotNull(tc, s2->x); CuAssertPtrNotNull(tc, s2->y); CuAssertPtrNotNull(tc, s2->flux); CuAssertPtrNotNull(tc, s2->background); for (i=0; i<N; i++) { CuAssertDblEquals(tc, s->x[trueorder[i]], s2->x[i], 1e-6); CuAssertDblEquals(tc, s->y[trueorder[i]], s2->y[i], 1e-6); CuAssertDblEquals(tc, s->flux[trueorder[i]], s2->flux[i], 1e-6); CuAssertDblEquals(tc, s->background[trueorder[i]], s2->background[i], 1e-6); } }
static void test_client_new(CuTest *tc) { const char *err = "client.c client_new FAIL"; client_t *c1, *c2; int max = STATIC_ALLOC_CLIENTS; /* For testing, use 10 is plenty */ int middle = max / 2; int i; if (STATIC_ALLOC_CLIENTS % 2 == 1) { CuFail(tc, "client.c client_new FAIL -- " "rerun with even number of clients allocated"); } for (i = 0; i < max; ++i) { c1 = client_new(); if (i == middle - 1) { //printf("Freeing client %d\n", i); client_free(c1); c1 = NULL; } } c1 = client_new(); client_free(c1); c2 = client_new(); CuAssertPtrEquals_Msg(tc, err, c1, c2); c1 = client_new(); CuAssertPtrEquals_Msg(tc, err, NULL, c1); #if UNIT_TESTING_VERBOSITY_LEVEL >= 1 printf("client.c client_new PASS\n"); #endif }
void testStemming(CuTest *tc) { try { // read test cases from external file: char path[CL_MAX_PATH]; strcpy(path, clucene_data_location); strcat(path, "/contribs-lib/analysis/de/data.txt"); CuAssert(tc, _T("File with test data does not exist"), Misc::dir_Exists(path)); FileReader reader(path, "UTF-8"); TCHAR buffer[1024]; while (true) { int32_t len = reader.readLine(buffer, 1024); if (len == 0) break; Misc::wordTrim(buffer); if (_tcslen(buffer) == 0 || buffer[0] == _T('#')) continue; // ignore comments and empty lines const TCHAR* pos = _tcsstr(buffer, _T(";")); TCHAR part0[1024], part1[1024]; if (pos != NULL) { _tcsncpy(part0, buffer, pos - buffer); _tcscpy(part1, pos + 1); part0[pos - buffer] = '\0'; check(tc, part0, part1); } else { check(tc, buffer, _T("")); } } } catch (CLuceneError &e) { CuFail(tc, e); } }
void testException(CuTest *tc) { try { BooleanQuery::setMaxClauseCount(0); CuFail(tc, _T("setMaxClauseCount(0) did not throw an exception")); } catch (CLuceneError&) { // okay } }
void check(CuTest* tc, const TCHAR* input, const TCHAR* expected) { StandardTokenizer* tokenStream = new StandardTokenizer(new StringReader(input)); GermanStemFilter filter(tokenStream, true); Token t; if (filter.next(&t) == NULL) CuFail(tc, _T("Token expected!")); CuAssertStrEquals(tc, _T(""), expected, t.termBuffer()); filter.close(); }
static void testMaskingInput(CuTest *tc) { static const unsigned char diceRolls[] = {0xd5, 0x58, 0xaf, 0xfa, 0x80, 0x67, 0xf4, 0x2c, 0xd9, 0x48, 0x36, 0x21, 0xd1, 0xab, 0xae, 0x23, 0xed, 0xd6, 0xca, 0x04, 0x72, 0x7e, 0xcf, 0xc7, 0xdb, 0xc7, 0x6b, 0xde, 0x34, 0x77, 0x1e, 0x53}; int res; KSI_BlockSigner *bs = NULL; KSI_OctetString *iv = NULL; KSI_DataHash *zero = NULL; size_t i; struct { KSI_CTX *ctx; KSI_HashAlgorithm algo_id; KSI_DataHash *prevHash; KSI_OctetString *iv; KSI_BlockSigner **bs; int expectedRes; } tests[] = { {NULL, KSI_HASHALG_SHA3_512, NULL, NULL, NULL, KSI_INVALID_ARGUMENT}, {NULL, KSI_HASHALG_SHA3_512, NULL, NULL, &bs, KSI_INVALID_ARGUMENT}, {NULL, KSI_HASHALG_SHA3_512, NULL, iv, &bs, KSI_INVALID_ARGUMENT}, {NULL, KSI_HASHALG_SHA3_512, zero, NULL, &bs, KSI_INVALID_ARGUMENT}, {ctx, KSI_HASHALG_SHA3_512, NULL, NULL, &bs, KSI_UNAVAILABLE_HASH_ALGORITHM}, {NULL, KSI_HASHALG_SHA2_512, NULL, NULL, NULL, KSI_INVALID_ARGUMENT}, {NULL, KSI_HASHALG_SHA2_512, NULL, NULL, &bs, KSI_INVALID_ARGUMENT}, {NULL, KSI_HASHALG_SHA2_512, NULL, iv, &bs, KSI_INVALID_ARGUMENT}, {NULL, KSI_HASHALG_SHA2_512, zero, NULL, &bs, KSI_INVALID_ARGUMENT}, {ctx, KSI_HASHALG_SHA2_512, zero, NULL, &bs, KSI_OK}, {NULL, -1, NULL, NULL, NULL, -1} }; /* Create zero hash. */ res = KSI_DataHash_createZero(ctx, KSI_HASHALG_SHA2_512, &zero); CuAssert(tc, "Unable to create zero hash.", res == KSI_OK && zero != NULL); /* Create random initial vector. */ res = KSI_OctetString_new(ctx, diceRolls, sizeof(diceRolls), &iv); CuAssert(tc, "Unable to create initial vector.", res == KSI_OK && iv != NULL); res = KSI_BlockSigner_new(ctx, KSI_HASHALG_SHA1, zero, iv, &bs); CuAssert(tc, "Unable to create block signer instance with masking.", res == KSI_OK && bs != NULL); for (i = 0; tests[i].expectedRes != -1; i++) { res = KSI_BlockSigner_new(tests[i].ctx, tests[i].algo_id, tests[i].prevHash, tests[i].iv, tests[i].bs); KSI_BlockSigner_free(bs); bs = NULL; if (res != tests[i].expectedRes) { char buf[1000]; KSI_snprintf(buf, sizeof(buf), "Unexpected result @%i (expected = '%s', but was '%s').", i, KSI_getErrorString(tests[i].expectedRes), KSI_getErrorString(res)); CuFail(tc, buf); } } KSI_OctetString_free(iv); KSI_DataHash_free(zero); }
/* * Test utilities */ void run(CuTest *tc, const char *format, ...) { char *command; va_list args; int r; va_start(args, format); r = vasprintf(&command, format, args); va_end (args); if (r < 0) CuFail(tc, "Failed to format command (out of memory)"); r = system(command); if (r < 0 || (WIFEXITED(r) && WEXITSTATUS(r) != 0)) { char *msg; r = asprintf(&msg, "Command %s failed with status %d\n", command, WEXITSTATUS(r)); CuFail(tc, msg); free(msg); } free(command); }
static void setup(CuTest *tc) { char *lensdir; if (asprintf(&root, "%s/build/test-save/%s", abs_top_builddir, tc->name) < 0) { CuFail(tc, "failed to set root"); } if (asprintf(&lensdir, "%s/lenses", abs_top_srcdir) < 0) CuFail(tc, "asprintf lensdir failed"); run(tc, "test -d %s && chmod -R u+w %s || :", root, root); run(tc, "rm -rf %s", root); run(tc, "mkdir -p %s", root); run(tc, "cp -pr %s/* %s", src_root, root); run(tc, "chmod -R u+w %s", root); aug = aug_init(root, lensdir, AUG_NO_STDINC); CuAssertPtrNotNull(tc, aug); }
void apr_assert_success(CuTest* tc, const char* context, apr_status_t rv) { if (rv == APR_ENOTIMPL) { CuNotImpl(tc, context); } if (rv != APR_SUCCESS) { char buf[STRING_MAX], ebuf[128]; sprintf(buf, "%s (%d): %s\n", context, rv, apr_strerror(rv, ebuf, sizeof ebuf)); CuFail(tc, buf); } }
void TestFail(CuTest* tc) { jmp_buf buf; int pointReached = 0; CuTest* tc2 = CuTestNew("TestFails", zTestFails); tc2->jumpBuf = &buf; if (setjmp(buf) == 0) { CuFail(tc2, "hello world"); pointReached = 1; } CuAssert(tc, "point was not reached", pointReached == 0); }
static void test_ev_watcher_new(CuTest *tc) { const char *err = "client.c ev_watcher_new FAIL"; struct ev_io *e1, *e2; int max = STATIC_ALLOC_CLIENTS; int middle = max / 2; int i, j; if (STATIC_ALLOC_CLIENTS % 2 == 1) { CuFail(tc, "client.c ev_watcher_new FAIL -- " "rerun with even number of clients allocated"); } for (i = 0; i < max; ++i) { e1 = ev_watcher_new(); if (i == middle - 1) { //printf("Freeing ev_io watcher %d\n", i); ev_watcher_free(e1); e1 = NULL; } } /* * Here we reacquire a pointer to the single ev_io struct that * was freed in the loop above. * We then free this again, and then acquire it again to make * sure that every single structure is checked before the * function returns NULL. * This means that e1 == e2, as we're reacquiring the same * ev_io struct. */ e1 = ev_watcher_new(); ev_watcher_free(e1); e2 = ev_watcher_new(); CuAssertPtrEquals_Msg(tc, err, e1, e2); /* * At this stage, all of the ev_io structures have been * allocated. * The function should loop over everything, and then return * NULL to indicate that there is no memory left. */ e1 = ev_watcher_new(); CuAssertPtrEquals_Msg(tc, err, NULL, e1); #if UNIT_TESTING_VERBOSITY_LEVEL >= 1 printf("client.c ev_watcher_new PASS\n"); #endif }
static void test_world_player_foreach(CuTest *tc) { const char *err = "world.c PLAYER_FOREACH macro FAIL"; const char *username = "******"; int max = MAX_PLAYERS; int mid = max / 2; player_t *player; player_t *plist[max]; int i; if (max % 2 == 1) { CuFail(tc, "world.c PLAYER_FOREACH macro FAIL -- " "Rerun tests with even number of max players"); } for (i = 0; i < max; ++i) { player = get_unused_player_slot(); CuAssertIntEquals_Msg(tc, err, i + 1, player->index); player->username = username; if (i == mid - 1) { remove_player(player); continue; } plist[i] = player; } i = 0; player = NULL; PLAYER_LIST_FOREACH(player) { if (player->index == UNUSED) { ++i; continue; } CuAssertPtrEquals_Msg(tc, err, plist[i++], player); } player = get_unused_player_slot(); CuAssertIntEquals_Msg(tc, err, mid, player->index); player = get_unused_player_slot(); CuAssertPtrEquals_Msg(tc, err, NULL, player); #if UNIT_TESTING_VERBOSITY_LEVEL >= 1 printf("world.c PLAYER_FOREACH macro PASS\n"); #endif }
/// TestBooleanScorer.java, ported 5/9/2009 void testBooleanScorer(CuTest *tc) { const TCHAR* FIELD = _T("category"); RAMDirectory directory; TCHAR* values[] = { _T("1"), _T("2"), _T("3"), _T("4"), NULL}; try { WhitespaceAnalyzer a; IndexWriter* writer = _CLNEW IndexWriter(&directory, &a, true); for (size_t i = 0; values[i]!=NULL; i++) { Document* doc = _CLNEW Document(); doc->add(*_CLNEW Field(FIELD, values[i], Field::STORE_YES | Field::INDEX_TOKENIZED)); writer->addDocument(doc); _CLLDELETE(doc); } writer->close(); _CLLDELETE(writer); BooleanQuery* booleanQuery1 = _CLNEW BooleanQuery(); Term *t = _CLNEW Term(FIELD, _T("1")); booleanQuery1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); _CLDECDELETE(t); t = _CLNEW Term(FIELD, _T("2")); booleanQuery1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); _CLDECDELETE(t); BooleanQuery* query = _CLNEW BooleanQuery(); query->add(booleanQuery1, true, BooleanClause::MUST); t = _CLNEW Term(FIELD, _T("9")); query->add(_CLNEW TermQuery(t), true, BooleanClause::MUST_NOT); _CLDECDELETE(t); IndexSearcher *indexSearcher = _CLNEW IndexSearcher(&directory); Hits *hits = indexSearcher->search(query); CLUCENE_ASSERT(2 == hits->length()); // Number of matched documents _CLLDELETE(hits); _CLLDELETE(indexSearcher); _CLLDELETE(query); } catch (CLuceneError& e) { CuFail(tc, e.twhat()); } }
void checkData(CuTest *tc, struct Data* data, time_t ts, int dr, char* ad, int dl, int ul, char* hs) { if (data == NULL){ CuFail(tc, "struct Data* was NULL"); } else { CuAssertIntEquals(tc, ts, data->ts); CuAssertIntEquals(tc, dr, data->dr); if (ad == NULL){ CuAssertTrue(tc, data->ad == NULL); } else { CuAssertStrEquals(tc, ad, data->ad); } if (hs == NULL){ CuAssertTrue(tc, data->hs == NULL); } else { CuAssertStrEquals(tc, hs, data->hs); } CuAssertIntEquals(tc, (BW_INT)dl, data->dl); CuAssertIntEquals(tc, (BW_INT)ul, data->ul); } }
static void TestFIA_CentroidTest(CuTest* tc) { const char *file= TEST_DATA_DIR "drone-bee-greyscale.jpg"; FIBITMAP *dib = FIA_LoadFIBFromFile(file); CuAssertTrue(tc, dib != NULL); PROFILE_START("FreeImageAlgorithms_StatisticReport"); float x_centroid, y_centroid; if (FIA_Centroid(dib, &x_centroid, &y_centroid) == FIA_ERROR) { CuFail(tc, "Failed"); } PROFILE_STOP("FreeImageAlgorithms_StatisticReport"); FreeImage_Unload(dib); }
static void TestFIA_HistogramTest(CuTest* tc) { const char *file= TEST_DATA_DIR "drone-bee-greyscale.jpg"; FIBITMAP *dib = FIA_LoadFIBFromFile(file); CuAssertTrue(tc, dib != NULL); unsigned long hist[256]; PROFILE_START("FreeImageAlgorithms_Histogram"); if (FIA_Histogram(dib, 0, 255, 2, hist) == FIA_ERROR) { CuFail(tc, "Failed"); } PROFILE_STOP("FreeImageAlgorithms_Histogram"); FreeImage_Unload(dib); }
// setup the index void testRAMDirectorySetUp (CuTest *tc) { if (strlen(cl_tempDir) + 13 > CL_MAX_PATH) CuFail(tc, _T("Not enough space in indexDir buffer")); sprintf(indexDir, "%s/RAMDirIndex", cl_tempDir); WhitespaceAnalyzer analyzer; IndexWriter * writer = new IndexWriter(indexDir, &analyzer, true); // add some documents TCHAR * text; for (int i = 0; i < docsToAdd; i++) { Document doc; text = English::IntToEnglish(i); doc.add(* new Field(_T("content"), text, Field::STORE_YES | Field::INDEX_UNTOKENIZED)); writer->addDocument(&doc); _CLDELETE_ARRAY(text); } CuAssertEquals(tc, docsToAdd, writer->docCount(), _T("document count")); writer->close(); _CLDELETE( writer ); }
void test_wcslib_equals_tan(CuTest* tc) { #ifndef WCSLIB_EXISTS printf("\n\nWarning, WCSLIB support was not compiled in, so no WCSLIB functionality will be tested.\n\n\n"); return; #endif anwcs_t* anwcs = NULL; tan_t* tan; char* tmpfile = create_temp_file("test-anwcs-wcs", "/tmp"); double x, y, x2, y2, ra, dec, ra2, dec2; int ok, ok2; int i; // from http://live.astrometry.net/status.php?job=alpha-201004-29242410 // test-anwcs-1.wcs const char* wcsliteral = "SIMPLE = T / Standard FITS file BITPIX = 8 / ASCII or bytes array NAXIS = 0 / Minimal header EXTEND = T / There may be FITS ext CTYPE1 = 'RA---TAN' / TAN (gnomic) projection CTYPE2 = 'DEC--TAN' / TAN (gnomic) projection WCSAXES = 2 / no comment EQUINOX = 2000.0 / Equatorial coordinates definition (yr) LONPOLE = 180.0 / no comment LATPOLE = 0.0 / no comment CRVAL1 = 83.7131676182 / RA of reference point CRVAL2 = -5.10104333945 / DEC of reference point CRPIX1 = 221.593284607 / X reference pixel CRPIX2 = 169.655508041 / Y reference pixel CUNIT1 = 'deg ' / X pixel scale units CUNIT2 = 'deg ' / Y pixel scale units CD1_1 = 1.55258090814E-06 / Transformation matrix CD1_2 = 0.00081692280013 / no comment CD2_1 = -0.00081692280013 / no comment CD2_2 = 1.55258090814E-06 / no comment IMAGEW = 900 / Image width, in pixels. IMAGEH = 600 / Image height, in pixels. DATE = '2010-04-14T12:12:18' / Date this file was created. HISTORY Created by the Astrometry.net suite. HISTORY For more details, see http://astrometry.net . HISTORY Subversion URL HISTORY http://astrometry.net/svn/branches/astrometry/alpha/quads/ HISTORY Subversion revision 5409 HISTORY Subversion date 2007-10-09 13:49:13 -0400 (Tue, 09 Oct HISTORY 2007) HISTORY This WCS header was created by the program \"blind\". COMMENT -- blind solver parameters: -- COMMENT Index(0): /data1/INDEXES/200/index-219 COMMENT Index(1): /data1/INDEXES/200/index-218 COMMENT Index(2): /data1/INDEXES/200/index-217 COMMENT Index(3): /data1/INDEXES/200/index-216 COMMENT Index(4): /data1/INDEXES/200/index-215 COMMENT Index(5): /data1/INDEXES/200/index-214 COMMENT Index(6): /data1/INDEXES/200/index-213 COMMENT Index(7): /data1/INDEXES/200/index-212 COMMENT Index(8): /data1/INDEXES/200/index-211 COMMENT Index(9): /data1/INDEXES/200/index-210 COMMENT Index(10): /data1/INDEXES/200/index-209 COMMENT Index(11): /data1/INDEXES/200/index-208 COMMENT Index(12): /data1/INDEXES/200/index-207 COMMENT Index(13): /data1/INDEXES/200/index-206 COMMENT Index(14): /data1/INDEXES/200/index-205 COMMENT Index(15): /data1/INDEXES/200/index-204-00 COMMENT Index(16): /data1/INDEXES/200/index-204-01 COMMENT Index(17): /data1/INDEXES/200/index-204-02 COMMENT Index(18): /data1/INDEXES/200/index-204-03 COMMENT Index(19): /data1/INDEXES/200/index-204-04 COMMENT Index(20): /data1/INDEXES/200/index-204-05 COMMENT Index(21): /data1/INDEXES/200/index-204-06 COMMENT Index(22): /data1/INDEXES/200/index-204-07 COMMENT Index(23): /data1/INDEXES/200/index-204-08 COMMENT Index(24): /data1/INDEXES/200/index-204-09 COMMENT Index(25): /data1/INDEXES/200/index-204-10 COMMENT Index(26): /data1/INDEXES/200/index-204-11 COMMENT Index(27): /data1/INDEXES/200/index-203-00 COMMENT Index(28): /data1/INDEXES/200/index-203-01 COMMENT Index(29): /data1/INDEXES/200/index-203-02 COMMENT Index(30): /data1/INDEXES/200/index-203-03 COMMENT Index(31): /data1/INDEXES/200/index-203-04 COMMENT Index(32): /data1/INDEXES/200/index-203-05 COMMENT Index(33): /data1/INDEXES/200/index-203-06 COMMENT Index(34): /data1/INDEXES/200/index-203-07 COMMENT Index(35): /data1/INDEXES/200/index-203-08 COMMENT Index(36): /data1/INDEXES/200/index-203-09 COMMENT Index(37): /data1/INDEXES/200/index-203-10 COMMENT Index(38): /data1/INDEXES/200/index-203-11 COMMENT Index(39): /data1/INDEXES/200/index-202-00 COMMENT Index(40): /data1/INDEXES/200/index-202-01 COMMENT Index(41): /data1/INDEXES/200/index-202-02 COMMENT Index(42): /data1/INDEXES/200/index-202-03 COMMENT Index(43): /data1/INDEXES/200/index-202-04 COMMENT Index(44): /data1/INDEXES/200/index-202-05 COMMENT Index(45): /data1/INDEXES/200/index-202-06 COMMENT Index(46): /data1/INDEXES/200/index-202-07 COMMENT Index(47): /data1/INDEXES/200/index-202-08 COMMENT Index(48): /data1/INDEXES/200/index-202-09 COMMENT Index(49): /data1/INDEXES/200/index-202-10 COMMENT Index(50): /data1/INDEXES/200/index-202-11 COMMENT Index(51): /data1/INDEXES/200/index-201-00 COMMENT Index(52): /data1/INDEXES/200/index-201-01 COMMENT Index(53): /data1/INDEXES/200/index-201-02 COMMENT Index(54): /data1/INDEXES/200/index-201-03 COMMENT Index(55): /data1/INDEXES/200/index-201-04 COMMENT Index(56): /data1/INDEXES/200/index-201-05 COMMENT Index(57): /data1/INDEXES/200/index-201-06 COMMENT Index(58): /data1/INDEXES/200/index-201-07 COMMENT Index(59): /data1/INDEXES/200/index-201-08 COMMENT Index(60): /data1/INDEXES/200/index-201-09 COMMENT Index(61): /data1/INDEXES/200/index-201-10 COMMENT Index(62): /data1/INDEXES/200/index-201-11 COMMENT Index(63): /data1/INDEXES/200/index-200-00 COMMENT Index(64): /data1/INDEXES/200/index-200-01 COMMENT Index(65): /data1/INDEXES/200/index-200-02 COMMENT Index(66): /data1/INDEXES/200/index-200-03 COMMENT Index(67): /data1/INDEXES/200/index-200-04 COMMENT Index(68): /data1/INDEXES/200/index-200-05 COMMENT Index(69): /data1/INDEXES/200/index-200-06 COMMENT Index(70): /data1/INDEXES/200/index-200-07 COMMENT Index(71): /data1/INDEXES/200/index-200-08 COMMENT Index(72): /data1/INDEXES/200/index-200-09 COMMENT Index(73): /data1/INDEXES/200/index-200-10 COMMENT Index(74): /data1/INDEXES/200/index-200-11 COMMENT Field name: field.xy.fits COMMENT Field scale lower: 0.4 arcsec/pixel COMMENT Field scale upper: 720 arcsec/pixel COMMENT X col name: X COMMENT Y col name: Y COMMENT Start obj: 0 COMMENT End obj: 200 COMMENT Solved_in: solved COMMENT Solved_out: solved COMMENT Solvedserver: (null) COMMENT Parity: 2 COMMENT Codetol: 0.01 COMMENT Verify distance: 0 arcsec COMMENT Verify pixels: 1 pix COMMENT Maxquads: 0 COMMENT Maxmatches: 0 COMMENT Cpu limit: 0 s COMMENT Time limit: 0 s COMMENT Total time limit: 0 s COMMENT Total CPU limit: 600 s COMMENT Tweak: no COMMENT -- COMMENT -- properties of the matching quad: -- COMMENT quadno: 686636 COMMENT stars: 1095617,1095660,1095623,1095618 COMMENT field: 6,5,24,35 COMMENT code error: 0.00868071 COMMENT noverlap: 42 COMMENT nconflict: 1 COMMENT nfield: 88 COMMENT nindex: 139 COMMENT scale: 2.94093 arcsec/pix COMMENT parity: 1 COMMENT quads tried: 2166080 COMMENT quads matched: 2079562 COMMENT quads verified: 1747182 COMMENT objs tried: 0 COMMENT cpu time: 117.82 COMMENT -- AN_JOBID= 'alpha-201004-29242410' / Astrometry.net job ID END "; if (write_file(tmpfile, wcsliteral, strlen(wcsliteral))) { ERROR("Failed to write WCS to temp file %s", tmpfile); CuFail(tc, "failed to write WCS to temp file"); } tan = tan_read_header_file(tmpfile, NULL); CuAssertPtrNotNull(tc, tan); for (i=0; i<2; i++) { if (i == 0) { anwcs = anwcs_open_wcslib(tmpfile, 0); } else if (i == 1) { anwcs = anwcs_open_sip(tmpfile, 0); } CuAssertPtrNotNull(tc, anwcs); /* printf("ANWCS:\n"); anwcs_print(anwcs, stdout); printf("TAN:\n"); tan_print_to(tan, stdout); */ /* this wcs has: crval=(83.7132, -5.10104) crpix=(221.593, 169.656) CD = ( 1.5526e-06 0.00081692 ) ( -0.00081692 1.5526e-06 ) */ // check crval <-> crpix. x = tan->crpix[0]; y = tan->crpix[1]; ra = 1; ra2 = 2; dec = 3; dec2 = 4; tan_pixelxy2radec(tan, x, y, &ra, &dec); CuAssertDblEquals(tc, tan->crval[0], ra, 1e-6); CuAssertDblEquals(tc, tan->crval[1], dec, 1e-6); ok = anwcs_pixelxy2radec(anwcs, x, y, &ra2, &dec2); CuAssertIntEquals(tc, 0, ok); CuAssertDblEquals(tc, tan->crval[0], ra2, 1e-6); CuAssertDblEquals(tc, tan->crval[1], dec2, 1e-6); ra = tan->crval[0]; dec = tan->crval[1]; x = 1; x2 = 2; y = 3; y2 = 4; ok = tan_radec2pixelxy(tan, ra, dec, &x, &y); CuAssertIntEquals(tc, TRUE, ok); CuAssertDblEquals(tc, tan->crpix[0], x, 1e-6); CuAssertDblEquals(tc, tan->crpix[1], y, 1e-6); ok2 = anwcs_radec2pixelxy(anwcs, ra, dec, &x2, &y2); CuAssertIntEquals(tc, 0, ok2); CuAssertDblEquals(tc, tan->crpix[0], x2, 1e-6); CuAssertDblEquals(tc, tan->crpix[1], y2, 1e-6); // check pixel (0,0). x = y = 0.0; ra = 1; ra2 = 2; dec = 3; dec2 = 4; tan_pixelxy2radec(tan, x, y, &ra, &dec); ok = anwcs_pixelxy2radec(anwcs, x, y, &ra2, &dec2); CuAssertIntEquals(tc, 0, ok); CuAssertDblEquals(tc, ra, ra2, 1e-6); CuAssertDblEquals(tc, dec, dec2, 1e-6); // check RA,Dec (85, -4) ra = 85; dec = -4; x = 1; x2 = 2; y = 3; y2 = 4; ok = tan_radec2pixelxy(tan, ra, dec, &x, &y); CuAssertIntEquals(tc, TRUE, ok); ok2 = anwcs_radec2pixelxy(anwcs, ra, dec, &x2, &y2); CuAssertIntEquals(tc, 0, ok2); printf("x,y (%g,%g) vs (%g,%g)\n", x, y, x2, y2); CuAssertDblEquals(tc, x, x2, 1e-6); CuAssertDblEquals(tc, y, y2, 1e-6); anwcs_free(anwcs); } free(tan); }
/// TestBooleanPrefixQuery.java, ported 5/9/2009 void testBooleanPrefixQuery(CuTest* tc) { RAMDirectory directory; WhitespaceAnalyzer a; TCHAR* categories[] = {_T("food"), _T("foodanddrink"), _T("foodanddrinkandgoodtimes"), _T("food and drink"), NULL}; Query* rw1 = NULL; Query* rw2 = NULL; try { IndexWriter* writer = _CLNEW IndexWriter(&directory, &a, true); for (size_t i = 0; categories[i]!=NULL; i++) { Document* doc = new Document(); doc->add(*_CLNEW Field(_T("category"), categories[i], Field::STORE_YES | Field::INDEX_UNTOKENIZED)); writer->addDocument(doc); _CLLDELETE(doc); } writer->close(); _CLLDELETE(writer); IndexReader* reader = IndexReader::open(&directory); Term* t = _CLNEW Term(_T("category"), _T("foo")); PrefixQuery* query = _CLNEW PrefixQuery(t); _CLDECDELETE(t); rw1 = query->rewrite(reader); BooleanQuery* bq = _CLNEW BooleanQuery(); bq->add(query, true, BooleanClause::MUST); rw2 = bq->rewrite(reader); reader->close(); // TODO: check necessity (_CLLDELETE(reader) alone will not do the same cleanup) _CLLDELETE(reader); _CLLDELETE(bq); } catch (CLuceneError& e) { CuFail(tc, e.twhat()); } BooleanQuery* bq1 = NULL; if (rw1->instanceOf(BooleanQuery::getClassName())) { bq1 = (BooleanQuery*) rw1; } BooleanQuery* bq2 = NULL; if (rw2->instanceOf(BooleanQuery::getClassName())) { bq2 = (BooleanQuery*) rw2; } else { CuFail(tc, _T("Rewrite")); } bool bClausesMatch = bq1->getClauseCount() == bq2->getClauseCount(); _CLLDELETE(rw1); _CLLDELETE(rw2); if (!bClausesMatch) { CuFail(tc, _T("Number of Clauses Mismatch")); } }
void test_solve_multiindex(CuTest* ct) { sl* fns; multiindex_t* mi; int i; solver_t* s = NULL; starxy_t* field = NULL; MatchObj* mo = NULL; xylist_t* xy = NULL; log_init(LOG_VERB); fns = sl_new(4); sl_append(fns, "../util/t10.ind"); sl_append(fns, "../util/t11.ind"); sl_append(fns, "../util/t12.ind"); mi = multiindex_open("../util/t10.skdt", fns, 0); printf("Got %i indices\n", multiindex_n(mi)); for (i=0; i<multiindex_n(mi); i++) { index_t* ind = multiindex_get(mi, i); printf(" %i: %s, %i stars, %i quads (%g to %g arcmin)\n", i, ind->indexname, index_nquads(ind), index_nstars(ind), ind->index_scale_lower/60., ind->index_scale_upper/60.); } s = solver_new(); // 10.8 s->funits_lower = 5.0; s->funits_upper = 15.0; xy = xylist_open("../util/t1.xy"); if (!xy) { ERROR("Failed to open xylist\n"); CuFail(ct, "xylist"); } field = xylist_read_field(xy, NULL); solver_set_field(s, field); solver_set_field_bounds(s, 0, 1000, 0, 1000); for (i=0; i<multiindex_n(mi); i++) { index_t* ind = multiindex_get(mi, i); solver_add_index(s, ind); } solver_run(s); if (solver_did_solve(s)) { mo = solver_get_best_match(s); matchobj_print(mo, LOG_MSG); // HACK -- ugly!! verify_free_matchobj(mo); } xylist_close(xy); solver_cleanup_field(s); solver_free(s); multiindex_free(mi); sl_free2(fns); }
/* Tests the loading/dumping of PageInfo from and into LMDB values */ void test_page_info_serialization(CuTest *tc) { printf("%s\n", __func__); MDB_val val; PageInfo pi1 = { .url = "test_url_123", .first_crawl = 123, .last_crawl = 456, .n_changes = 100, .n_crawls = 20, .score = 0.7, .content_hash_length = 8, .content_hash = "1234567" }; CuAssertTrue(tc, page_info_dump(&pi1, &val) == 0); CuAssertDblEquals(tc, 0.7, page_info_dump_get_score(&val), 1e-6); PageInfo *pi2 = page_info_load(&val); CuAssertPtrNotNull(tc, pi2); free(val.mv_data); CuAssertStrEquals(tc, pi1.url, pi2->url); CuAssertTrue(tc, pi1.first_crawl == pi2->first_crawl); CuAssertTrue(tc, pi1.last_crawl == pi2->last_crawl); CuAssertTrue(tc, pi1.n_changes == pi2->n_changes); CuAssertTrue(tc, pi1.n_crawls == pi2->n_crawls); CuAssertTrue(tc, pi1.score == pi2->score); CuAssertTrue(tc, pi1.content_hash_length == pi2->content_hash_length); CuAssertStrEquals(tc, pi1.content_hash, pi2->content_hash); page_info_delete(pi2); } /* Tests all the database operations on a very simple crawl of just two pages */ void test_page_db_simple(CuTest *tc) { printf("%s\n", __func__); char test_dir[] = "test-pagedb-XXXXXX"; mkdtemp(test_dir); PageDB *db; int ret = page_db_new(&db, test_dir); CuAssert(tc, db!=0? db->error->message: "NULL", ret == 0); db->persist = 0; CrawledPage *cp1 = crawled_page_new("www.yahoo.com"); crawled_page_add_link(cp1, "a", 0.1); crawled_page_add_link(cp1, "b", 0.2); crawled_page_add_link(cp1, "www.google.com", 0.3); crawled_page_set_hash64(cp1, 1000); cp1->score = 0.5; CrawledPage *cp2 = crawled_page_new("www.bing.com"); crawled_page_add_link(cp2, "x", 1.1); crawled_page_add_link(cp2, "y", 1.2); crawled_page_set_hash64(cp2, 2000); cp2->score = 0.2; PageInfoList *pil; CuAssert(tc, db->error->message, page_db_add(db, cp1, &pil) == 0); page_info_list_delete(pil); CuAssert(tc, db->error->message, page_db_add(db, cp2, &pil) == 0); page_info_list_delete(pil); crawled_page_set_hash64(cp2, 3000); CuAssert(tc, db->error->message, page_db_add(db, cp2, &pil) == 0); page_info_list_delete(pil); MMapArray *scores = 0; CuAssert(tc, db->error->message, page_db_get_scores(db, &scores) == 0); size_t idx; CuAssert(tc, db->error->message, page_db_get_idx(db, page_db_hash("www.yahoo.com"), &idx) == 0); CuAssertDblEquals( tc, 0.5, *(float*)mmap_array_idx(scores, idx), 1e-6); CuAssert(tc, db->error->message, page_db_get_idx(db, page_db_hash("x"), &idx) == 0); CuAssertDblEquals( tc, 1.1, *(float*)mmap_array_idx(scores, idx), 1e-6); CHECK_DELETE(tc, scores->error->message, mmap_array_delete(scores)); crawled_page_delete(cp1); crawled_page_delete(cp2); char pi_out[1000]; char *print_pages[] = {"www.yahoo.com", "www.google.com", "www.bing.com"}; for (size_t i=0; i<3; ++i) { PageInfo *pi; CuAssert(tc, db->error->message, page_db_get_info(db, page_db_hash(print_pages[i]), &pi) == 0); CuAssertPtrNotNull(tc, pi); switch(i) { case 0: CuAssertIntEquals(tc, 1, pi->n_crawls); CuAssertIntEquals(tc, 0, pi->n_changes); break; case 1: CuAssertIntEquals(tc, 0, pi->n_crawls); break; case 2: CuAssertIntEquals(tc, 2, pi->n_crawls); CuAssertIntEquals(tc, 1, pi->n_changes); break; } page_info_print(pi, pi_out); page_info_delete(pi); /* show on screen the page info: * * Mon Apr 6 15:34:50 2015|Mon Apr 6 15:34:50 2015|1.00e+00|0.00e+00|www.yahoo.com * Thu Jan 1 01:00:00 1970|Thu Jan 1 01:00:00 1970|0.00e+00|0.00e+00|www.google.com * Mon Apr 6 15:34:50 2015|Mon Apr 6 15:34:50 2015|2.00e+00|1.00e+00|www.bing.com */ #if 0 printf("%s\n", pi_out); #endif } PageDBLinkStream *es; CuAssert(tc, db->error->message, page_db_link_stream_new(&es, db) == 0); es->only_diff_domain = 0; if (es->state == stream_state_init) { Link link; int i=0; while (page_db_link_stream_next(es, &link) == stream_state_next) { switch(i++) { case 0: CuAssertIntEquals(tc, 0, link.from); CuAssertIntEquals(tc, 1, link.to); break; case 1: CuAssertIntEquals(tc, 0, link.from); CuAssertIntEquals(tc, 2, link.to); break; case 2: CuAssertIntEquals(tc, 0, link.from); CuAssertIntEquals(tc, 3, link.to); break; case 3: CuAssertIntEquals(tc, 4, link.from); CuAssertIntEquals(tc, 5, link.to); break; case 4: CuAssertIntEquals(tc, 4, link.from); CuAssertIntEquals(tc, 6, link.to); break; default: CuFail(tc, "too many links"); break; } } CuAssertTrue(tc, es->state != stream_state_error); } page_db_link_stream_delete(es); page_db_delete(db); }
void test_hashidx_stream(CuTest *tc) { printf("%s\n", __func__); char test_dir[] = "test-pagedb-XXXXXX"; mkdtemp(test_dir); PageDB *db; int ret = page_db_new(&db, test_dir); CuAssert(tc, db!=0? db->error->message: "NULL", ret == 0); db->persist = 0; CrawledPage *cp = crawled_page_new("1"); crawled_page_add_link(cp, "a", 0); crawled_page_add_link(cp, "b", 0); CuAssert(tc, db->error->message, page_db_add(db, cp, 0) == 0); crawled_page_delete(cp); cp = crawled_page_new("2"); crawled_page_add_link(cp, "c", 0); crawled_page_add_link(cp, "d", 0); CuAssert(tc, db->error->message, page_db_add(db, cp, 0) == 0); crawled_page_delete(cp); HashIdxStream *stream; CuAssert(tc, db->error->message, hashidx_stream_new(&stream, db) == 0); CuAssert(tc, "stream was not initialized", stream->state == stream_state_init); uint64_t hash; size_t idx; uint64_t expected_hash[] = { page_db_hash("1"), page_db_hash("a"), page_db_hash("b"), page_db_hash("2"), page_db_hash("c"), page_db_hash("d") }; for (int i=0; i<6; ++i) { CuAssert(tc, "stream element expected", hashidx_stream_next(stream, &hash, &idx) == stream_state_next); if (idx > 5) CuFail(tc, "unexpected index"); CuAssert(tc, "mismatch between index and hash", hash == expected_hash[idx]); } hashidx_stream_delete(stream); page_db_delete(db); }