00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022
00023 #include "api_sortingold.h"
00024
00025 #define XAPIAN_DEPRECATED(D) D
00026 #include <xapian.h>
00027
00028 #include "apitest.h"
00029 #include "testutils.h"
00030
00031 using namespace std;
00032
00033 DEFINE_TESTCASE(oldsortfunctor1,backend && !remote) {
00034 Xapian::Enquire enquire(get_database("apitest_sortrel"));
00035 enquire.set_query(Xapian::Query("woman"));
00036
00037 {
00038 const int keys[] = { 3, 1 };
00039 Xapian::MultiValueSorter sorter(keys, keys + 2);
00040
00041 enquire.set_sort_by_key(&sorter, true);
00042 Xapian::MSet mset = enquire.get_mset(0, 10);
00043 mset_expect_order(mset, 2, 6, 7, 1, 3, 4, 5, 8, 9);
00044 }
00045
00046 {
00047 Xapian::MultiValueSorter sorter;
00048 sorter.add(3);
00049 sorter.add(1, false);
00050
00051 enquire.set_sort_by_key(&sorter, true);
00052 Xapian::MSet mset = enquire.get_mset(0, 10);
00053 mset_expect_order(mset, 7, 6, 2, 8, 9, 4, 5, 1, 3);
00054 }
00055
00056 {
00057 Xapian::MultiValueSorter sorter;
00058 sorter.add(100);
00059 sorter.add(3);
00060 sorter.add(1, false);
00061
00062 enquire.set_sort_by_key(&sorter, true);
00063 Xapian::MSet mset = enquire.get_mset(0, 10);
00064 mset_expect_order(mset, 7, 6, 2, 8, 9, 4, 5, 1, 3);
00065 }
00066
00067 {
00068 Xapian::MultiValueSorter sorter;
00069 sorter.add(10);
00070 sorter.add(1, false);
00071
00072 enquire.set_sort_by_key(&sorter, true);
00073 Xapian::MSet mset = enquire.get_mset(0, 10);
00074 mset_expect_order(mset, 8, 9, 4, 5, 1, 3, 7, 6, 2);
00075 }
00076
00077 return true;
00078 }
00079
00081 DEFINE_TESTCASE(oldsortfunctor2,writable && !remote) {
00082 Xapian::WritableDatabase db = get_writable_database();
00083 Xapian::Document doc;
00084 doc.add_term("foo");
00085 doc.add_value(0, "ABB");
00086 db.add_document(doc);
00087 doc.add_value(0, "ABC");
00088 db.add_document(doc);
00089 doc.add_value(0, string("ABC", 4));
00090 db.add_document(doc);
00091 doc.add_value(0, "ABCD");
00092 db.add_document(doc);
00093 doc.add_value(0, "ABC\xff");
00094 db.add_document(doc);
00095
00096 Xapian::Enquire enquire(db);
00097 enquire.set_query(Xapian::Query("foo"));
00098
00099 {
00100 Xapian::MultiValueSorter sorter;
00101 sorter.add(0);
00102 enquire.set_sort_by_key(&sorter, true);
00103 Xapian::MSet mset = enquire.get_mset(0, 10);
00104 mset_expect_order(mset, 5, 4, 3, 2, 1);
00105 }
00106
00107 {
00108 Xapian::MultiValueSorter sorter;
00109 sorter.add(0, false);
00110 enquire.set_sort_by_key(&sorter, true);
00111 Xapian::MSet mset = enquire.get_mset(0, 10);
00112 mset_expect_order(mset, 1, 2, 3, 4, 5);
00113 }
00114
00115 {
00116 Xapian::MultiValueSorter sorter;
00117 sorter.add(0);
00118 sorter.add(1);
00119 enquire.set_sort_by_key(&sorter, true);
00120 Xapian::MSet mset = enquire.get_mset(0, 10);
00121 mset_expect_order(mset, 5, 4, 3, 2, 1);
00122 }
00123
00124 {
00125 Xapian::MultiValueSorter sorter;
00126 sorter.add(0, false);
00127 sorter.add(1);
00128 enquire.set_sort_by_key(&sorter, true);
00129 Xapian::MSet mset = enquire.get_mset(0, 10);
00130 mset_expect_order(mset, 1, 2, 3, 4, 5);
00131 }
00132
00133 {
00134 Xapian::MultiValueSorter sorter;
00135 sorter.add(0);
00136 sorter.add(1, false);
00137 enquire.set_sort_by_key(&sorter, true);
00138 Xapian::MSet mset = enquire.get_mset(0, 10);
00139 mset_expect_order(mset, 5, 4, 3, 2, 1);
00140 }
00141
00142 {
00143 Xapian::MultiValueSorter sorter;
00144 sorter.add(0, false);
00145 sorter.add(1, false);
00146 enquire.set_sort_by_key(&sorter, true);
00147 Xapian::MSet mset = enquire.get_mset(0, 10);
00148 mset_expect_order(mset, 1, 2, 3, 4, 5);
00149 }
00150
00151 return true;
00152 }
00153
00154 class NeverUseMeSorter : public Xapian::Sorter {
00155 public:
00156 std::string operator() (const Xapian::Document &) const
00157 {
00158 FAIL_TEST("NeverUseMeSorter was called");
00159 }
00160 };
00161
00163 DEFINE_TESTCASE(oldchangesorter1, backend && !remote) {
00164 Xapian::Enquire enquire(get_database("apitest_simpledata"));
00165 enquire.set_query(Xapian::Query("word"));
00166 NeverUseMeSorter sorter;
00167
00168 enquire.set_sort_by_key(&sorter, true);
00169 enquire.set_sort_by_value(0, true);
00170 Xapian::MSet mset = enquire.get_mset(0, 25);
00171 TEST_EQUAL(mset.size(), 2);
00172
00173 enquire.set_sort_by_key(&sorter, true);
00174 enquire.set_sort_by_value_then_relevance(0, true);
00175 mset = enquire.get_mset(0, 25);
00176 TEST_EQUAL(mset.size(), 2);
00177
00178 enquire.set_sort_by_key(&sorter, true);
00179 enquire.set_sort_by_relevance_then_value(0, true);
00180 mset = enquire.get_mset(0, 25);
00181 TEST_EQUAL(mset.size(), 2);
00182
00183 enquire.set_sort_by_key(&sorter, true);
00184 enquire.set_sort_by_relevance();
00185 mset = enquire.get_mset(0, 25);
00186 TEST_EQUAL(mset.size(), 2);
00187
00188 return true;
00189 }
00190
00192 DEFINE_TESTCASE(oldsortfunctorempty1,backend && !remote) {
00193 Xapian::Enquire enquire(get_database("apitest_sortrel"));
00194 enquire.set_query(Xapian::Query("woman"));
00195
00196 {
00197 int i;
00198 Xapian::MultiValueSorter sorter(&i, &i);
00199
00200 enquire.set_sort_by_key(&sorter, true);
00201 Xapian::MSet mset = enquire.get_mset(0, 10);
00202 mset_expect_order(mset, 1, 2, 3, 4, 5, 6, 7, 8, 9);
00203 }
00204
00205 return true;
00206 }