]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
Logical combination: add streaming mode unit test MultiCombStream1.
authorChang, Harry <harry.chang@intel.com>
Fri, 7 Jun 2019 03:38:37 +0000 (11:38 +0800)
committerChang, Harry <harry.chang@intel.com>
Tue, 13 Aug 2019 06:50:32 +0000 (14:50 +0800)
unit/hyperscan/logical_combination.cpp

index 5b1c1ec2843cb109999c97005cc42e3d9b10917e..49854be1368c34af75775e2bbc94addd8eecbb27 100644 (file)
@@ -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);
+}