mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
Logical combination: add streaming mode unit test MultiCombStream1.
This commit is contained in:
parent
64ea43ea39
commit
fdc3c290b6
@ -804,3 +804,66 @@ TEST(LogicalCombination, MultiCombPurelyNegativeUniSub6) {
|
||||
err = hs_free_scratch(scratch);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
}
|
||||
|
||||
TEST(LogicalCombination, MultiCombStream1) {
|
||||
hs_database_t *db = nullptr;
|
||||
hs_compile_error_t *compile_err = nullptr;
|
||||
CallBackContext c;
|
||||
string data[] = {"xxxxxxxabcxxxxxxxdefxxxghixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxxxxxxxxxxxxghixxxxxxxxxxxabcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxxxxxxxxxxxxdefxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxxxxxxxxxxxxxyzxxxxxxxxxxxxxxxxxxxxxghixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxghixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxy",
|
||||
"z"};
|
||||
const char *expr[] = {"abc", "def", "xyz", "zxyz",
|
||||
"101 & 102", "201 & !202"};
|
||||
unsigned flags[] = {0, 0, 0, 0, HS_FLAG_COMBINATION, HS_FLAG_COMBINATION};
|
||||
unsigned ids[] = {101, 102, 201, 202, 1001, 1002};
|
||||
hs_error_t err = hs_compile_multi(expr, flags, ids, 6, HS_MODE_STREAM,
|
||||
nullptr, &db, &compile_err);
|
||||
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
ASSERT_TRUE(db != nullptr);
|
||||
|
||||
hs_scratch_t *scratch = nullptr;
|
||||
err = hs_alloc_scratch(db, &scratch);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
ASSERT_TRUE(scratch != nullptr);
|
||||
|
||||
hs_stream_t *stream = nullptr;
|
||||
err = hs_open_stream(db, 0, &stream);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
ASSERT_TRUE(stream != nullptr);
|
||||
|
||||
c.halt = 0;
|
||||
int i;
|
||||
for (i = 0; i < 11; i++) {
|
||||
err = hs_scan_stream(stream, data[i].c_str(), data[i].size(), 0,
|
||||
scratch, record_cb, (void *)&c);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
}
|
||||
err = hs_close_stream(stream, scratch, dummy_cb, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
|
||||
ASSERT_EQ(11U, c.matches.size());
|
||||
ASSERT_EQ(MatchRecord(10, 101), c.matches[0]);
|
||||
ASSERT_EQ(MatchRecord(20, 102), c.matches[1]);
|
||||
ASSERT_EQ(MatchRecord(20, 1001), c.matches[2]);
|
||||
ASSERT_EQ(MatchRecord(109, 101), c.matches[3]);
|
||||
ASSERT_EQ(MatchRecord(109, 1001), c.matches[4]);
|
||||
ASSERT_EQ(MatchRecord(171, 102), c.matches[5]);
|
||||
ASSERT_EQ(MatchRecord(171, 1001), c.matches[6]);
|
||||
ASSERT_EQ(MatchRecord(247, 201), c.matches[7]);
|
||||
ASSERT_EQ(MatchRecord(247, 1002), c.matches[8]);
|
||||
ASSERT_EQ(MatchRecord(761, 201), c.matches[9]);
|
||||
ASSERT_EQ(MatchRecord(761, 202), c.matches[10]);
|
||||
|
||||
hs_free_database(db);
|
||||
err = hs_free_scratch(scratch);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user