From 5f0fd023cb157e7b1cd65edafe106acc3ebfcca0 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 3 Dec 2021 10:45:32 +0800 Subject: [PATCH] add test case --- source/libs/index/inc/index_fst.h | 9 ++ source/libs/index/inc/index_fst_automation.h | 8 +- source/libs/index/inc/index_fst_common.h | 9 ++ .../index/inc/index_fst_counting_writer.h | 8 ++ source/libs/index/inc/index_fst_node.h | 8 ++ source/libs/index/inc/index_fst_registry.h | 8 ++ source/libs/index/inc/index_fst_util.h | 7 ++ source/libs/index/src/index_fst.c | 8 +- .../index/src/index_fst_counting_writer.c | 2 +- source/libs/index/test/CMakeLists.txt | 1 - source/libs/index/test/indexTests.cpp | 119 ++++++++++-------- 11 files changed, 131 insertions(+), 56 deletions(-) diff --git a/source/libs/index/inc/index_fst.h b/source/libs/index/inc/index_fst.h index 96838d5843..eb288e0aa2 100644 --- a/source/libs/index/inc/index_fst.h +++ b/source/libs/index/inc/index_fst.h @@ -16,6 +16,9 @@ #ifndef __INDEX_FST_H__ #define __INDEX_FST_H__ +#ifdef __cplusplus +extern "C" { +#endif #include "tarray.h" #include "index_fst_util.h" @@ -98,6 +101,7 @@ FstBuilder *fstBuilderCreate(void *w, FstType ty); void fstBuilderDestroy(FstBuilder *b); void fstBuilderInsertOutput(FstBuilder *b, FstSlice bs, Output in); +bool fstBuilderInsert(FstBuilder *b, FstSlice bs, Output in); OrderType fstBuilderCheckLastKey(FstBuilder *b, FstSlice bs, bool ckDup); void fstBuilderCompileFrom(FstBuilder *b, uint64_t istate); CompiledAddr fstBuilderCompile(FstBuilder *b, FstBuilderNode *bn); @@ -324,4 +328,9 @@ FstStreamBuilder *fstStreamBuilderCreate(Fst *fst, Automation *aut); FstStreamBuilder *fstStreamBuilderRange(FstStreamBuilder *b, FstSlice *val, RangeType type); + +#ifdef __cplusplus +} +#endif + #endif diff --git a/source/libs/index/inc/index_fst_automation.h b/source/libs/index/inc/index_fst_automation.h index c9df9c219e..480d3110c4 100644 --- a/source/libs/index/inc/index_fst_automation.h +++ b/source/libs/index/inc/index_fst_automation.h @@ -15,6 +15,10 @@ #ifndef __INDEX_FST_AUTAOMATION_H__ #define __INDEX_FST_AUTAOMATION_H__ +#ifdef __cplusplus +extern "C" { +#endif + typedef struct AutomationCtx AutomationCtx; typedef struct StartWith { @@ -42,6 +46,8 @@ typedef struct Automation { void *data; } Automation; - +#ifdef __cplusplus +} +#endif #endif diff --git a/source/libs/index/inc/index_fst_common.h b/source/libs/index/inc/index_fst_common.h index b261f4090c..9c802faa33 100644 --- a/source/libs/index/inc/index_fst_common.h +++ b/source/libs/index/inc/index_fst_common.h @@ -1,7 +1,16 @@ #ifndef __INDEX_FST_COMM_H__ #define __INDEX_FST_COMM_H__ + extern const uint8_t COMMON_INPUTS[]; extern char const COMMON_INPUTS_INV[]; +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + #endif diff --git a/source/libs/index/inc/index_fst_counting_writer.h b/source/libs/index/inc/index_fst_counting_writer.h index 42d77cacb0..9280461780 100644 --- a/source/libs/index/inc/index_fst_counting_writer.h +++ b/source/libs/index/inc/index_fst_counting_writer.h @@ -16,6 +16,10 @@ #ifndef __INDEX_FST_COUNTING_WRITER_H__ #define __INDEX_FST_COUNTING_WRITER_H__ +#ifdef __cplusplus +extern "C" { +#endif + #include "tfile.h" @@ -72,6 +76,10 @@ uint8_t fstCountingWriterPackUint(FstCountingWriter *writer, uint64_t n); #define FST_WRITER_INTER_WRITER(writer) (writer->wtr) #define FST_WRITE_CHECK_SUMMER(writer) (writer->summer) +#ifdef __cplusplus +} +#endif + #endif diff --git a/source/libs/index/inc/index_fst_node.h b/source/libs/index/inc/index_fst_node.h index 0645aa1158..d1b45a16ab 100644 --- a/source/libs/index/inc/index_fst_node.h +++ b/source/libs/index/inc/index_fst_node.h @@ -16,6 +16,10 @@ #ifndef __INDEX_FST_NODE_H__ #define __INDEX_FST_NODE_H__ +#ifdef __cplusplus +extern "C" { +#endif + #include "index_fst_util.h" #include "index_fst_counting_writer.h" @@ -45,4 +49,8 @@ void fstBuilderNodeCloneFrom(FstBuilderNode *dst, FstBuilderNode *src); void fstBuilderNodeDestroy(FstBuilderNode *node); +#ifdef __cplusplus +} +#endif + #endif diff --git a/source/libs/index/inc/index_fst_registry.h b/source/libs/index/inc/index_fst_registry.h index 2504d7ccff..1d89e57e52 100644 --- a/source/libs/index/inc/index_fst_registry.h +++ b/source/libs/index/inc/index_fst_registry.h @@ -15,6 +15,10 @@ #ifndef __FST_REGISTRY_H__ #define __FST_REGISTRY_H__ +#ifdef __cplusplus +extern "C" { +#endif + #include "index_fst_util.h" #include "tarray.h" #include "index_fst_node.h" @@ -59,4 +63,8 @@ void fstRegistryDestroy(FstRegistry *registry); FstRegistryEntry* fstRegistryGetEntry(FstRegistry *registry, FstBuilderNode *bNode); void fstRegistryEntryDestroy(FstRegistryEntry *entry); +#ifdef __cplusplus +} +#endif + #endif diff --git a/source/libs/index/inc/index_fst_util.h b/source/libs/index/inc/index_fst_util.h index d87e5bd57e..4af885816f 100644 --- a/source/libs/index/inc/index_fst_util.h +++ b/source/libs/index/inc/index_fst_util.h @@ -17,6 +17,10 @@ #ifndef __INDEX_FST_UTIL_H__ #define __INDEX_FST_UTIL_H__ +#ifdef __cplusplus +extern "C" { +#endif + #include "tarray.h" #include "index_fst_common.h" @@ -89,5 +93,8 @@ uint8_t *fstSliceData(FstSlice *s, int32_t *sz); #define FST_SLICE_LEN(s) (s->end - s->start + 1) +#ifdef __cplusplus +} +#endif #endif diff --git a/source/libs/index/src/index_fst.c b/source/libs/index/src/index_fst.c index 68d2011b8f..9e5c1f5d78 100644 --- a/source/libs/index/src/index_fst.c +++ b/source/libs/index/src/index_fst.c @@ -52,7 +52,7 @@ void fstUnFinishedNodesPushEmpty(FstUnFinishedNodes *nodes, bool isFinal) { FstBuilderNode *node = malloc(sizeof(FstBuilderNode)); node->isFinal = isFinal; node->finalOutput = 0; - node->trans = NULL; + node->trans = taosArrayInit(16, sizeof(FstTransition)); FstBuilderNodeUnfinished un = {.node = node, .last = NULL}; taosArrayPush(nodes->stack, &un); @@ -112,7 +112,7 @@ void fstUnFinishedNodesAddSuffix(FstUnFinishedNodes *nodes, FstSlice bs, Output FstBuilderNode *n = malloc(sizeof(FstBuilderNode)); n->isFinal = false; n->finalOutput = 0; - n->trans = NULL; + n->trans = taosArrayInit(16, sizeof(FstTransition)); //FstLastTransition *trn = malloc(sizeof(FstLastTransition)); //trn->inp = s->data[i]; @@ -806,13 +806,13 @@ void fstBuilderInsertOutput(FstBuilder *b, FstSlice bs, Output in) { fstUnFinishedNodesSetRootOutput(b->unfinished, in); return; } - Output out; //if (in != 0) { //if let Some(in) = in // prefixLen = fstUnFinishedNodesFindCommPrefixAndSetOutput(b->unfinished, bs, in, &out); //} else { // prefixLen = fstUnFinishedNodesFindCommPrefix(b->unfinished, bs); // out = 0; //} + Output out; uint64_t prefixLen = fstUnFinishedNodesFindCommPrefixAndSetOutput(b->unfinished, bs, in, &out); if (prefixLen == FST_SLICE_LEN(s)) { @@ -857,7 +857,7 @@ void fstBuilderCompileFrom(FstBuilder *b, uint64_t istate) { } addr = fstBuilderCompile(b, n); assert(addr != NONE_ADDRESS); - fstBuilderNodeDestroy(n); + //fstBuilderNodeDestroy(n); } fstUnFinishedNodesTopLastFreeze(b->unfinished, addr); return; diff --git a/source/libs/index/src/index_fst_counting_writer.c b/source/libs/index/src/index_fst_counting_writer.c index f04f6eddad..1989a5a425 100644 --- a/source/libs/index/src/index_fst_counting_writer.c +++ b/source/libs/index/src/index_fst_counting_writer.c @@ -81,7 +81,7 @@ FstCountingWriter *fstCountingWriterCreate(void *wrt) { FstCountingWriter *cw = calloc(1, sizeof(FstCountingWriter)); if (cw == NULL) { return NULL; } - cw->wrt = (void *)(writerCtxCreate(TMemory)); + cw->wrt = (void *)(writerCtxCreate(TFile)); return cw; } void fstCountingWriterDestroy(FstCountingWriter *cw) { diff --git a/source/libs/index/test/CMakeLists.txt b/source/libs/index/test/CMakeLists.txt index f2a7442a5a..f84f874a23 100644 --- a/source/libs/index/test/CMakeLists.txt +++ b/source/libs/index/test/CMakeLists.txt @@ -1,7 +1,6 @@ add_executable(indexTest "") target_sources(indexTest PRIVATE - "../src/index.c" "indexTests.cpp" ) target_include_directories ( indexTest diff --git a/source/libs/index/test/indexTests.cpp b/source/libs/index/test/indexTests.cpp index 857060ce5e..b94a241489 100644 --- a/source/libs/index/test/indexTests.cpp +++ b/source/libs/index/test/indexTests.cpp @@ -3,58 +3,79 @@ #include #include "index.h" #include "indexInt.h" +#include "index_fst.h" +#include "index_fst_util.h" +#include "index_fst_counting_writer.h" -TEST(IndexTest, index_create_test) { - SIndexOpts *opts = indexOptsCreate(); - SIndex *index = indexOpen(opts, "./test"); - if (index == NULL) { - std::cout << "index open failed" << std::endl; - } +//TEST(IndexTest, index_create_test) { +// SIndexOpts *opts = indexOptsCreate(); +// SIndex *index = indexOpen(opts, "./test"); +// if (index == NULL) { +// std::cout << "index open failed" << std::endl; +// } +// +// +// // write +// for (int i = 0; i < 100000; i++) { +// SIndexMultiTerm* terms = indexMultiTermCreate(); +// std::string val = "field"; +// +// indexMultiTermAdd(terms, "tag1", strlen("tag1"), val.c_str(), val.size()); +// +// val.append(std::to_string(i)); +// indexMultiTermAdd(terms, "tag2", strlen("tag2"), val.c_str(), val.size()); +// +// val.insert(0, std::to_string(i)); +// indexMultiTermAdd(terms, "tag3", strlen("tag3"), val.c_str(), val.size()); +// +// val.append("const"); +// indexMultiTermAdd(terms, "tag4", strlen("tag4"), val.c_str(), val.size()); +// +// +// indexPut(index, terms, i); +// indexMultiTermDestroy(terms); +// } +// +// +// // query +// SIndexMultiTermQuery *multiQuery = indexMultiTermQueryCreate(MUST); +// +// indexMultiTermQueryAdd(multiQuery, "tag1", strlen("tag1"), "field", strlen("field"), QUERY_PREFIX); +// indexMultiTermQueryAdd(multiQuery, "tag3", strlen("tag3"), "0field0", strlen("0field0"), QUERY_TERM); +// +// SArray *result = (SArray *)taosArrayInit(10, sizeof(int)); +// indexSearch(index, multiQuery, result); +// +// std::cout << "taos'size : " << taosArrayGetSize(result) << std::endl; +// for (int i = 0; i < taosArrayGetSize(result); i++) { +// int *v = (int *)taosArrayGet(result, i); +// std::cout << "value --->" << *v << std::endl; +// } +// // add more test case +// indexMultiTermQueryDestroy(multiQuery); +// +// indexOptsDestroy(opts); +// indexClose(index); +// // +//} - - // write - for (int i = 0; i < 100000; i++) { - SIndexMultiTerm* terms = indexMultiTermCreate(); - std::string val = "field"; - - indexMultiTermAdd(terms, "tag1", strlen("tag1"), val.c_str(), val.size()); - - val.append(std::to_string(i)); - indexMultiTermAdd(terms, "tag2", strlen("tag2"), val.c_str(), val.size()); - - val.insert(0, std::to_string(i)); - indexMultiTermAdd(terms, "tag3", strlen("tag3"), val.c_str(), val.size()); - - val.append("const"); - indexMultiTermAdd(terms, "tag4", strlen("tag4"), val.c_str(), val.size()); - - - indexPut(index, terms, i); - indexMultiTermDestroy(terms); - } - - - // query - SIndexMultiTermQuery *multiQuery = indexMultiTermQueryCreate(MUST); - - indexMultiTermQueryAdd(multiQuery, "tag1", strlen("tag1"), "field", strlen("field"), QUERY_PREFIX); - indexMultiTermQueryAdd(multiQuery, "tag3", strlen("tag3"), "0field0", strlen("0field0"), QUERY_TERM); - - SArray *result = (SArray *)taosArrayInit(10, sizeof(int)); - indexSearch(index, multiQuery, result); - - std::cout << "taos'size : " << taosArrayGetSize(result) << std::endl; - for (int i = 0; i < taosArrayGetSize(result); i++) { - int *v = (int *)taosArrayGet(result, i); - std::cout << "value --->" << *v << std::endl; - } - // add more test case - indexMultiTermQueryDestroy(multiQuery); - - indexOptsDestroy(opts); - indexClose(index); - // +int main(int argc, char** argv) { + std::string str("Hello world"); + FstSlice key = fstSliceCreate((uint8_t *)str.c_str(), str.size()); + Output val = 10; + FstBuilder *b = fstBuilderCreate(NULL, 1); + fstBuilderInsert(b, key, val); + fstBuilderFinish(b); + fstBuilderDestroy(b); + fstSliceDestroy(&key); + return 1; } + +//TEST(IndexFstBuilder, IndexFstInput) { +// +//} + +