rangeMergeTest.cpp 8.2 KB
Newer Older
W
wpan 已提交
1 2 3 4 5 6 7 8 9
#include <gtest/gtest.h>
#include <iostream>

#include "qResultbuf.h"
#include "taos.h"
#include "taosdef.h"

#include "qFilter.h"

S
Shengliang Guan 已提交
10
#pragma GCC diagnostic push
W
wpan 已提交
11 12 13
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wunused-variable"

W
wpan 已提交
14
extern "C" {
W
wpan 已提交
15 16 17 18
  extern void* filterInitRangeCtx(int32_t type, int32_t options);
  extern int32_t filterGetRangeNum(void* h, int32_t* num);
  extern int32_t filterGetRangeRes(void* h, SFilterRange *ra);
  extern int32_t filterFreeRangeCtx(void* h);
W
wpan 已提交
19
  extern int32_t filterAddRange(void* h, SFilterRange* ra, int32_t optr);
W
wpan 已提交
20 21
}

W
wpan 已提交
22 23
namespace {

W
wpan 已提交
24

W
wpan 已提交
25 26
void intDataTest() {
  printf("running %s\n", __FUNCTION__);
W
wpan 已提交
27
  int32_t asize = 0;
W
wpan 已提交
28
  SFilterRange ra[10] = {0};
W
wpan 已提交
29 30 31 32
  int64_t *s =NULL;
  int64_t *e =NULL;
  int64_t s0[3] = {-100, 1, 3};
  int64_t e0[3] = {0   , 2, 4};
W
wpan 已提交
33 34 35 36 37 38
  int64_t s1[3] = {INT64_MIN, 0 , 3};
  int64_t e1[3] = {100      , 50, 4};
  int64_t s2[5] = {1 , 3  , 10,30,70};
  int64_t e2[5] = {10, 100, 20,50,120};
  int64_t s3[3] = {1 , 20 , 5};
  int64_t e3[3] = {10, 100, 25};
W
wpan 已提交
39 40 41
  int64_t s4[2] = {10, 0};
  int64_t e4[2] = {20, 5};
  int64_t s5[3] = {0, 6 ,7};
W
wpan 已提交
42
  int64_t e5[3] = {4, 10,20};
W
wpan 已提交
43

W
wpan 已提交
44 45
  int64_t rs[10];
  int64_t re[10];
W
wpan 已提交
46 47

  int32_t num = 0;
W
wpan 已提交
48
  void *h = NULL;
W
wpan 已提交
49 50 51

  s = s0;
  e = e0;
W
wpan 已提交
52 53
  asize = sizeof(s0)/sizeof(s[0]);  
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
54
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
55
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
56 57
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
58
    filterAddRange(h, ra, TSDB_RELATION_AND);
W
wpan 已提交
59
  }
W
wpan 已提交
60
  filterGetRangeNum(h, &num);
W
wpan 已提交
61
  ASSERT_EQ(num, 0);
W
wpan 已提交
62
  filterFreeRangeCtx(h);
W
wpan 已提交
63 64


W
wpan 已提交
65
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
66
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
67
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
68 69
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
70
    
W
wpan 已提交
71
    filterAddRange(h, ra, TSDB_RELATION_OR);
W
wpan 已提交
72
  }
W
wpan 已提交
73
  filterGetRangeNum(h, &num);
W
wpan 已提交
74
  ASSERT_EQ(num, 3);
W
wpan 已提交
75
  filterGetRangeRes(h, ra);
W
wpan 已提交
76 77 78 79 80 81
  ASSERT_EQ(ra[0].s, -100);
  ASSERT_EQ(ra[0].e, 0);
  ASSERT_EQ(ra[1].s, 1);
  ASSERT_EQ(ra[1].e, 2);
  ASSERT_EQ(ra[2].s, 3);
  ASSERT_EQ(ra[2].e, 4);  
W
wpan 已提交
82
  filterFreeRangeCtx(h);
W
wpan 已提交
83 84


W
wpan 已提交
85
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
86
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, FI_OPTION_TIMESTAMP);
W
wpan 已提交
87
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
88 89
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
90
    
