Mailing List Archive

r3821 - in trunk: c_src/KinoSearch/Test perl/lib/KinoSearch/Test perl/t
Author: creamyg
Date: 2008-09-05 23:12:52 -0700 (Fri, 05 Sep 2008)
New Revision: 3821

Modified:
trunk/c_src/KinoSearch/Test/TestQueryParserSyntax.bp
trunk/c_src/KinoSearch/Test/TestQueryParserSyntax.c
trunk/perl/lib/KinoSearch/Test/TestQueryParserSyntax.pm
trunk/perl/t/611-queryparser_syntax.t
Log:
Port more of QueryParser syntax testing to C, actually generating TAP from C.


Modified: trunk/c_src/KinoSearch/Test/TestQueryParserSyntax.bp
===================================================================
--- trunk/c_src/KinoSearch/Test/TestQueryParserSyntax.bp 2008-09-06 05:43:42 UTC (rev 3820)
+++ trunk/c_src/KinoSearch/Test/TestQueryParserSyntax.bp 2008-09-06 06:12:52 UTC (rev 3821)
@@ -4,11 +4,8 @@
*/

static class KinoSearch::Test::TestQueryParserSyntax cnick TestQPSyntax {
- static incremented VArray*
- leaf_tests();
-
- static incremented VArray*
- syntax_tests();
+ static void
+ run_tests(InvIndex *invindex);
}

/* Copyright 2005-2008 Marvin Humphrey

Modified: trunk/c_src/KinoSearch/Test/TestQueryParserSyntax.c
===================================================================
--- trunk/c_src/KinoSearch/Test/TestQueryParserSyntax.c 2008-09-06 05:43:42 UTC (rev 3820)
+++ trunk/c_src/KinoSearch/Test/TestQueryParserSyntax.c 2008-09-06 06:12:52 UTC (rev 3821)
@@ -2,8 +2,15 @@
#include <stdarg.h>
#include <string.h>

+#define CHAZ_USE_SHORT_NAMES
+#include "Charmonizer/Test.h"
+
#include "KinoSearch/Test/TestQueryParserSyntax.h"
#include "KinoSearch/Test/TestQueryParser.h"
+#include "KinoSearch/InvIndex.h"
+#include "KinoSearch/QueryParser.h"
+#include "KinoSearch/Searcher.h"
+#include "KinoSearch/Search/Hits.h"
#include "KinoSearch/Search/TermQuery.h"
#include "KinoSearch/Search/PhraseQuery.h"
#include "KinoSearch/Search/LeafQuery.h"
@@ -171,47 +178,88 @@

/***************************************************************************/

