Groonga 3.0.9 Source Code Document
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
groonga
test
unit
core
dat
test-predictive-cursor.cpp
Go to the documentation of this file.
1
/* -*- c-basic-offset: 2; coding: utf-8 -*- */
2
/*
3
Copyright (C) 2011-2012 Brazil
4
5
This library is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Lesser General Public
7
License version 2.1 as published by the Free Software Foundation.
8
9
This library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
Lesser General Public License for more details.
13
14
You should have received a copy of the GNU Lesser General Public
15
License along with this library; if not, write to the Free Software
16
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#include <gcutter.h>
20
#include <cppcutter.h>
21
22
#include <
grn-assertions.h
>
23
#include <
dat/predictive-cursor.hpp
>
24
#include <
dat/trie.hpp
>
25
26
#include <cstring>
27
28
namespace
29
{
30
void
create_trie
(
grn::dat::Trie
*trie)
31
{
32
trie->
create
();
33
trie->
insert
(
"北斗"
, std::strlen(
"北斗"
));
// 2nd
34
trie->
insert
(
"北斗神拳"
, std::strlen(
"北斗神拳"
));
// 3rd
35
trie->
insert
(
"北斗神拳伝承者"
, std::strlen(
"北斗神拳伝承者"
));
// 4th
36
trie->
insert
(
"南斗聖拳"
, std::strlen(
"南斗聖拳"
));
// 6th
37
trie->
insert
(
"南斗孤鷲拳"
, std::strlen(
"南斗孤鷲拳"
));
// 5th
38
trie->
insert
(
"元斗皇拳"
, std::strlen(
"元斗皇拳"
));
// 1st
39
}
40
}
41
42
namespace
test_dat_predictive_cursor
43
{
44
void
test_null(
void
)
45
{
46
grn::dat::Trie
trie;
47
create_trie
(&trie);
48
49
grn::dat::PredictiveCursor
cursor;
50
cursor.
open
(trie,
grn::dat::String
());
51
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
52
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
53
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
54
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
55
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
56
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
57
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
58
}
59
60
void
test_str
(
void
)
61
{
62
grn::dat::Trie
trie;
63
create_trie
(&trie);
64
65
grn::dat::PredictiveCursor
cursor;
66
67
cursor.
open
(trie,
grn::dat::String
(
"北斗"
));
68
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
69
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
70
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
71
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
72
73
cursor.
open
(trie,
grn::dat::String
(
"北斗神拳"
));
74
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
75
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
76
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
77
78
cursor.
open
(trie,
grn::dat::String
(
"北斗神拳伝承者"
));
79
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
80
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
81
82
cursor.
open
(trie,
grn::dat::String
(
"南斗"
));
83
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
84
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
85
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
86
87
cursor.
open
(trie,
grn::dat::String
(
"南斗聖拳"
));
88
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
89
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
90
91
cursor.
open
(trie,
grn::dat::String
(
"南斗水鳥拳"
));
92
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
93
94
cursor.
open
(trie,
grn::dat::String
(
"元斗"
));
95
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
96
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
97
}
98
99
void
test_offset
(
void
)
100
{
101
grn::dat::Trie
trie;
102
create_trie
(&trie);
103
104
grn::dat::PredictiveCursor
cursor;
105
106
cursor.
open
(trie,
grn::dat::String
(), 0);
107
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
108
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
109
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
110
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
111
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
112
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
113
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
114
115
cursor.
open
(trie,
grn::dat::String
(), 3);
116
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
117
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
118
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
119
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
120
121
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 2);
122
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
123
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
124
125
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 5);
126
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
127
}
128
129
void
test_limit
(
void
)
130
{
131
grn::dat::Trie
trie;
132
create_trie
(&trie);
133
134
grn::dat::PredictiveCursor
cursor;
135
136
cursor.
open
(trie,
grn::dat::String
(), 0,
grn::dat::MAX_UINT32
);
137
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
138
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
139
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
140
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
141
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
142
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
143
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
144
145
cursor.
open
(trie,
grn::dat::String
(), 0, 4);
146
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
147
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
148
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
149
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
150
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
151
152
cursor.
open
(trie,
grn::dat::String
(), 2, 3);
153
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
154
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
155
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
156
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
157
158
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 0, 2);
159
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
160
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
161
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
162
163
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 1, 1);
164
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
165
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
166
167
cursor.
open
(trie,
grn::dat::String
(
"南斗"
), 0, 0);
168
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
169
170
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 1, 100);
171
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
172
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
173
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
174
}
175
176
void
test_ascending_cursor
(
void
)
177
{
178
grn::dat::Trie
trie;
179
create_trie
(&trie);
180
181
grn::dat::PredictiveCursor
cursor;
182
183
cursor.
open
(trie,
grn::dat::String
(), 0,
grn::dat::MAX_UINT32
,
184
grn::dat::ASCENDING_CURSOR
);
185
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
186
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
187
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
188
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
189
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
190
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
191
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
192
193
cursor.
open
(trie,
grn::dat::String
(), 3,
grn::dat::MAX_UINT32
,
194
grn::dat::ASCENDING_CURSOR
);
195
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
196
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
197
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
198
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
199
200
cursor.
open
(trie,
grn::dat::String
(), 3, 2,
201
grn::dat::ASCENDING_CURSOR
);
202
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
203
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
204
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
205
206
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 0,
grn::dat::MAX_UINT32
,
207
grn::dat::ASCENDING_CURSOR
);
208
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
209
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
210
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
211
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
212
}
213
214
void
test_descending_cursor
(
void
)
215
{
216
grn::dat::Trie
trie;
217
create_trie
(&trie);
218
219
grn::dat::PredictiveCursor
cursor;
220
221
cursor.
open
(trie,
grn::dat::String
(), 0,
grn::dat::MAX_UINT32
,
222
grn::dat::DESCENDING_CURSOR
);
223
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
224
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
225
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
226
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
227
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
228
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
229
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
230
231
cursor.
open
(trie,
grn::dat::String
(), 3,
grn::dat::MAX_UINT32
,
232
grn::dat::DESCENDING_CURSOR
);
233
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
234
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
235
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
236
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
237
238
cursor.
open
(trie,
grn::dat::String
(), 3, 2,
239
grn::dat::DESCENDING_CURSOR
);
240
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
241
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
242
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
243
244
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 0,
grn::dat::MAX_UINT32
,
245
grn::dat::DESCENDING_CURSOR
);
246
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
247
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
248
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
249
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
250
251
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 2,
grn::dat::MAX_UINT32
,
252
grn::dat::DESCENDING_CURSOR
);
253
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
254
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
255
256
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 0, 1,
257
grn::dat::DESCENDING_CURSOR
);
258
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
259
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
260
261
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 3,
grn::dat::MAX_UINT32
,
262
grn::dat::DESCENDING_CURSOR
);
263
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
264
265
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 0, 0,
266
grn::dat::DESCENDING_CURSOR
);
267
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
268
}
269
270
void
test_except_boundary
(
void
)
271
{
272
grn::dat::Trie
trie;
273
create_trie
(&trie);
274
275
grn::dat::PredictiveCursor
cursor;
276
277
cursor.
open
(trie,
grn::dat::String
(), 0,
grn::dat::MAX_UINT32
,
278
grn::dat::EXCEPT_EXACT_MATCH
);
279
cppcut_assert_equal(
grn::dat::UInt32
(6), cursor.
next
().
id
());
280
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
281
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
282
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
283
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
284
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
285
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
286
287
cursor.
open
(trie,
grn::dat::String
(
"北"
), 0,
grn::dat::MAX_UINT32
,
288
grn::dat::EXCEPT_EXACT_MATCH
);
289
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
290
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
291
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
292
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
293
294
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 0,
grn::dat::MAX_UINT32
,
295
grn::dat::EXCEPT_EXACT_MATCH
);
296
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
297
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
298
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
299
300
cursor.
open
(trie,
grn::dat::String
(
"北斗神"
), 0,
grn::dat::MAX_UINT32
,
301
grn::dat::EXCEPT_EXACT_MATCH
);
302
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
303
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
304
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
305
306
cursor.
open
(trie,
grn::dat::String
(
"北斗神拳"
), 0,
grn::dat::MAX_UINT32
,
307
grn::dat::EXCEPT_EXACT_MATCH
);
308
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
309
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
310
311
cursor.
open
(trie,
grn::dat::String
(
"北斗神拳伝承"
), 0,
312
grn::dat::MAX_UINT32
,
grn::dat::EXCEPT_EXACT_MATCH
);
313
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
314
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
315
316
cursor.
open
(trie,
grn::dat::String
(
"北斗神拳伝承者"
), 0,
317
grn::dat::MAX_UINT32
,
grn::dat::EXCEPT_EXACT_MATCH
);
318
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
319
320
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 1,
grn::dat::MAX_UINT32
,
321
grn::dat::EXCEPT_EXACT_MATCH
);
322
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
323
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
324
325
cursor.
open
(trie,
grn::dat::String
(
"北斗"
), 0, 1,
326
grn::dat::EXCEPT_EXACT_MATCH
);
327
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
328
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
329
}
330
}
Generated on Sun Nov 10 2013 09:49:04 for Groonga 3.0.9 Source Code Document by
1.8.1.2