W
wpan 已提交
91
    filterAddRange(h, ra, TSDB_RELATION_OR);
W
wpan 已提交
92
  }
W
wpan 已提交
93
  filterGetRangeNum(h, &num);
W
wpan 已提交
94
  ASSERT_EQ(num, 1);
W
wpan 已提交
95
  filterGetRangeRes(h, ra);
W
wpan 已提交
96 97
  ASSERT_EQ(ra[0].s, -100);
  ASSERT_EQ(ra[0].e, 4);
W
wpan 已提交
98
  filterFreeRangeCtx(h);
W
wpan 已提交
99

W
wpan 已提交
100

W
wpan 已提交
101 102 103
  s = s1;
  e = e1;
  asize = sizeof(s1)/sizeof(s[0]);
W
wpan 已提交
104
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
105
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
106
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
107 108
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
109

W
wpan 已提交
110
    filterAddRange(h, ra, TSDB_RELATION_AND);
W
wpan 已提交
111
  }
W
wpan 已提交
112
  filterGetRangeNum(h, &num);
W
wpan 已提交
113
  ASSERT_EQ(num, 1);
W
wpan 已提交
114
  filterGetRangeRes(h, ra);
W
wpan 已提交
115 116
  ASSERT_EQ(ra[0].s, 3);
  ASSERT_EQ(ra[0].e, 4);
W
wpan 已提交
117
  filterFreeRangeCtx(h);
W
wpan 已提交
118 119


W
wpan 已提交
120
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
121
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
122
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
123 124
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
125
    
W
wpan 已提交
126
    filterAddRange(h, ra, TSDB_RELATION_OR);
W
wpan 已提交
127
  }
W
wpan 已提交
128
  filterGetRangeNum(h, &num);
W
wpan 已提交
129
  ASSERT_EQ(num, 1);
W
wpan 已提交
130
  filterGetRangeRes(h, ra);
W
wpan 已提交
131 132
  ASSERT_EQ(ra[0].s, INT64_MIN);
  ASSERT_EQ(ra[0].e, 100);
W
wpan 已提交
133
  filterFreeRangeCtx(h);
W
wpan 已提交
134 135


W
wpan 已提交
136

W
wpan 已提交
137 138 139
  s = s2;
  e = e2;
  asize = sizeof(s2)/sizeof(s[0]);
W
wpan 已提交
140
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
141
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
142
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
143 144
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
145
    
W
wpan 已提交
146
    filterAddRange(h, ra, TSDB_RELATION_AND);
W
wpan 已提交
147
  }
W
wpan 已提交
148
  filterGetRangeNum(h, &num);
W
wpan 已提交
149
  ASSERT_EQ(num, 0);
W
wpan 已提交
150
  filterFreeRangeCtx(h);
W
wpan 已提交
151 152


W
wpan 已提交
153
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
154
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
155
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
156 157
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
158
    
W
wpan 已提交
159
    filterAddRange(h, ra, TSDB_RELATION_OR);
W
wpan 已提交
160
  }
W
wpan 已提交
161
  filterGetRangeNum(h, &num);
W
wpan 已提交
162
  ASSERT_EQ(num, 1);
W
wpan 已提交
163
  filterGetRangeRes(h, ra);
W
wpan 已提交
164 165
  ASSERT_EQ(ra[0].s, 1);
  ASSERT_EQ(ra[0].e, 120);
W
wpan 已提交
166
  filterFreeRangeCtx(h);
W
wpan 已提交
167 168


W
wpan 已提交
169
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
170
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
171
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
172 173
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
174
    
W
wpan 已提交
175
    filterAddRange(h, ra, i % 2 ? TSDB_RELATION_OR : TSDB_RELATION_AND);
W
wpan 已提交
176
  }
W
wpan 已提交
177
  filterGetRangeNum(h, &num);
W
wpan 已提交
178
  ASSERT_EQ(num, 0);
W
wpan 已提交
179
  filterFreeRangeCtx(h);
W
wpan 已提交
180 181