-VArray*
-TestQPSyntax_leaf_tests()
+typedef TestQueryParser*
+(*kino_TestQPSyntax_test_t)();
+
+static kino_TestQPSyntax_test_t leaf_test_funcs[] = {
+ leaf_test_simple_term,
+ leaf_test_simple_phrase,
+ leaf_test_unclosed_quote,
+ leaf_test_single_term_phrase,
+ leaf_test_longer_phrase,
+ leaf_test_empty_phrase,
+ leaf_test_different_tokenization,
+ leaf_test_phrase_with_stopwords,
+ leaf_test_http,
+ leaf_test_field,
+ leaf_test_unrecognized_field,
+ NULL
+};
+
+static kino_TestQPSyntax_test_t syntax_test_funcs[] = {
+ syntax_test_minus_plus,
+ syntax_test_plus_minus,
+ syntax_test_minus_minus,
+ syntax_test_not_minus,
+ syntax_test_not_plus,
+ syntax_test_unclosed_parens,
+ NULL
+};
+
+void
+TestQPSyntax_run_tests(InvIndex *invindex)
{
- VArray *tests = VA_new(20);
u32_t i;
+ TestBatch *batch = Test_new_batch("TestQueryParserSyntax", 45, NULL);
+ Searcher *searcher = Searcher_new(invindex, NULL);
+ QueryParser *qparser = QParser_new(InvIndex_Get_Schema(invindex),
+ NULL, NULL, NULL);
+ QParser_Set_Heed_Colons(qparser, true);

- VA_Push(tests, (Obj*)leaf_test_simple_term());
- VA_Push(tests, (Obj*)leaf_test_simple_phrase());
- VA_Push(tests, (Obj*)leaf_test_unclosed_quote());
- VA_Push(tests, (Obj*)leaf_test_single_term_phrase());
- VA_Push(tests, (Obj*)leaf_test_longer_phrase());
- VA_Push(tests, (Obj*)leaf_test_empty_phrase());
- VA_Push(tests, (Obj*)leaf_test_different_tokenization());
- VA_Push(tests, (Obj*)leaf_test_phrase_with_stopwords());
- VA_Push(tests, (Obj*)leaf_test_http());
- VA_Push(tests, (Obj*)leaf_test_field());
- VA_Push(tests, (Obj*)leaf_test_unrecognized_field());
+ /* FIXME!! This is cheap substitute for plan(). */
+ printf("1..%u\n", batch->num_tests);

- for (i = 0; i < tests->size; i++) {
- Obj_Dec_RefCount(VA_Fetch(tests, i));
+ for (i = 0; leaf_test_funcs[i] != NULL; i++) {
+ kino_TestQPSyntax_test_t test_func = leaf_test_funcs[i];
+ TestQueryParser *test_case = test_func(i);
+ Query *tree = QParser_Tree(qparser, test_case->query_string);
+ Query *expanded = QParser_Expand_Leaf(qparser, test_case->tree);
+ Query *parsed = QParser_Parse(qparser, test_case->query_string);
+ Hits *hits
+ = Searcher_Search(searcher, (Obj*)parsed, 0, 10, NULL);
+
+ ASSERT_TRUE(batch, Query_Equals(tree, (Obj*)test_case->tree),
+ "tree() %s", test_case->query_string->ptr);
+ ASSERT_TRUE(batch, Query_Equals(expanded, (Obj*)test_case->expanded),
+ "expand_leaf() %s", test_case->query_string->ptr);
+ ASSERT_INT_EQ(batch, Hits_Total_Hits(hits), test_case->num_hits,
+ "hits: %s", test_case->query_string->ptr);
+ REFCOUNT_DEC(tree);
+ REFCOUNT_DEC(parsed);
+ REFCOUNT_DEC(hits);
+ REFCOUNT_DEC(test_case);
}
- return tests;
-}

-VArray*
-TestQPSyntax_syntax_tests()
-{
- VArray *tests = VA_new(20);
- u32_t i;
+ for (i = 0; syntax_test_funcs[i] != NULL; i++) {
+ kino_TestQPSyntax_test_t test_func = syntax_test_funcs[i];
+ TestQueryParser *test_case = test_func(i);
+ Query *tree = QParser_Tree(qparser, test_case->query_string);
+ Query *parsed = QParser_Parse(qparser, test_case->query_string);
+ Hits *hits = Searcher_Search(searcher, (Obj*)parsed, 0, 10, NULL);

- VA_Push(tests, (Obj*)syntax_test_minus_plus());
- VA_Push(tests, (Obj*)syntax_test_plus_minus());
- VA_Push(tests, (Obj*)syntax_test_minus_minus());
- VA_Push(tests, (Obj*)syntax_test_not_minus());
- VA_Push(tests, (Obj*)syntax_test_not_plus());
- VA_Push(tests, (Obj*)syntax_test_unclosed_parens());
+ ASSERT_TRUE(batch, Query_Equals(tree, (Obj*)test_case->tree),
+ "tree() %s", test_case->query_string->ptr);
+ ASSERT_INT_EQ(batch, Hits_Total_Hits(hits), test_case->num_hits,
+ "hits: %s", test_case->query_string->ptr);
+ REFCOUNT_DEC(tree);
+ REFCOUNT_DEC(parsed);
+ REFCOUNT_DEC(hits);
+ REFCOUNT_DEC(test_case);
+ }

- for (i = 0; i < tests->size; i++) {
- Obj_Dec_RefCount(VA_Fetch(tests, i));
- }
- return tests;
+ batch->destroy(batch);
+ REFCOUNT_DEC(searcher);
+ REFCOUNT_DEC(qparser);
}

/* Copyright 2005-2008 Marvin Humphrey

Modified: trunk/perl/lib/KinoSearch/Test/TestQueryParserSyntax.pm
===================================================================
--- trunk/perl/lib/KinoSearch/Test/TestQueryParserSyntax.pm 2008-09-06 05:43:42 UTC (rev 3820)
+++ trunk/perl/lib/KinoSearch/Test/TestQueryParserSyntax.pm 2008-09-06 06:12:52 UTC (rev 3821)
@@ -19,18 +19,12 @@

MODULE = KinoSearch PACKAGE = KinoSearch::Test::TestQueryParserSyntax

-SV*
-_leaf_tests()
-CODE:
- KOBJ_TO_SV_NOINC( kino_TestQPSyntax_leaf_tests(), RETVAL );
-OUTPUT: RETVAL
+void
+run_tests(invindex);
+ kino_InvIndex *invindex;
+PPCODE:
+ kino_TestQPSyntax_run_tests(invindex);

-SV*
-_syntax_tests()
-CODE:
- KOBJ_TO_SV_NOINC( kino_TestQPSyntax_syntax_tests(), RETVAL );
-OUTPUT: RETVAL
-
__COPYRIGHT__

Copyright 2005-2008 Marvin Humphrey

Modified: trunk/perl/t/611-queryparser_syntax.t
===================================================================
--- trunk/perl/t/611-queryparser_syntax.t 2008-09-06 05:43:42 UTC (rev 3820)
+++ trunk/perl/t/611-queryparser_syntax.t 2008-09-06 06:12:52 UTC (rev 3821)
@@ -28,15 +28,9 @@
sub analyzer { KinoSearch::Analysis::Tokenizer->new( token_re => qr/\S+/ ) }

package main;
-use Test::More tests => 45;

-use KinoSearch::QueryParser;
-use KinoSearch::InvIndex;
-use KinoSearch::InvIndexer;
-use KinoSearch::Searcher;
-use KinoSearch::Store::RAMFolder;
+use KinoSearch;
use KinoSearch::Test::TestQueryParser qw( doc_set );
-use KinoSearch::Test::TestQueryParserSyntax qw( leaf_tests syntax_tests );

# Build invindex.
my $docs = doc_set();
@@ -56,29 +50,5 @@
}
$invindexer->finish;

-my $qparser = KinoSearch::QueryParser->new( schema => $schema, );
-$qparser->set_heed_colons(1);
-my $searcher = KinoSearch::Searcher->new( invindex => $invindex );
+KinoSearch::Test::TestQueryParserSyntax::run_tests($invindex);

-my $leaf_test_cases = leaf_tests();
-for my $case (@$leaf_test_cases) {
- my $qstring = $case->get_query_string;
- my $tree = $qparser->tree($qstring);
- my $expanded = $qparser->expand_leaf( $case->get_tree );
- ok( $tree->equals( $case->get_tree ), "tree() $qstring" );
- ok( $expanded->equals( $case->get_expanded ),
- "expand_leaf() $qstring" );
- my $parsed = $qparser->parse($qstring);
- my $hits = $searcher->search( query => $parsed );
- is( $hits->total_hits, $case->get_num_hits, "hits: $qstring" );
-}
-
-my $syntax_test_cases = syntax_tests();
-for my $case (@$syntax_test_cases) {
- my $qstring = $case->get_query_string;
- my $tree = $qparser->tree($qstring);
- ok( $tree->equals( $case->get_tree ), "tree() $qstring" );
- my $parsed = $qparser->parse($qstring);
- my $hits = $searcher->search( query => $parsed );
- is( $hits->total_hits, $case->get_num_hits, "hits: $qstring" );
-}


_______________________________________________
kinosearch-commits mailing list
kinosearch-commits@rectangular.com
http://www.rectangular.com/mailman/listinfo/kinosearch-commits