mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-09-29 19:24:25 +03:00
masked version of dverm
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
* Copyright (c) 2015-2016, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
@@ -345,3 +345,179 @@ TEST(NVermicelli, Exec4) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(DoubleVermicelliMasked, ExecNoMatch1) {
|
||||
std::string t1("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
||||
const u8 *t1_raw = (const u8 *)t1.c_str();
|
||||
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
for (size_t j = 0; j < 16; j++) {
|
||||
const u8 *rv = vermicelliDoubleMaskedExec('a', 'b', 0xff, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i - j);
|
||||
|
||||
ASSERT_EQ(((size_t)t1_raw + t1.length() - i - j - 1) & BOUND, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('B', 'b', 0xff, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i - j);
|
||||
|
||||
ASSERT_EQ(((size_t)t1_raw + t1.length() - i - j - 1) & BOUND, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'B', CASE_CLEAR, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() -i - j);
|
||||
|
||||
ASSERT_EQ(((size_t)t1_raw + t1.length() - i - j - 1) & BOUND, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('b', 'B', CASE_CLEAR, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i - j);
|
||||
|
||||
ASSERT_EQ(((size_t)t1_raw + t1.length() - i - j - 1) & BOUND, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('B', 'A', 0xff, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i - j);
|
||||
|
||||
ASSERT_EQ(((size_t)t1_raw + t1.length() - i - j - 1) & BOUND, (size_t)rv);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST(DoubleVermicelliMasked, Exec1) {
|
||||
std::string t1("bbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbb");
|
||||
const u8 *t1_raw = (const u8 *)t1.c_str();
|
||||
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
const u8 *rv = vermicelliDoubleMaskedExec('a', 'b', 0xff, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 18, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'B', CASE_CLEAR, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 18, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('a', 'B', 0xff, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 18, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'b', CASE_CLEAR, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 18, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('b', 'a', 0xff, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('B', 'A', CASE_CLEAR, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(DoubleVermicelliMasked, Exec2) {
|
||||
std::string t1("bbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaaabbbbbbbb");
|
||||
const u8 *t1_raw = (const u8 *)t1.c_str();
|
||||
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
const u8 *rv = vermicelliDoubleMaskedExec('a', 'a', 0xff, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'A', CASE_CLEAR, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('a', 'A', 0xff, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'a', CASE_CLEAR, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(DoubleVermicelliMasked, Exec3) {
|
||||
/* 012345678901234567890123 */
|
||||
std::string t1("bbbbbbbbbbbbbbbbbaAaaAAaaaaaaaaaaaaaaaaaabbbbbbbaaaaabbbbbbbb");
|
||||
const u8 *t1_raw = (const u8 *)t1.c_str();
|
||||
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
const u8 *rv = vermicelliDoubleMaskedExec('A', 'a', 0xff, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 18, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'A', CASE_CLEAR, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'A', 0xff, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 21, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('a', 'A', 0xff, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('a', 'A', 0xff, CASE_CLEAR,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 17, (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'a', CASE_CLEAR, 0xff,
|
||||
t1_raw + i,
|
||||
t1_raw + t1.length() - i);
|
||||
|
||||
ASSERT_EQ((size_t)t1_raw + 18, (size_t)rv);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(DoubleVermicelliMasked, Exec4) {
|
||||
std::string t1("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
||||
const u8 *t1_raw = (const u8 *)t1.c_str();
|
||||
|
||||
for (size_t i = 0; i < 31; i++) {
|
||||
t1[48 - i] = 'a';
|
||||
t1[48 - i + 1] = 'a';
|
||||
const u8 *rv = vermicelliDoubleMaskedExec('a', 'a', 0xff, 0xff, t1_raw,
|
||||
t1_raw + t1.length());
|
||||
|
||||
ASSERT_EQ((size_t)&t1_raw[48 - i], (size_t)rv);
|
||||
|
||||
rv = vermicelliDoubleMaskedExec('A', 'A', CASE_CLEAR, CASE_CLEAR, t1_raw,
|
||||
t1_raw + t1.length());
|
||||
|
||||
ASSERT_EQ((size_t)&t1_raw[48 - i], (size_t)rv);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user