W
wpan 已提交
182
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
183
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
184
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
185 186
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
187
    
W
wpan 已提交
188
    filterAddRange(h, ra, i % 2 ? TSDB_RELATION_AND : TSDB_RELATION_OR);
W
wpan 已提交
189
  }
W
wpan 已提交
190
  filterGetRangeNum(h, &num);
W
wpan 已提交
191
  ASSERT_EQ(num, 1);
W
wpan 已提交
192
  filterGetRangeRes(h, ra);
W
wpan 已提交
193 194
  ASSERT_EQ(ra[0].s, 70);
  ASSERT_EQ(ra[0].e, 120);  
W
wpan 已提交
195
  filterFreeRangeCtx(h);
W
wpan 已提交
196 197


W
wpan 已提交
198 199 200
  s = s3;
  e = e3;
  asize = sizeof(s3)/sizeof(s[0]);
W
wpan 已提交
201
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
202
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
203
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
204 205
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
206
    
W
wpan 已提交
207
    filterAddRange(h, ra, TSDB_RELATION_AND);
W
wpan 已提交
208
  }
W
wpan 已提交
209
  filterGetRangeNum(h, &num);
W
wpan 已提交
210
  ASSERT_EQ(num, 0);
W
wpan 已提交
211
  filterFreeRangeCtx(h);
W
wpan 已提交
212 213


W
wpan 已提交
214
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
215
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
216
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
217 218
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
219
    
W
wpan 已提交
220
    filterAddRange(h, ra, TSDB_RELATION_OR);
W
wpan 已提交
221
  }
W
wpan 已提交
222
  filterGetRangeNum(h, &num);
W
wpan 已提交
223
  ASSERT_EQ(num, 1);
W
wpan 已提交
224
  filterGetRangeRes(h, ra);
W
wpan 已提交
225 226
  ASSERT_EQ(ra[0].s, 1);
  ASSERT_EQ(ra[0].e, 100);
W
wpan 已提交
227
  filterFreeRangeCtx(h);
W
wpan 已提交
228 229 230 231 232 233 234




  s = s4;
  e = e4;
  asize = sizeof(s4)/sizeof(s[0]);
W
wpan 已提交
235
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
236
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
237
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
238 239
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
240
    
W
wpan 已提交
241
    filterAddRange(h, ra, TSDB_RELATION_AND);
W
wpan 已提交
242
  }
W
wpan 已提交
243
  filterGetRangeNum(h, &num);
W
wpan 已提交
244
  ASSERT_EQ(num, 0);
W
wpan 已提交
245
  filterFreeRangeCtx(h);
W
wpan 已提交
246 247


W
wpan 已提交
248
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
249
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
250
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
251 252
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
253
    
W
wpan 已提交
254
    filterAddRange(h, ra, TSDB_RELATION_OR);
W
wpan 已提交
255
  }
W
wpan 已提交
256
  filterGetRangeNum(h, &num);
W
wpan 已提交
257
  ASSERT_EQ(num, 2);
W
wpan 已提交
258
  filterGetRangeRes(h, ra);
W
wpan 已提交
259 260 261 262
  ASSERT_EQ(ra[0].s, 0);
  ASSERT_EQ(ra[0].e, 5);
  ASSERT_EQ(ra[1].s, 10);
  ASSERT_EQ(ra[1].e, 20);
W
wpan 已提交
263
  filterFreeRangeCtx(h);
W
wpan 已提交
264 265 266 267 268


  s = s5;
  e = e5;
  asize = sizeof(s5)/sizeof(s[0]);
W
wpan 已提交
269
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
270
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
271
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
272 273
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
274
    
W
wpan 已提交
275
    filterAddRange(h, ra, TSDB_RELATION_AND);
W
wpan 已提交
276
  }
W
wpan 已提交
277
  filterGetRangeNum(h, &num);
W
wpan 已提交
278
  ASSERT_EQ(num, 0);
W
wpan 已提交
279
  filterFreeRangeCtx(h);
W
wpan 已提交
280 281


W
wpan 已提交
282
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
283
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
284
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
285 286
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
287
    
