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-prefix-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/prefix-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(
"東京"
));
// 3rd
34
trie->
insert
(
"京都"
, std::strlen(
"京都"
));
// 1st
35
trie->
insert
(
"東京都"
, std::strlen(
"東京都"
));
// 4th
36
trie->
insert
(
"京都府"
, std::strlen(
"京都府"
));
// 2nd
37
trie->
insert
(
"東京都庁"
, std::strlen(
"東京都庁"
));
// 5th
38
}
39
}
40
41
namespace
test_dat_prefix_cursor
42
{
43
void
test_null(
void
)
44
{
45
grn::dat::Trie
trie;
46
create_trie
(&trie);
47
48
grn::dat::PrefixCursor
cursor;
49
cursor.
open
(trie,
grn::dat::String
());
50
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
51
}
52
53
void
test_str
(
void
)
54
{
55
grn::dat::Trie
trie;
56
create_trie
(&trie);
57
58
grn::dat::PrefixCursor
cursor;
59
60
cursor.
open
(trie,
grn::dat::String
(
"京都"
));
61
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
62
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
63
64
cursor.
open
(trie,
grn::dat::String
(
"京都府"
));
65
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
66
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
67
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
68
69
cursor.
open
(trie,
grn::dat::String
(
"東京"
));
70
cppcut_assert_equal(
grn::dat::UInt32
(1), 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
(1), 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
(1), cursor.
next
().
id
());
80
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
81
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
82
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
83
84
cursor.
open
(trie,
grn::dat::String
(
"東京都議会"
));
85
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
86
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
87
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
88
}
89
90
void
test_min_length
(
void
)
91
{
92
grn::dat::Trie
trie;
93
create_trie
(&trie);
94
95
grn::dat::PrefixCursor
cursor;
96
97
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), std::strlen(
""
));
98
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
99
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
100
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
101
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
102
103
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), std::strlen(
"東"
));
104
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
105
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
106
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
107
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
108
109
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), std::strlen(
"東京"
));
110
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
111
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
112
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
113
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
114
115
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), std::strlen(
"東京都"
));
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(
false
, cursor.
next
().
is_valid
());
119
120
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
),
121
std::strlen(
"東京都庁"
));
122
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
123
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
124
125
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
),
126
std::strlen(
"東京都庁ビル"
));
127
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
128
}
129
130
void
test_offset
(
void
)
131
{
132
grn::dat::Trie
trie;
133
create_trie
(&trie);
134
135
grn::dat::PrefixCursor
cursor;
136
137
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 0);
138
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
139
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
140
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
141
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
142
143
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 1);
144
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
145
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
146
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
147
148
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 2);
149
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
150
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
151
152
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 3);
153
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
154
}
155
156
void
test_limit
(
void
)
157
{
158
grn::dat::Trie
trie;
159
create_trie
(&trie);
160
161
grn::dat::PrefixCursor
cursor;
162
163
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 0,
164
grn::dat::MAX_UINT32
);
165
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
166
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
167
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
168
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
169
170
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 0, 3);
171
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
172
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
173
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
174
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
175
176
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 0, 2);
177
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
178
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
179
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
180
181
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 0, 1);
182
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
183
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
184
185
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 0, 0);
186
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
187
188
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 2, 100);
189
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
190
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
191
192
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0, 1, 1);
193
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
194
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
195
}
196
197
void
test_ascending_cursor
(
void
)
198
{
199
grn::dat::Trie
trie;
200
create_trie
(&trie);
201
202
grn::dat::PrefixCursor
cursor;
203
204
cursor.
open
(trie,
grn::dat::String
(
"京都府"
), 0,
205
0,
grn::dat::MAX_UINT32
,
grn::dat::ASCENDING_CURSOR
);
206
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
207
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
208
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
209
210
cursor.
open
(trie,
grn::dat::String
(
"京都府"
), std::strlen(
"京都"
),
211
0,
grn::dat::MAX_UINT32
,
grn::dat::ASCENDING_CURSOR
);
212
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
213
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
214
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
215
216
cursor.
open
(trie,
grn::dat::String
(
"京都府"
), 0,
217
1,
grn::dat::MAX_UINT32
,
grn::dat::ASCENDING_CURSOR
);
218
cppcut_assert_equal(
grn::dat::UInt32
(4), cursor.
next
().
id
());
219
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
220
221
cursor.
open
(trie,
grn::dat::String
(
"京都府"
), 0,
222
0, 1,
grn::dat::ASCENDING_CURSOR
);
223
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
224
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
225
}
226
227
void
test_descending_cursor
(
void
)
228
{
229
grn::dat::Trie
trie;
230
create_trie
(&trie);
231
232
grn::dat::PrefixCursor
cursor;
233
234
cursor.
open
(trie,
grn::dat::String
(
"東京都庁"
), 0,
235
0,
grn::dat::MAX_UINT32
,
grn::dat::DESCENDING_CURSOR
);
236
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
237
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
238
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
239
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
240
241
cursor.
open
(trie,
grn::dat::String
(
"東京都庁"
), std::strlen(
"東京都"
),
242
0,
grn::dat::MAX_UINT32
,
grn::dat::DESCENDING_CURSOR
);
243
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
244
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
245
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
246
247
cursor.
open
(trie,
grn::dat::String
(
"東京都庁"
), std::strlen(
"東京都"
),
248
1,
grn::dat::MAX_UINT32
,
grn::dat::DESCENDING_CURSOR
);
249
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
250
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
251
252
cursor.
open
(trie,
grn::dat::String
(
"東京都庁"
), std::strlen(
"東京都"
),
253
0, 1,
grn::dat::DESCENDING_CURSOR
);
254
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
255
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
256
257
cursor.
open
(trie,
grn::dat::String
(
"東京都庁"
), 0,
258
1,
grn::dat::MAX_UINT32
,
grn::dat::DESCENDING_CURSOR
);
259
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
260
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
261
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
262
263
cursor.
open
(trie,
grn::dat::String
(
"東京都庁"
), 0,
264
0, 2,
grn::dat::DESCENDING_CURSOR
);
265
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
266
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
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::PrefixCursor
cursor;
276
277
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), 0,
278
0,
grn::dat::MAX_UINT32
,
grn::dat::EXCEPT_EXACT_MATCH
);
279
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
280
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
281
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
282
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
283
284
cursor.
open
(trie,
grn::dat::String
(
"東京都庁ビル"
), std::strlen(
"東京"
),
285
0,
grn::dat::MAX_UINT32
,
grn::dat::EXCEPT_EXACT_MATCH
);
286
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
287
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
288
cppcut_assert_equal(
grn::dat::UInt32
(5), cursor.
next
().
id
());
289
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
290
291
cursor.
open
(trie,
grn::dat::String
(
"東京都庁"
), std::strlen(
"東京"
),
292
0,
grn::dat::MAX_UINT32
,
grn::dat::EXCEPT_EXACT_MATCH
);
293
cppcut_assert_equal(
grn::dat::UInt32
(1), cursor.
next
().
id
());
294
cppcut_assert_equal(
grn::dat::UInt32
(3), cursor.
next
().
id
());
295
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
296
297
cursor.
open
(trie,
grn::dat::String
(
"京都府"
), 0,
298
0,
grn::dat::MAX_UINT32
,
grn::dat::EXCEPT_EXACT_MATCH
);
299
cppcut_assert_equal(
grn::dat::UInt32
(2), cursor.
next
().
id
());
300
cppcut_assert_equal(
false
, cursor.
next
().
is_valid
());
301
}
302
}
Generated on Sun Nov 10 2013 09:49:04 for Groonga 3.0.9 Source Code Document by
1.8.1.2