Branch data Line data Source code
1 : : /** @file api_sortingold.cc
2 : : * @brief tests of deprecated MSet sorting
3 : : */
4 : : /* Copyright (C) 2007,2008,2009 Olly Betts
5 : : *
6 : : * This program is free software; you can redistribute it and/or modify
7 : : * it under the terms of the GNU General Public License as published by
8 : : * the Free Software Foundation; either version 2 of the License, or
9 : : * (at your option) any later version.
10 : : *
11 : : * This program is distributed in the hope that it will be useful,
12 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : : * GNU General Public License for more details.
15 : : *
16 : : * You should have received a copy of the GNU General Public License
17 : : * along with this program; if not, write to the Free Software
18 : : * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 : : */
20 : :
21 : : #include <config.h>
22 : :
23 : : #include "api_sortingold.h"
24 : :
25 : : #define XAPIAN_DEPRECATED(D) D
26 : : #include <xapian.h>
27 : :
28 : : #include "apitest.h"
29 : : #include "testutils.h"
30 : :
31 : : using namespace std;
32 : :
33 : 7 : DEFINE_TESTCASE(oldsortfunctor1,backend && !remote) {
34 : 7 : Xapian::Enquire enquire(get_database("apitest_sortrel"));
35 : 7 : enquire.set_query(Xapian::Query("woman"));
36 : :
37 : : {
38 : 7 : const int keys[] = { 3, 1 };
39 : 7 : Xapian::MultiValueSorter sorter(keys, keys + 2);
40 : :
41 : 7 : enquire.set_sort_by_key(&sorter, true);
42 : 7 : Xapian::MSet mset = enquire.get_mset(0, 10);
43 : 7 : mset_expect_order(mset, 2, 6, 7, 1, 3, 4, 5, 8, 9);
44 : : }
45 : :
46 : : {
47 : 7 : Xapian::MultiValueSorter sorter;
48 : 7 : sorter.add(3);
49 : 7 : sorter.add(1, false);
50 : :
51 : 7 : enquire.set_sort_by_key(&sorter, true);
52 : 7 : Xapian::MSet mset = enquire.get_mset(0, 10);
53 : 7 : mset_expect_order(mset, 7, 6, 2, 8, 9, 4, 5, 1, 3);
54 : : }
55 : :
56 : : {
57 : 7 : Xapian::MultiValueSorter sorter;
58 : 7 : sorter.add(100); // Value 100 isn't set.
59 : 7 : sorter.add(3);
60 : 7 : sorter.add(1, false);
61 : :
62 : 7 : enquire.set_sort_by_key(&sorter, true);
63 : 7 : Xapian::MSet mset = enquire.get_mset(0, 10);
64 : 7 : mset_expect_order(mset, 7, 6, 2, 8, 9, 4, 5, 1, 3);
65 : : }
66 : :
67 : : {
68 : 7 : Xapian::MultiValueSorter sorter;
69 : 7 : sorter.add(10); // Value 10 isn't always set.
70 : 7 : sorter.add(1, false);
71 : :
72 : 7 : enquire.set_sort_by_key(&sorter, true);
73 : 7 : Xapian::MSet mset = enquire.get_mset(0, 10);
74 : 7 : mset_expect_order(mset, 8, 9, 4, 5, 1, 3, 7, 6, 2);
75 : : }
76 : :
77 : 7 : return true;
78 : : }
79 : :
80 : : /// Test reverse sort functor.
81 : 4 : DEFINE_TESTCASE(oldsortfunctor2,writable && !remote) {
82 : 4 : Xapian::WritableDatabase db = get_writable_database();
83 : 4 : Xapian::Document doc;
84 : 4 : doc.add_term("foo");
85 : 4 : doc.add_value(0, "ABB");
86 : 4 : db.add_document(doc);
87 : 4 : doc.add_value(0, "ABC");
88 : 4 : db.add_document(doc);
89 : 4 : doc.add_value(0, string("ABC", 4));
90 : 4 : db.add_document(doc);
91 : 4 : doc.add_value(0, "ABCD");
92 : 4 : db.add_document(doc);
93 : 4 : doc.add_value(0, "ABC\xff");
94 : 4 : db.add_document(doc);
95 : :
96 : 4 : Xapian::Enquire enquire(db);
97 : 4 : enquire.set_query(Xapian::Query("foo"));
98 : :
99 : : {
100 : 4 : Xapian::MultiValueSorter sorter;
101 : 4 : sorter.add(0);
102 : 4 : enquire.set_sort_by_key(&sorter, true);
103 : 4 : Xapian::MSet mset = enquire.get_mset(0, 10);
104 : 4 : mset_expect_order(mset, 5, 4, 3, 2, 1);
105 : : }
106 : :
107 : : {
108 : 4 : Xapian::MultiValueSorter sorter;
109 : 4 : sorter.add(0, false);
110 : 4 : enquire.set_sort_by_key(&sorter, true);
111 : 4 : Xapian::MSet mset = enquire.get_mset(0, 10);
112 : 4 : mset_expect_order(mset, 1, 2, 3, 4, 5);
113 : : }
114 : :
115 : : {
116 : 4 : Xapian::MultiValueSorter sorter;
117 : 4 : sorter.add(0);
118 : 4 : sorter.add(1);
119 : 4 : enquire.set_sort_by_key(&sorter, true);
120 : 4 : Xapian::MSet mset = enquire.get_mset(0, 10);
121 : 4 : mset_expect_order(mset, 5, 4, 3, 2, 1);
122 : : }
123 : :
124 : : {
125 : 4 : Xapian::MultiValueSorter sorter;
126 : 4 : sorter.add(0, false);
127 : 4 : sorter.add(1);
128 : 4 : enquire.set_sort_by_key(&sorter, true);
129 : 4 : Xapian::MSet mset = enquire.get_mset(0, 10);
130 : 4 : mset_expect_order(mset, 1, 2, 3, 4, 5);
131 : : }
132 : :
133 : : {
134 : 4 : Xapian::MultiValueSorter sorter;
135 : 4 : sorter.add(0);
136 : 4 : sorter.add(1, false);
137 : 4 : enquire.set_sort_by_key(&sorter, true);
138 : 4 : Xapian::MSet mset = enquire.get_mset(0, 10);
139 : 4 : mset_expect_order(mset, 5, 4, 3, 2, 1);
140 : : }
141 : :
142 : : {
143 : 4 : Xapian::MultiValueSorter sorter;
144 : 4 : sorter.add(0, false);
145 : 4 : sorter.add(1, false);
146 : 4 : enquire.set_sort_by_key(&sorter, true);
147 : 4 : Xapian::MSet mset = enquire.get_mset(0, 10);
148 : 4 : mset_expect_order(mset, 1, 2, 3, 4, 5);
149 : : }
150 : :
151 : 4 : return true;
152 : : }
153 : :
154 [ # # ][ - + ]: 14 : class NeverUseMeSorter : public Xapian::Sorter {
155 : : public:
156 : 0 : std::string operator() (const Xapian::Document &) const
157 : : {
158 [ # # ]: 0 : FAIL_TEST("NeverUseMeSorter was called");
159 : : }
160 : : };
161 : :
162 : : /// Regression test for changing away from a sorter.
163 : 7 : DEFINE_TESTCASE(oldchangesorter1, backend && !remote) {
164 : 7 : Xapian::Enquire enquire(get_database("apitest_simpledata"));
165 : 7 : enquire.set_query(Xapian::Query("word"));
166 : 7 : NeverUseMeSorter sorter;
167 : :
168 : 7 : enquire.set_sort_by_key(&sorter, true);
169 : 7 : enquire.set_sort_by_value(0, true);
170 : 7 : Xapian::MSet mset = enquire.get_mset(0, 25);
171 [ - + # # ]: 7 : TEST_EQUAL(mset.size(), 2); // Check that search is still doing something.
172 : :
173 : 7 : enquire.set_sort_by_key(&sorter, true);
174 : 7 : enquire.set_sort_by_value_then_relevance(0, true);
175 : 7 : mset = enquire.get_mset(0, 25);
176 [ - + # # ]: 7 : TEST_EQUAL(mset.size(), 2); // Check that search is still doing something.
177 : :
178 : 7 : enquire.set_sort_by_key(&sorter, true);
179 : 7 : enquire.set_sort_by_relevance_then_value(0, true);
180 : 7 : mset = enquire.get_mset(0, 25);
181 [ - + # # ]: 7 : TEST_EQUAL(mset.size(), 2); // Check that search is still doing something.
182 : :
183 : 7 : enquire.set_sort_by_key(&sorter, true);
184 : 7 : enquire.set_sort_by_relevance();
185 : 7 : mset = enquire.get_mset(0, 25);
186 [ - + # # ]: 7 : TEST_EQUAL(mset.size(), 2); // Check that search is still doing something.
187 : :
188 : 7 : return true;
189 : : }
190 : :
191 : : /// Regression test - an empty MultiValueSorter hung in 1.0.9 and earlier.
192 : 7 : DEFINE_TESTCASE(oldsortfunctorempty1,backend && !remote) {
193 : 7 : Xapian::Enquire enquire(get_database("apitest_sortrel"));
194 : 7 : enquire.set_query(Xapian::Query("woman"));
195 : :
196 : : {
197 : : int i;
198 : 7 : Xapian::MultiValueSorter sorter(&i, &i);
199 : :
200 : 7 : enquire.set_sort_by_key(&sorter, true);
201 : 7 : Xapian::MSet mset = enquire.get_mset(0, 10);
202 : 7 : mset_expect_order(mset, 1, 2, 3, 4, 5, 6, 7, 8, 9);
203 : : }
204 : :
205 : 7 : return true;
206 : : }
|