Merge pull request #13785 from taosdata/feature/TD-14761
fix: error in schemaless with same timestamp
This commit is contained in:
commit
a5bbc0a6ac
|
@ -1327,8 +1327,8 @@ static int32_t smlKvTimeArrayCompare(const void *key1, const void *key2) {
|
|||
static int32_t smlKvTimeHashCompare(const void *key1, const void *key2) {
|
||||
SHashObj *s1 = *(SHashObj **)key1;
|
||||
SHashObj *s2 = *(SHashObj **)key2;
|
||||
SSmlKv *kv1 = (SSmlKv *)taosHashGet(s1, TS, TS_LEN);
|
||||
SSmlKv *kv2 = (SSmlKv *)taosHashGet(s2, TS, TS_LEN);
|
||||
SSmlKv *kv1 = *(SSmlKv **)taosHashGet(s1, TS, TS_LEN);
|
||||
SSmlKv *kv2 = *(SSmlKv **)taosHashGet(s2, TS, TS_LEN);
|
||||
ASSERT(kv1->type == TSDB_DATA_TYPE_TIMESTAMP);
|
||||
ASSERT(kv2->type == TSDB_DATA_TYPE_TIMESTAMP);
|
||||
if (kv1->i < kv2->i) {
|
||||
|
@ -1340,29 +1340,13 @@ static int32_t smlKvTimeHashCompare(const void *key1, const void *key2) {
|
|||
}
|
||||
}
|
||||
|
||||
static int32_t smlDealCols(SSmlTableInfo *oneTable, bool dataFormat, SArray *cols) {
|
||||
if (dataFormat) {
|
||||
void *p = taosArraySearch(oneTable->cols, &cols, smlKvTimeArrayCompare, TD_GE);
|
||||
if (p == NULL) {
|
||||
static int32_t smlDealCols(SSmlTableInfo* oneTable, bool dataFormat, SArray *cols){
|
||||
if(dataFormat){
|
||||
void *p = taosArraySearch(oneTable->cols, &cols, smlKvTimeArrayCompare, TD_GT);
|
||||
if(p == NULL){
|
||||
taosArrayPush(oneTable->cols, &cols);
|
||||
} else { // to make the sort stable for update data
|
||||
SArray *sa = (SArray *)p;
|
||||
SSmlKv *cur = (SSmlKv *)taosArrayGet(sa, 0);
|
||||
SSmlKv *dCur = (SSmlKv *)taosArrayGet(cols, 0);
|
||||
if (cur->i > dCur->i) {
|
||||
taosArrayInsert(oneTable->cols, TARRAY_ELEM_IDX(oneTable->cols, p), &cols);
|
||||
} else {
|
||||
ASSERT(cur->i == dCur->i);
|
||||
int32_t index = TARRAY_ELEM_IDX(oneTable->cols, p) + 1;
|
||||
for (; index < taosArrayGetSize(oneTable->cols); index++) {
|
||||
SArray *tmp = (SArray *)taosArrayGet(oneTable->cols, index);
|
||||
SSmlKv *curTs = (SSmlKv *)taosArrayGet(tmp, 0);
|
||||
if (curTs->i > dCur->i) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
taosArrayInsert(oneTable->cols, index, &cols);
|
||||
}
|
||||
}else{
|
||||
taosArrayInsert(oneTable->cols, TARRAY_ELEM_IDX(oneTable->cols, p), &cols);
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
@ -1377,27 +1361,11 @@ static int32_t smlDealCols(SSmlTableInfo *oneTable, bool dataFormat, SArray *col
|
|||
taosHashPut(kvHash, kv->key, kv->keyLen, &kv, POINTER_BYTES);
|
||||
}
|
||||
|
||||
void *p = taosArraySearch(oneTable->cols, &kvHash, smlKvTimeHashCompare, TD_GE);
|
||||
if (p == NULL) {
|
||||
void *p = taosArraySearch(oneTable->cols, &kvHash, smlKvTimeHashCompare, TD_GT);
|
||||
if(p == NULL){
|
||||
taosArrayPush(oneTable->cols, &kvHash);
|
||||
} else { // to make the sort stable for update data
|
||||
SHashObj *sa = (SHashObj *)p;
|
||||
SSmlKv *cur = (SSmlKv *)taosHashGet(sa, TS, TS_LEN);
|
||||
SSmlKv *dCur = (SSmlKv *)taosArrayGet(cols, 0);
|
||||
if (cur->i > dCur->i) {
|
||||
taosArrayInsert(oneTable->cols, TARRAY_ELEM_IDX(oneTable->cols, p), &cols);
|
||||
} else {
|
||||
ASSERT(cur->i == dCur->i);
|
||||
int32_t index = TARRAY_ELEM_IDX(oneTable->cols, p) + 1;
|
||||
for (; index < taosArrayGetSize(oneTable->cols); index++) {
|
||||
SHashObj *tmp = (SHashObj *)taosArrayGet(oneTable->cols, index);
|
||||
SSmlKv *curTs = (SSmlKv *)taosHashGet(tmp, TS, TS_LEN);
|
||||
if (curTs->i > dCur->i) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
taosArrayInsert(oneTable->cols, index, &cols);
|
||||
}
|
||||
}else{
|
||||
taosArrayInsert(oneTable->cols, TARRAY_ELEM_IDX(oneTable->cols, p), &kvHash);
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -1260,4 +1260,28 @@ TEST(testCase, sml_16368_Test) {
|
|||
pRes = taos_schemaless_insert(taos, (char**)sql, sizeof(sql)/sizeof(sql[0]), TSDB_SML_JSON_PROTOCOL, TSDB_SML_TIMESTAMP_MICRO_SECONDS);
|
||||
ASSERT_EQ(taos_errno(pRes), 0);
|
||||
taos_free_result(pRes);
|
||||
}*/
|
||||
}
|
||||
|
||||
TEST(testCase, sml_dup_time_Test) {
|
||||
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||
ASSERT_NE(taos, nullptr);
|
||||
|
||||
TAOS_RES* pRes = taos_query(taos, "create database if not exists dup_time schemaless 1");
|
||||
taos_free_result(pRes);
|
||||
|
||||
const char *sql[] = {
|
||||
//"test_ms,t0=t c0=f 1626006833641",
|
||||
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=false,c1=1i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"xcxvwjvf\",c8=L\"ncharColValue\",c9=7u64 1626006833639000000",
|
||||
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=T,c1=2i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"fixrzcuq\",c8=L\"ncharColValue\",c9=7u64 1626006833639000000",
|
||||
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=3i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"iupzdqub\",c8=L\"ncharColValue\",c9=7u64 1626006833639000000",
|
||||
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=4i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"yvvtzzof\",c8=L\"ncharColValue\",c9=7u64 1626006833639000000",
|
||||
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=5i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"vbxpilkj\",c8=L\"ncharColValue\",c9=7u64 1626006833639000000"
|
||||
};
|
||||
pRes = taos_query(taos, "use dup_time");
|
||||
taos_free_result(pRes);
|
||||
|
||||
pRes = taos_schemaless_insert(taos, (char**)sql, sizeof(sql)/sizeof(sql[0]), TSDB_SML_LINE_PROTOCOL, 0);
|
||||
ASSERT_EQ(taos_errno(pRes), 0);
|
||||
taos_free_result(pRes);
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -283,6 +283,8 @@ void sortRemoveDataBlockDupRowsRaw(STableDataBlocks* dataBuf) {
|
|||
|
||||
if (!dataBuf->ordered) {
|
||||
char* pBlockData = pBlocks->data;
|
||||
|
||||
// todo. qsort is unstable, if timestamp is same, should get the last one
|
||||
qsort(pBlockData, pBlocks->numOfRows, dataBuf->rowSize, rowDataCompar);
|
||||
|
||||
int32_t i = 0;
|
||||
|
@ -350,6 +352,8 @@ int sortRemoveDataBlockDupRows(STableDataBlocks* dataBuf, SBlockKeyInfo* pBlkKey
|
|||
|
||||
if (!dataBuf->ordered) {
|
||||
pBlkKeyTuple = pBlkKeyInfo->pKeyTuple;
|
||||
|
||||
// todo. qsort is unstable, if timestamp is same, should get the last one
|
||||
qsort(pBlkKeyTuple, nRows, sizeof(SBlockKeyTuple), rowDataCompar);
|
||||
|
||||
pBlkKeyTuple = pBlkKeyInfo->pKeyTuple;
|
||||
|
|
|
@ -175,7 +175,13 @@ void *taosbsearch(const void *key, const void *base, int32_t nmemb, int32_t size
|
|||
|
||||
c = compar(key, p);
|
||||
if (c == 0) {
|
||||
break;
|
||||
if (flags == TD_GT){
|
||||
lidx = midx + 1;
|
||||
} else if(flags == TD_LT){
|
||||
ridx = midx - 1;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
} else if (c < 0) {
|
||||
ridx = midx - 1;
|
||||
} else {
|
||||
|
@ -189,6 +195,10 @@ void *taosbsearch(const void *key, const void *base, int32_t nmemb, int32_t size
|
|||
return (c <= 0) ? p : (midx + 1 < nmemb ? p + size : NULL);
|
||||
} else if (flags == TD_LE) {
|
||||
return (c >= 0) ? p : (midx > 0 ? p - size : NULL);
|
||||
} else if (flags == TD_GT) {
|
||||
return (c < 0) ? p : (midx + 1 < nmemb ? p + size : NULL);
|
||||
} else if (flags == TD_LT) {
|
||||
return (c > 0) ? p : (midx > 0 ? p - size : NULL);
|
||||
} else {
|
||||
ASSERT(0);
|
||||
}
|
||||
|
|
|
@ -248,6 +248,170 @@ TEST(testCase, taosbsearch_greater_or_equal) {
|
|||
ASSERT_EQ(pRet, nullptr);
|
||||
}
|
||||
|
||||
TEST(testCase, taosbsearch_greater) {
|
||||
// For equal test
|
||||
int key = 3;
|
||||
void *pRet = NULL;
|
||||
|
||||
pRet = taosbsearch((void *)&key, NULL, 0, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
// 1 element
|
||||
int array1[1] = {5};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array1, 1, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 5);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array1, 1, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 5;
|
||||
pRet = taosbsearch((void *)&key, (void *)array1, 1, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
// 2 element
|
||||
int array2[2] = {3, 6};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 3;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 4;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 7;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
// 3 element
|
||||
int array3[3] = {3, 6, 8};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 3;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 4;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 7;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 8;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 9;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
// 4 element
|
||||
int array4[4] = {3, 6, 8, 11};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 3;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 4;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 7;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 8;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 11);
|
||||
|
||||
key = 9;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 11);
|
||||
|
||||
key = 11;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 13;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
// 5 element
|
||||
int array5[5] = {3, 6, 8, 11, 15};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 3;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 4;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 7;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 8;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 11);
|
||||
|
||||
key = 9;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 11);
|
||||
|
||||
key = 11;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 15);
|
||||
|
||||
key = 13;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(*(int *)pRet, 15);
|
||||
|
||||
key = 15;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 17;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_GT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
}
|
||||
|
||||
TEST(testCase, taosbsearch_less_or_equal) {
|
||||
// For equal test
|
||||
int key = 3;
|
||||
|
@ -411,4 +575,168 @@ TEST(testCase, taosbsearch_less_or_equal) {
|
|||
key = 17;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LE);
|
||||
ASSERT_EQ(*(int *)pRet, 15);
|
||||
}
|
||||
|
||||
TEST(testCase, taosbsearch_less) {
|
||||
// For equal test
|
||||
int key = 3;
|
||||
void *pRet = NULL;
|
||||
|
||||
pRet = taosbsearch((void *)&key, NULL, 0, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
// 1 element
|
||||
int array1[1] = {5};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array1, 1, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array1, 1, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 5);
|
||||
|
||||
key = 5;
|
||||
pRet = taosbsearch((void *)&key, (void *)array1, 1, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
// 2 element
|
||||
int array2[2] = {3, 6};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 3;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 4;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 7;
|
||||
pRet = taosbsearch((void *)&key, (void *)array2, 2, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
// 3 element
|
||||
int array3[3] = {3, 6, 8};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 3;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 4;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 7;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 8;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 9;
|
||||
pRet = taosbsearch((void *)&key, (void *)array3, 3, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
// 4 element
|
||||
int array4[4] = {3, 6, 8, 11};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 3;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 4;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 7;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 8;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 9;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 11;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 13;
|
||||
pRet = taosbsearch((void *)&key, (void *)array4, 4, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 11);
|
||||
|
||||
// 5 element
|
||||
int array5[5] = {3, 6, 8, 11, 15};
|
||||
|
||||
key = 1;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 3;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(pRet, nullptr);
|
||||
|
||||
key = 4;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 6;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 3);
|
||||
|
||||
key = 7;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 8;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 6);
|
||||
|
||||
key = 9;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 11;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 8);
|
||||
|
||||
key = 13;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 11);
|
||||
|
||||
key = 15;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 11);
|
||||
|
||||
key = 17;
|
||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LT);
|
||||
ASSERT_EQ(*(int *)pRet, 15);
|
||||
}
|
Loading…
Reference in New Issue