|
From: <ust...@us...> - 2009-09-27 13:29:45
|
Revision: 3025
http://clucene.svn.sourceforge.net/clucene/?rev=3025&view=rev
Author: ustramooner
Date: 2009-09-27 13:29:39 +0000 (Sun, 27 Sep 2009)
Log Message:
-----------
Merge commit 'origin/master'
Modified Paths:
--------------
branches/lucene2_3_2/src/core/CLucene/search/BooleanQuery.cpp
branches/lucene2_3_2/src/core/CLucene/search/BooleanQuery.h
branches/lucene2_3_2/src/test/CMakeLists.txt
branches/lucene2_3_2/src/test/test.h
branches/lucene2_3_2/src/test/tests.cpp
Added Paths:
-----------
branches/lucene2_3_2/.gitignore
branches/lucene2_3_2/src/test/search/TestBoolean.cpp
Added: branches/lucene2_3_2/.gitignore
===================================================================
--- branches/lucene2_3_2/.gitignore (rev 0)
+++ branches/lucene2_3_2/.gitignore 2009-09-27 13:29:39 UTC (rev 3025)
@@ -0,0 +1,11 @@
+# git-ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
+obj
+bin
+msvc
+build
+~$*
\ No newline at end of file
Modified: branches/lucene2_3_2/src/core/CLucene/search/BooleanQuery.cpp
===================================================================
--- branches/lucene2_3_2/src/core/CLucene/search/BooleanQuery.cpp 2009-09-27 11:33:44 UTC (rev 3024)
+++ branches/lucene2_3_2/src/core/CLucene/search/BooleanQuery.cpp 2009-09-27 13:29:39 UTC (rev 3025)
@@ -109,7 +109,9 @@
return maxClauseCount;
}
- void BooleanQuery::setMaxClauseCount(size_t maxClauseCount){
+ void BooleanQuery::setMaxClauseCount(const size_t maxClauseCount){
+ if (maxClauseCount < 1)
+ _CLTHROWA(CL_ERR_IllegalArgument, "maxClauseCount must be >= 1");
BooleanQuery::maxClauseCount = maxClauseCount;
}
Modified: branches/lucene2_3_2/src/core/CLucene/search/BooleanQuery.h
===================================================================
--- branches/lucene2_3_2/src/core/CLucene/search/BooleanQuery.h 2009-09-27 11:33:44 UTC (rev 3024)
+++ branches/lucene2_3_2/src/core/CLucene/search/BooleanQuery.h 2009-09-27 13:29:39 UTC (rev 3025)
@@ -51,7 +51,7 @@
static size_t getMaxClauseCount();
/** Set the maximum number of clauses permitted. */
- static void setMaxClauseCount(size_t maxClauseCount);
+ static void setMaxClauseCount(const size_t maxClauseCount);
/** Adds a clause to a boolean query. Clauses may be:
* <ul>
Modified: branches/lucene2_3_2/src/test/CMakeLists.txt
===================================================================
--- branches/lucene2_3_2/src/test/CMakeLists.txt 2009-09-27 11:33:44 UTC (rev 3024)
+++ branches/lucene2_3_2/src/test/CMakeLists.txt 2009-09-27 13:29:39 UTC (rev 3025)
@@ -29,6 +29,7 @@
./document/TestDocument.cpp
./document/TestNumberTools.cpp
./store/TestStore.cpp
+./search/TestBoolean.cpp
./search/TestDateFilter.cpp
./search/TestForDuplicates.cpp
./search/TestQueries.cpp
Added: branches/lucene2_3_2/src/test/search/TestBoolean.cpp
===================================================================
--- branches/lucene2_3_2/src/test/search/TestBoolean.cpp (rev 0)
+++ branches/lucene2_3_2/src/test/search/TestBoolean.cpp 2009-09-27 13:29:39 UTC (rev 3025)
@@ -0,0 +1,181 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "test.h"
+
+/// TestBooleanQuery.java, ported 5/9/2009
+void testEquality(CuTest *tc) {
+ BooleanQuery* bq1 = _CLNEW BooleanQuery();
+ Term* t = _CLNEW Term(_T("field"), _T("value1"));
+ bq1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD);
+ _CLDECDELETE(t);
+ t = _CLNEW Term(_T("field"), _T("value2"));
+ bq1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD);
+ _CLDECDELETE(t);
+ BooleanQuery* nested1 = _CLNEW BooleanQuery();
+ t = _CLNEW Term(_T("field"), _T("nestedvalue1"));
+ nested1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD);
+ _CLDECDELETE(t);
+ t = _CLNEW Term(_T("field"), _T("nestedvalue2"));
+ nested1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD);
+ _CLDECDELETE(t);
+ bq1->add(nested1, true, BooleanClause::SHOULD);
+
+ BooleanQuery* bq2 = _CLNEW BooleanQuery();
+ t = _CLNEW Term(_T("field"), _T("value1"));
+ bq2->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD);
+ _CLDECDELETE(t);
+ t = _CLNEW Term(_T("field"), _T("value2"));
+ bq2->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD);
+ _CLDECDELETE(t);
+ BooleanQuery* nested2 = _CLNEW BooleanQuery();
+ t = _CLNEW Term(_T("field"), _T("nestedvalue1"));
+ nested2->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD);
+ _CLDECDELETE(t);
+ t = _CLNEW Term(_T("field"), _T("nestedvalue2"));
+ nested2->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD);
+ _CLDECDELETE(t);
+ bq2->add(nested2, true, BooleanClause::SHOULD);
+
+ CLUCENE_ASSERT(bq1->equals(bq2));
+
+ _CLLDELETE(bq1);
+ _CLLDELETE(bq2);
+}
+void testException(CuTest *tc) {
+ try {
+ BooleanQuery::setMaxClauseCount(0);
+ CuFail(tc, _T("setMaxClauseCount(0) did not throw an exception"));
+ } catch (CLuceneError&) {
+ // okay
+ }
+}
+
+/// 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());
+ }
+}
+
+/// 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"));
+ }
+}
+
+CuSuite *testBoolean(void)
+{
+ CuSuite *suite = CuSuiteNew(_T("CLucene Boolean Tests"));
+
+ SUITE_ADD_TEST(suite, testEquality);
+ SUITE_ADD_TEST(suite, testException);
+
+ SUITE_ADD_TEST(suite, testBooleanScorer);
+
+ SUITE_ADD_TEST(suite, testBooleanPrefixQuery);
+
+ //_CrtSetBreakAlloc(1179);
+
+ return suite;
+}
+// EOF
Modified: branches/lucene2_3_2/src/test/test.h
===================================================================
--- branches/lucene2_3_2/src/test/test.h 2009-09-27 11:33:44 UTC (rev 3024)
+++ branches/lucene2_3_2/src/test/test.h 2009-09-27 13:29:39 UTC (rev 3025)
@@ -57,6 +57,8 @@
CuSuite *testreuters(void);
CuSuite *testdocument(void);
CuSuite *testNumberTools(void);
+CuSuite *testDateTools(void);
+CuSuite *testBoolean(void);
class English{
public:
Modified: branches/lucene2_3_2/src/test/tests.cpp
===================================================================
--- branches/lucene2_3_2/src/test/tests.cpp 2009-09-27 11:33:44 UTC (rev 3024)
+++ branches/lucene2_3_2/src/test/tests.cpp 2009-09-27 13:29:39 UTC (rev 3025)
@@ -20,6 +20,7 @@
{"priorityqueue", testpriorityqueue},
{"queryparser", testQueryParser},
{"mfqueryparser", testMultiFieldQueryParser},
+ {"boolean", testBoolean},
{"search", testsearch},
{"queries", testqueries},
{"termvector",testtermvector},
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|