@@ -21,6 +21,10 @@ static const int kIntTestBound = 1000001;
21
21
static const uint64_t kIntTestSkip = 10 ;
22
22
static const bool kIncludeDense = true ;
23
23
static const uint32_t kSparseDenseRatio = 0 ;
24
+ static const int kNumSuffixType = 4 ;
25
+ static const SuffixType kSuffixTypeList [kNumSuffixType ] = {kNone , kHash , kReal , kMixed };
26
+ static const int kNumSuffixLen = 6 ;
27
+ static const level_t kSuffixLenList [kNumSuffixLen ] = {1 , 3 , 7 , 8 , 13 , 26 };
24
28
static std::vector<std::string> words;
25
29
26
30
class DenseUnitTest : public ::testing::Test {
@@ -35,7 +39,7 @@ class DenseUnitTest : public ::testing::Test {
35
39
delete[] data_;
36
40
}
37
41
38
- void newBuilder (level_t suffix_len);
42
+ void newBuilder (SuffixType suffix_type, level_t suffix_len);
39
43
void truncateWordSuffixes ();
40
44
void fillinInts ();
41
45
void testSerialize ();
@@ -61,8 +65,17 @@ static int getMax(int a, int b) {
61
65
return a;
62
66
}
63
67
64
- void DenseUnitTest::newBuilder (level_t suffix_len) {
65
- builder_ = new SuRFBuilder (kIncludeDense , kSparseDenseRatio , kReal , 0 , suffix_len);
68
+ void DenseUnitTest::newBuilder (SuffixType suffix_type, level_t suffix_len) {
69
+ if (suffix_type == kNone )
70
+ builder_ = new SuRFBuilder (kIncludeDense , kSparseDenseRatio , kNone , 0 , 0 );
71
+ else if (suffix_type == kHash )
72
+ builder_ = new SuRFBuilder (kIncludeDense , kSparseDenseRatio , kHash , suffix_len, 0 );
73
+ else if (suffix_type == kReal )
74
+ builder_ = new SuRFBuilder (kIncludeDense , kSparseDenseRatio , kReal , 0 , suffix_len);
75
+ else if (suffix_type == kMixed )
76
+ builder_ = new SuRFBuilder (kIncludeDense , kSparseDenseRatio , kMixed , suffix_len, suffix_len);
77
+ else
78
+ builder_ = new SuRFBuilder (kIncludeDense , kSparseDenseRatio , kNone , 0 , 0 );
66
79
}
67
80
68
81
void DenseUnitTest::truncateWordSuffixes () {
@@ -127,36 +140,34 @@ void DenseUnitTest::testLookupWord() {
127
140
}
128
141
129
142
TEST_F (DenseUnitTest, lookupWordTest) {
130
- level_t suffix_len_array[ 5 ] = { 1 , 3 , 7 , 8 , 13 };
131
- for (int k = 0 ; k < 5 ; k++) {
132
- level_t suffix_len = suffix_len_array[k] ;
133
- newBuilder (suffix_len );
134
- builder_-> build (words );
135
- louds_dense_ = new LoudsDense (builder_ );
136
- testLookupWord () ;
137
- delete builder_ ;
138
- louds_dense_-> destroy () ;
139
- delete louds_dense_;
143
+ for ( int t = 0 ; t < kNumSuffixType ; t++) {
144
+ for (int k = 0 ; k < kNumSuffixLen ; k++) {
145
+ newBuilder ( kSuffixTypeList [t], kSuffixLenList [k]) ;
146
+ builder_-> build (words );
147
+ louds_dense_ = new LoudsDense (builder_ );
148
+ testLookupWord ( );
149
+ delete builder_ ;
150
+ louds_dense_-> destroy () ;
151
+ delete louds_dense_;
152
+ }
140
153
}
141
154
}
142
155
143
156
TEST_F (DenseUnitTest, serializeTest) {
144
- level_t suffix_len_array[5 ] = {1 , 3 , 7 , 8 , 13 };
145
- for (int k = 0 ; k < 5 ; k++) {
146
- level_t suffix_len = suffix_len_array[k];
147
- newBuilder (suffix_len);
148
- builder_->build (words);
149
- louds_dense_ = new LoudsDense (builder_);
150
-
151
- testSerialize ();
152
- testLookupWord ();
153
- delete builder_;
157
+ for (int t = 0 ; t < kNumSuffixType ; t++) {
158
+ for (int k = 0 ; k < kNumSuffixLen ; k++) {
159
+ newBuilder (kSuffixTypeList [t], kSuffixLenList [k]);
160
+ builder_->build (words);
161
+ louds_dense_ = new LoudsDense (builder_);
162
+ testSerialize ();
163
+ testLookupWord ();
164
+ delete builder_;
165
+ }
154
166
}
155
167
}
156
168
157
169
TEST_F (DenseUnitTest, lookupIntTest) {
158
- level_t suffix_len = 8 ;
159
- newBuilder (suffix_len);
170
+ newBuilder (kReal , 8 );
160
171
builder_->build (ints_);
161
172
louds_dense_ = new LoudsDense (builder_);
162
173
position_t out_node_num = 0 ;
@@ -177,55 +188,54 @@ TEST_F (DenseUnitTest, lookupIntTest) {
177
188
}
178
189
179
190
TEST_F (DenseUnitTest, moveToKeyGreaterThanWordTest) {
180
- level_t suffix_len_array[5 ] = {1 , 3 , 7 , 8 , 13 };
181
- for (int k = 0 ; k < 5 ; k++) {
182
- level_t suffix_len = suffix_len_array[k];
183
- newBuilder (suffix_len);
184
- builder_->build (words);
185
- louds_dense_ = new LoudsDense (builder_);
186
-
187
- bool inclusive = true ;
188
- for (int i = 0 ; i < 2 ; i++) {
189
- if (i == 1 )
190
- inclusive = false ;
191
- for (unsigned j = 0 ; j < words.size () - 1 ; j++) {
191
+ for (int t = 0 ; t < kNumSuffixType ; t++) {
192
+ for (int k = 0 ; k < kNumSuffixLen ; k++) {
193
+ newBuilder (kSuffixTypeList [t], kSuffixLenList [k]);
194
+ builder_->build (words);
195
+ louds_dense_ = new LoudsDense (builder_);
196
+
197
+ bool inclusive = true ;
198
+ for (int i = 0 ; i < 2 ; i++) {
199
+ if (i == 1 )
200
+ inclusive = false ;
201
+ for (unsigned j = 0 ; j < words.size () - 1 ; j++) {
202
+ LoudsDense::Iter iter (louds_dense_);
203
+ bool could_be_fp = louds_dense_->moveToKeyGreaterThan (words[j], inclusive, iter);
204
+
205
+ ASSERT_TRUE (iter.isValid ());
206
+ ASSERT_TRUE (iter.isComplete ());
207
+ std::string iter_key = iter.getKey ();
208
+ std::string word_prefix_fp = words[j].substr (0 , iter_key.length ());
209
+ std::string word_prefix_true = words[j+1 ].substr (0 , iter_key.length ());
210
+ bool is_prefix = false ;
211
+ if (could_be_fp)
212
+ is_prefix = (word_prefix_fp.compare (iter_key) == 0 );
213
+ else
214
+ is_prefix = (word_prefix_true.compare (iter_key) == 0 );
215
+ ASSERT_TRUE (is_prefix);
216
+ }
217
+
192
218
LoudsDense::Iter iter (louds_dense_);
193
- bool could_be_fp = louds_dense_->moveToKeyGreaterThan (words[j], inclusive, iter);
194
-
195
- ASSERT_TRUE (iter.isValid ());
196
- ASSERT_TRUE (iter.isComplete ());
197
- std::string iter_key = iter.getKey ();
198
- std::string word_prefix_fp = words[j].substr (0 , iter_key.length ());
199
- std::string word_prefix_true = words[j+1 ].substr (0 , iter_key.length ());
200
- bool is_prefix = false ;
201
- if (could_be_fp)
202
- is_prefix = (word_prefix_fp.compare (iter_key) == 0 );
203
- else
204
- is_prefix = (word_prefix_true.compare (iter_key) == 0 );
205
- ASSERT_TRUE (is_prefix);
219
+ bool could_be_fp = louds_dense_->moveToKeyGreaterThan (words[words.size () - 1 ], inclusive, iter);
220
+ if (could_be_fp) {
221
+ std::string iter_key = iter.getKey ();
222
+ std::string word_prefix_fp = words[words.size () - 1 ].substr (0 , iter_key.length ());
223
+ bool is_prefix = (word_prefix_fp.compare (iter_key) == 0 );
224
+ ASSERT_TRUE (is_prefix);
225
+ } else {
226
+ ASSERT_FALSE (iter.isValid ());
227
+ }
206
228
}
207
229
208
- LoudsDense::Iter iter (louds_dense_);
209
- bool could_be_fp = louds_dense_->moveToKeyGreaterThan (words[words.size () - 1 ], inclusive, iter);
210
- if (could_be_fp) {
211
- std::string iter_key = iter.getKey ();
212
- std::string word_prefix_fp = words[words.size () - 1 ].substr (0 , iter_key.length ());
213
- bool is_prefix = (word_prefix_fp.compare (iter_key) == 0 );
214
- ASSERT_TRUE (is_prefix);
215
- } else {
216
- ASSERT_FALSE (iter.isValid ());
217
- }
230
+ delete builder_;
231
+ louds_dense_->destroy ();
232
+ delete louds_dense_;
218
233
}
219
-
220
- delete builder_;
221
- louds_dense_->destroy ();
222
- delete louds_dense_;
223
234
}
224
235
}
225
236
226
237
TEST_F (DenseUnitTest, moveToKeyGreaterThanIntTest) {
227
- level_t suffix_len = 8 ;
228
- newBuilder (suffix_len);
238
+ newBuilder (kReal , 8 );
229
239
builder_->build (ints_);
230
240
louds_dense_ = new LoudsDense (builder_);
231
241
@@ -271,8 +281,7 @@ TEST_F (DenseUnitTest, moveToKeyGreaterThanIntTest) {
271
281
}
272
282
273
283
TEST_F (DenseUnitTest, IteratorIncrementWordTest) {
274
- level_t suffix_len = 8 ;
275
- newBuilder (suffix_len);
284
+ newBuilder (kReal , 8 );
276
285
builder_->build (words);
277
286
louds_dense_ = new LoudsDense (builder_);
278
287
bool inclusive = true ;
@@ -295,8 +304,7 @@ TEST_F (DenseUnitTest, IteratorIncrementWordTest) {
295
304
}
296
305
297
306
TEST_F (DenseUnitTest, IteratorIncrementIntTest) {
298
- level_t suffix_len = 8 ;
299
- newBuilder (suffix_len);
307
+ newBuilder (kReal , 8 );
300
308
builder_->build (ints_);
301
309
louds_dense_ = new LoudsDense (builder_);
302
310
bool inclusive = true ;
@@ -319,8 +327,7 @@ TEST_F (DenseUnitTest, IteratorIncrementIntTest) {
319
327
}
320
328
321
329
TEST_F (DenseUnitTest, IteratorDecrementWordTest) {
322
- level_t suffix_len = 8 ;
323
- newBuilder (suffix_len);
330
+ newBuilder (kReal , 8 );
324
331
builder_->build (words);
325
332
louds_dense_ = new LoudsDense (builder_);
326
333
bool inclusive = true ;
@@ -343,8 +350,7 @@ TEST_F (DenseUnitTest, IteratorDecrementWordTest) {
343
350
}
344
351
345
352
TEST_F (DenseUnitTest, IteratorDecrementIntTest) {
346
- level_t suffix_len = 8 ;
347
- newBuilder (suffix_len);
353
+ newBuilder (kReal , 8 );
348
354
builder_->build (ints_);
349
355
louds_dense_ = new LoudsDense (builder_);
350
356
bool inclusive = true ;
0 commit comments