W
wpan 已提交
288
    filterAddRange(h, ra, TSDB_RELATION_OR);
W
wpan 已提交
289
  }
W
wpan 已提交
290
  filterGetRangeNum(h, &num);
W
wpan 已提交
291
  ASSERT_EQ(num, 2);
W
wpan 已提交
292
  filterGetRangeRes(h, ra);
W
wpan 已提交
293 294 295 296
  ASSERT_EQ(ra[0].s, 0);
  ASSERT_EQ(ra[0].e, 4);
  ASSERT_EQ(ra[1].s, 6);
  ASSERT_EQ(ra[1].e, 20);
W
wpan 已提交
297
  filterFreeRangeCtx(h);
W
wpan 已提交
298 299


W
wpan 已提交
300
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
301
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
302
  for (int32_t i = 0; i < asize; ++i) {
W
wpan 已提交
303 304
    ra[0].s = s[i];
    ra[0].e = e[i];
W
wpan 已提交
305
    
W
wpan 已提交
306
    filterAddRange(h, ra, (i == (asize -1)) ? TSDB_RELATION_AND : TSDB_RELATION_OR);
W
wpan 已提交
307
  }
W
wpan 已提交
308
  filterGetRangeNum(h, &num);
W
wpan 已提交
309
  ASSERT_EQ(num, 1);
W
wpan 已提交
310
  filterGetRangeRes(h, ra);
W
wpan 已提交
311 312
  ASSERT_EQ(ra[0].s, 7);
  ASSERT_EQ(ra[0].e, 10);
W
wpan 已提交
313
  filterFreeRangeCtx(h);
W
wpan 已提交
314 315 316 317 318 319 320 321 322



  int64_t s6[2] = {0, 4};
  int64_t e6[2] = {4, 6};
  s = s6;
  e = e6;
  asize = sizeof(s6)/sizeof(s[0]);
  memset(ra, 0, sizeof(ra));
W
wpan 已提交
323
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
324 325 326 327 328 329 330
  for (int32_t i = 0; i < asize; ++i) {
    ra[0].eflag = 1;
    ra[1].sflag = 4;

    ra[i].s = s[i];
    ra[i].e = e[i];
    
W
wpan 已提交
331
    filterAddRange(h, ra + i, TSDB_RELATION_AND);
W
wpan 已提交
332
  }
W
wpan 已提交
333
  filterGetRangeNum(h, &num);
334
  ASSERT_EQ(num, 1);
W
wpan 已提交
335
  filterFreeRangeCtx(h);
W
wpan 已提交
336

W
wpan 已提交
337

W
wpan 已提交
338 339

  memset(ra, 0, sizeof(ra));
W
wpan 已提交
340
  h = filterInitRangeCtx(TSDB_DATA_TYPE_BIGINT, 0);
W
wpan 已提交
341 342 343 344 345 346 347
  for (int32_t i = 0; i < asize; ++i) {
    ra[0].eflag = 1;
    ra[1].sflag = 1;

    ra[i].s = s[i];
    ra[i].e = e[i];
    
W
wpan 已提交
348
    filterAddRange(h, ra + i, TSDB_RELATION_OR);
W
wpan 已提交
349
  }
W
wpan 已提交
350
  filterGetRangeNum(h, &num);
W
wpan 已提交
351 352 353 354 355 356 357
  ASSERT_EQ(num, 2);
  ASSERT_EQ(ra[0].s, 0);
  ASSERT_EQ(ra[0].e, 4);
  ASSERT_EQ(ra[0].eflag, 1);
  ASSERT_EQ(ra[1].s, 4);
  ASSERT_EQ(ra[1].e, 6);
  ASSERT_EQ(ra[1].sflag, 1);
W
wpan 已提交
358
  filterFreeRangeCtx(h);
W
wpan 已提交
359

W
wpan 已提交
360 361 362 363 364 365 366 367 368
}


}  // namespace

TEST(testCase, rangeMergeTest) {
  intDataTest();

}
S
Shengliang Guan 已提交
369 370

#pragma GCC diagnostic pop