fix: error in schemaless with same timestamp
This commit is contained in:
parent
4481bb4e5c
commit
5ffb01b2e6
|
@ -1312,27 +1312,11 @@ static int32_t smlKvTimeHashCompare(const void* key1, const void* key2) {
|
||||||
|
|
||||||
static int32_t smlDealCols(SSmlTableInfo* oneTable, bool dataFormat, SArray *cols){
|
static int32_t smlDealCols(SSmlTableInfo* oneTable, bool dataFormat, SArray *cols){
|
||||||
if(dataFormat){
|
if(dataFormat){
|
||||||
void *p = taosArraySearch(oneTable->cols, &cols, smlKvTimeArrayCompare, TD_GE);
|
void *p = taosArraySearch(oneTable->cols, &cols, smlKvTimeArrayCompare, TD_GT);
|
||||||
if(p == NULL){
|
if(p == NULL){
|
||||||
taosArrayPush(oneTable->cols, &cols);
|
taosArrayPush(oneTable->cols, &cols);
|
||||||
}else{ // to make the sort stable for update data
|
}else{
|
||||||
SArray *sa = *(SArray **)p;
|
taosArrayInsert(oneTable->cols, TARRAY_ELEM_IDX(oneTable->cols, p), &cols);
|
||||||
SSmlKv *cur = (SSmlKv*)taosArrayGetP(sa, 0);
|
|
||||||
SSmlKv *dCur = (SSmlKv*)taosArrayGetP(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 *)taosArrayGetP(oneTable->cols, index);
|
|
||||||
SSmlKv *curTs = (SSmlKv*)taosArrayGetP(tmp, 0);
|
|
||||||
if(curTs->i > dCur->i){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
taosArrayInsert(oneTable->cols, index, &cols);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1347,29 +1331,14 @@ static int32_t smlDealCols(SSmlTableInfo* oneTable, bool dataFormat, SArray *col
|
||||||
taosHashPut(kvHash, kv->key, kv->keyLen, &kv, POINTER_BYTES);
|
taosHashPut(kvHash, kv->key, kv->keyLen, &kv, POINTER_BYTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *p = taosArraySearch(oneTable->cols, &kvHash, smlKvTimeHashCompare, TD_GE);
|
void *p = taosArraySearch(oneTable->cols, &kvHash, smlKvTimeHashCompare, TD_GT);
|
||||||
if(p == NULL){
|
if(p == NULL){
|
||||||
taosArrayPush(oneTable->cols, &kvHash);
|
taosArrayPush(oneTable->cols, &kvHash);
|
||||||
}else{ // to make the sort stable for update data
|
}else{
|
||||||
SHashObj *sa = *(SHashObj **)p;
|
taosArrayInsert(oneTable->cols, TARRAY_ELEM_IDX(oneTable->cols, p), &kvHash);
|
||||||
SSmlKv *cur = *(SSmlKv **)taosHashGet(sa, TS, TS_LEN);
|
|
||||||
SSmlKv *dCur = (SSmlKv*)taosArrayGetP(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 *)taosArrayGetP(oneTable->cols, index);
|
|
||||||
SSmlKv *curTs = *(SSmlKv **)taosHashGet(tmp, TS, TS_LEN);
|
|
||||||
if(curTs->i > dCur->i){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
taosArrayInsert(oneTable->cols, index, &kvHash);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SSmlSTableMeta* smlBuildSTableMeta(){
|
static SSmlSTableMeta* smlBuildSTableMeta(){
|
||||||
|
|
|
@ -283,6 +283,8 @@ void sortRemoveDataBlockDupRowsRaw(STableDataBlocks* dataBuf) {
|
||||||
|
|
||||||
if (!dataBuf->ordered) {
|
if (!dataBuf->ordered) {
|
||||||
char* pBlockData = pBlocks->data;
|
char* pBlockData = pBlocks->data;
|
||||||
|
|
||||||
|
// todo. qsort is unstable, if timestamp is same, should get the last one
|
||||||
qsort(pBlockData, pBlocks->numOfRows, dataBuf->rowSize, rowDataCompar);
|
qsort(pBlockData, pBlocks->numOfRows, dataBuf->rowSize, rowDataCompar);
|
||||||
|
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
|
@ -350,6 +352,8 @@ int sortRemoveDataBlockDupRows(STableDataBlocks* dataBuf, SBlockKeyInfo* pBlkKey
|
||||||
|
|
||||||
if (!dataBuf->ordered) {
|
if (!dataBuf->ordered) {
|
||||||
pBlkKeyTuple = pBlkKeyInfo->pKeyTuple;
|
pBlkKeyTuple = pBlkKeyInfo->pKeyTuple;
|
||||||
|
|
||||||
|
// todo. qsort is unstable, if timestamp is same, should get the last one
|
||||||
qsort(pBlkKeyTuple, nRows, sizeof(SBlockKeyTuple), rowDataCompar);
|
qsort(pBlkKeyTuple, nRows, sizeof(SBlockKeyTuple), rowDataCompar);
|
||||||
|
|
||||||
pBlkKeyTuple = pBlkKeyInfo->pKeyTuple;
|
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);
|
c = compar(key, p);
|
||||||
if (c == 0) {
|
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) {
|
} else if (c < 0) {
|
||||||
ridx = midx - 1;
|
ridx = midx - 1;
|
||||||
} else {
|
} 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);
|
return (c <= 0) ? p : (midx + 1 < nmemb ? p + size : NULL);
|
||||||
} else if (flags == TD_LE) {
|
} else if (flags == TD_LE) {
|
||||||
return (c >= 0) ? p : (midx > 0 ? p - size : NULL);
|
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 {
|
} else {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -248,6 +248,170 @@ TEST(testCase, taosbsearch_greater_or_equal) {
|
||||||
ASSERT_EQ(pRet, nullptr);
|
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) {
|
TEST(testCase, taosbsearch_less_or_equal) {
|
||||||
// For equal test
|
// For equal test
|
||||||
int key = 3;
|
int key = 3;
|
||||||
|
@ -411,4 +575,168 @@ TEST(testCase, taosbsearch_less_or_equal) {
|
||||||
key = 17;
|
key = 17;
|
||||||
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LE);
|
pRet = taosbsearch((void *)&key, (void *)array5, 5, sizeof(int), compareFunc, TD_LE);
|
||||||
ASSERT_EQ(*(int *)pRet, 15);
|
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