00001 // -*- C++ -*- 00002 #include <ept/test.h> 00003 #include <ept/core/list.h> 00004 #include <ept/core/xapian.h> 00005 00006 // TODO temporary, for building test database 00007 #include <ept/apt/apt.h> 00008 #include <ept/textsearch/textsearch.h> 00009 #include <ept/textsearch/maint/path.h> 00010 00011 using namespace ept; 00012 using namespace core; 00013 00014 namespace ept { 00015 namespace textsearch { 00016 extern size_t max_index; 00017 } 00018 } 00019 00020 struct XapianTestEnvironment : AptTestEnvironment { 00021 textsearch::Path::OverrideIndexDir oid; 00022 textsearch::TextSearch textsearch; 00023 apt::Apt apt; 00024 XapianTestEnvironment() 00025 : oid( TEST_ENV_DIR "xapian" ) 00026 { 00027 ept::textsearch::max_index = 1000; 00028 textsearch.rebuildIfNeeded(apt); 00029 } 00030 }; 00031 00032 struct TestXapian : XapianTestEnvironment { 00033 xapian::Source xap; 00034 Xapian::Enquire enq; 00035 00036 TestXapian() : 00037 enq( xap.db() ) 00038 { 00039 Xapian::Query q = xap.makeORQuery( "sgml tool" ); 00040 enq.set_query( q ); 00041 } 00042 00043 Test enquire() { 00044 Xapian::MSet matches = enq.get_mset(0, 100); 00045 assert( matches.size() > 0 ); 00046 assert_eq( matches.begin().get_document().get_data(), "psgml" ); 00047 } 00048 00049 Test listCount() { 00050 xapian::List l( enq ); 00051 Xapian::MSet matches = enq.get_mset(0, 6000); 00052 assert_eq( list::count( l ), matches.size() ); 00053 } 00054 00055 template< typename List > 00056 void checkXapianList( List l, Xapian::MSet m ) { 00057 Xapian::MSet::const_iterator i = m.begin(); 00058 while (! l.empty() ) { 00059 assert_eq( l.token().package(), i.get_document().get_data() ); 00060 l = l.tail(); 00061 ++ i; 00062 } 00063 } 00064 00065 Test list() { 00066 xapian::List l( enq ); 00067 Xapian::MSet matches = enq.get_mset(0, 6000); 00068 checkXapianList( l, matches ); 00069 } 00070 00071 Test query() { 00072 assert_eq( xap.query( "sgml tool" ).token().package(), "psgml" ); 00073 } 00074 00075 };