Mailing List Archive

r3834 - in trunk: c_src/KinoSearch/Test perl/lib/KinoSearch perl/t
Author: creamyg
Date: 2008-09-06 22:44:42 -0700 (Sat, 06 Sep 2008)
New Revision: 3834

Modified:
trunk/c_src/KinoSearch/Test/TestQueryParserLogic.bp
trunk/c_src/KinoSearch/Test/TestQueryParserLogic.c
trunk/perl/lib/KinoSearch/Test.pm
trunk/perl/t/610-queryparser_logic.t
Log:
Create the InvIndex used by the TestQueryParserLogic tests entirely from C.
This is our first all-C dynamic subclass of Schema (or any other class).


Modified: trunk/c_src/KinoSearch/Test/TestQueryParserLogic.bp
===================================================================
--- trunk/c_src/KinoSearch/Test/TestQueryParserLogic.bp 2008-09-07 05:41:34 UTC (rev 3833)
+++ trunk/c_src/KinoSearch/Test/TestQueryParserLogic.bp 2008-09-07 05:44:42 UTC (rev 3834)
@@ -5,7 +5,7 @@

static class KinoSearch::Test::TestQueryParserLogic cnick TestQPLogic {
static void
- run_tests(InvIndex *invindex);
+ run_tests();
}

/* Copyright 2005-2008 Marvin Humphrey

Modified: trunk/c_src/KinoSearch/Test/TestQueryParserLogic.c
===================================================================
--- trunk/c_src/KinoSearch/Test/TestQueryParserLogic.c 2008-09-07 05:41:34 UTC (rev 3833)
+++ trunk/c_src/KinoSearch/Test/TestQueryParserLogic.c 2008-09-07 05:44:42 UTC (rev 3834)
@@ -7,8 +7,14 @@

#include "KinoSearch/Test/TestQueryParserLogic.h"
#include "KinoSearch/Test/TestQueryParser.h"
+#include "KinoSearch/Analysis/Analyzer.h"
+#include "KinoSearch/Analysis/Tokenizer.h"
+#include "KinoSearch/Doc.h"
+#include "KinoSearch/FieldSpec/TextField.h"
#include "KinoSearch/InvIndex.h"
+#include "KinoSearch/InvIndexer.h"
#include "KinoSearch/QueryParser.h"
+#include "KinoSearch/Schema.h"
#include "KinoSearch/Searcher.h"
#include "KinoSearch/Search/Hits.h"
#include "KinoSearch/Search/TermQuery.h"
@@ -20,6 +26,7 @@
#include "KinoSearch/Search/NoMatchQuery.h"
#include "KinoSearch/Search/ORQuery.h"
#include "KinoSearch/Search/RequiredOptionalQuery.h"
+#include "KinoSearch/Store/RAMFolder.h"

static TestQueryParser*
logical_test_empty_phrase(u32_t boolop)
@@ -593,17 +600,76 @@
NULL
};

+static void
+init_schema_fields(Schema *schema)
+{
+ static CharBuf content = ZCB_LITERAL("content");
+ Schema_Add_Field(schema, &content, TEXTFIELD.name);
+}

-static ZombieCharBuf AND = ZCB_LITERAL("AND");
+static Analyzer*
+make_analyzer(Schema *self)
+{
+ UNUSED_VAR(self);
+ return (Analyzer*)Tokenizer_new(NULL);
+}

+static Schema*
+get_schema()
+{
+ static CharBuf klass = ZCB_LITERAL("MySchema");
+ VTable *vtable = VTable_fetch_vtable(&klass);
+ Schema *schema = NULL;
+ if (!vtable) {
+ vtable = VTable_singleton(&klass, (VTable*)&SCHEMA);
+ VTable_Override(vtable, (kino_method_t)init_schema_fields,
+ Kino_Schema_Init_Fields_OFFSET);
+ VTable_Override(vtable, (kino_method_t)make_analyzer,
+ Kino_Schema_Analyzer_OFFSET);
+ }
+ schema = (Schema*)VTable_Make_Obj(vtable);
+ return Schema_init(schema);
+}
+
+static InvIndex*
+create_invindex()
+{
+ Schema *schema = get_schema();
+ RAMFolder *folder = RAMFolder_new(NULL);
+ InvIndex *invindex = InvIndex_clobber(
+ (InvIndex*)VTable_Make_Obj(&INVINDEX), schema, (Obj*)folder);
+ InvIndexer *invindexer = InvIndexer_new(invindex, NULL);
+ VArray *doc_set = TestQP_doc_set();
+ u32_t i, max;
+
+ for (i = 0, max = doc_set->size; i < max; i++) {
+ static CharBuf field_name = ZCB_LITERAL("content");
+ Doc *doc = Doc_new(NULL, 0, 1.0f);
+ Doc_Store(doc, &field_name, VA_Fetch(doc_set, i));
+ InvIndexer_Add_Doc(invindexer, doc);
+ REFCOUNT_DEC(doc);
+ }
+
+ InvIndexer_Finish(invindexer, false);
+
+ REFCOUNT_DEC(doc_set);
+ REFCOUNT_DEC(invindexer);
+ REFCOUNT_DEC(folder);
+ REFCOUNT_DEC(schema);
+
+ return invindex;
+}
+
void
-TestQPLogic_run_tests(InvIndex *invindex)
+TestQPLogic_run_tests()
{
u32_t i;
TestBatch *batch = Test_new_batch("TestQueryParserLogic", 178, NULL);
+ InvIndex *invindex = create_invindex();
Searcher *searcher = Searcher_new(invindex, NULL);
QueryParser *or_parser = QParser_new(InvIndex_Get_Schema(invindex),
NULL, NULL, NULL);
+ static ZombieCharBuf AND = ZCB_LITERAL("AND");
QueryParser *and_parser = QParser_new(InvIndex_Get_Schema(invindex),
NULL, (CharBuf*)&AND, NULL);
QParser_Set_Heed_Colons(or_parser, true);

Modified: trunk/perl/lib/KinoSearch/Test.pm
===================================================================
--- trunk/perl/lib/KinoSearch/Test.pm 2008-09-07 05:41:34 UTC (rev 3833)
+++ trunk/perl/lib/KinoSearch/Test.pm 2008-09-07 05:44:42 UTC (rev 3834)
@@ -25,10 +25,9 @@
MODULE = KinoSearch PACKAGE = KinoSearch::Test::TestQueryParserLogic

void
-run_tests(invindex)
- kino_InvIndex *invindex;
+run_tests()
PPCODE:
- kino_TestQPLogic_run_tests(invindex);
+ kino_TestQPLogic_run_tests();

MODULE = KinoSearch PACKAGE = KinoSearch::Test::TestCharmonizer


Modified: trunk/perl/t/610-queryparser_logic.t
===================================================================
--- trunk/perl/t/610-queryparser_logic.t 2008-09-07 05:41:34 UTC (rev 3833)
+++ trunk/perl/t/610-queryparser_logic.t 2008-09-07 05:44:42 UTC (rev 3834)
@@ -1,14 +1,5 @@
use strict;
use warnings;
-use lib 'buildlib';
-
-package main;
-
use KinoSearch::Test;
-use KinoSearch::Test::TestUtils qw( create_invindex );
+KinoSearch::Test::TestQueryParserLogic::run_tests();

-my $doc_set = KinoSearch::Test::TestQueryParser::doc_set()->to_perl;
-my $invindex = create_invindex(@$doc_set);
-
-KinoSearch::Test::TestQueryParserLogic::run_tests($invindex);
-


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