summaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/jsonpath/rewrapper/ut/hyperscan_ut.cpp
blob: 3df53e44b0c8da0176a93859a500149a8ad31c91 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <yql/essentials/minikql/jsonpath/rewrapper/re.h>
#include <yql/essentials/minikql/jsonpath/rewrapper/proto/serialization.pb.h>

#include <library/cpp/testing/unittest/registar.h>
#include <library/cpp/regex/hyperscan/hyperscan.h>

namespace NReWrapper {
namespace NDispatcher {

Y_UNIT_TEST_SUITE(ReWrapperDispatcherTestHyperscan) {
    Y_UNIT_TEST(LegacySerialization) {
        unsigned int hyperscanFlags = 0;
        hyperscanFlags |= HS_FLAG_UTF8;
        if (NX86::HaveAVX2()) {
            hyperscanFlags |= HS_CPU_FEATURES_AVX2;
        }
        auto database = ::NHyperscan::Compile("[0-9]+", hyperscanFlags);
        auto string = ::NHyperscan::Serialize(database);

        auto wrapper = Deserialize(string);
        UNIT_ASSERT_VALUES_EQUAL(wrapper->Matches("123"), true);
        UNIT_ASSERT_VALUES_EQUAL(wrapper->Matches("abc"), false);
    }
    Y_UNIT_TEST(Serialization) {
        auto w1 = Compile("[0-9]+", 0, NReWrapper::TSerialization::kHyperscan);
        auto string = w1->Serialize();

        auto w2 = Deserialize(string);
        UNIT_ASSERT_VALUES_EQUAL(w1->Matches("123"), true);
        UNIT_ASSERT_VALUES_EQUAL(w1->Matches("abc"), false);
        UNIT_ASSERT_VALUES_EQUAL(w2->Matches("123"), true);
        UNIT_ASSERT_VALUES_EQUAL(w2->Matches("abc"), false);
    }
}

}
}