mirror of
https://github.com/Waujito/youtubeUnblock.git
synced 2026-01-27 04:30:35 +03:00
Implement Aho-Corasick algorithm
This commit is contained in:
@@ -10,6 +10,7 @@ static void RunAllTests(void)
|
||||
{
|
||||
RUN_TEST_GROUP(TLSTest)
|
||||
RUN_TEST_GROUP(QuicTest);
|
||||
RUN_TEST_GROUP(TrieTest);
|
||||
}
|
||||
|
||||
int main(int argc, const char * argv[])
|
||||
|
||||
104
test/trie.c
Normal file
104
test/trie.c
Normal file
@@ -0,0 +1,104 @@
|
||||
#include "unity.h"
|
||||
#include "unity_fixture.h"
|
||||
|
||||
#include "trie.h"
|
||||
|
||||
TEST_GROUP(TrieTest);
|
||||
|
||||
TEST_SETUP(TrieTest)
|
||||
{
|
||||
}
|
||||
|
||||
TEST_TEAR_DOWN(TrieTest)
|
||||
{
|
||||
}
|
||||
|
||||
const char ASTR[] = "abacaba";
|
||||
const char BSTR[] = "BABABABA";
|
||||
const char CSTR[] = "abracadabra";
|
||||
|
||||
const char tstr[] = "aBABABABDADAabacabracadabraabbbabacabaaaaaabacaba";
|
||||
|
||||
|
||||
TEST(TrieTest, Trie_string_adds)
|
||||
{
|
||||
int ret;
|
||||
size_t offset;
|
||||
size_t offlen;
|
||||
struct trie_container trie;
|
||||
|
||||
ret = trie_init(&trie);
|
||||
TEST_ASSERT_EQUAL(0, ret);
|
||||
ret = trie_add_string(&trie, (uint8_t *)ASTR, sizeof(ASTR) - 1);
|
||||
TEST_ASSERT_EQUAL(0, ret);
|
||||
ret = trie_add_string(&trie, (uint8_t *)BSTR, sizeof(BSTR) - 1);
|
||||
TEST_ASSERT_EQUAL(0, ret);
|
||||
ret = trie_add_string(&trie, (uint8_t *)CSTR, sizeof(CSTR) - 1);
|
||||
TEST_ASSERT_EQUAL(0, ret);
|
||||
|
||||
TEST_ASSERT_EQUAL(25, trie.sz);
|
||||
|
||||
trie_destroy(&trie);
|
||||
}
|
||||
|
||||
TEST(TrieTest, Trie_string_finds)
|
||||
{
|
||||
int ret;
|
||||
size_t offset;
|
||||
size_t offlen;
|
||||
struct trie_container trie;
|
||||
|
||||
ret = trie_init(&trie);
|
||||
ret = trie_add_string(&trie, (uint8_t *)ASTR, sizeof(ASTR) - 1);
|
||||
ret = trie_add_string(&trie, (uint8_t *)BSTR, sizeof(BSTR) - 1);
|
||||
ret = trie_add_string(&trie, (uint8_t *)CSTR, sizeof(CSTR) - 1);
|
||||
|
||||
ret = trie_process_str(&trie,
|
||||
(uint8_t *)tstr, sizeof(tstr) - 1,
|
||||
0, &offset, &offlen
|
||||
);
|
||||
TEST_ASSERT_EQUAL(1, ret);
|
||||
TEST_ASSERT_EQUAL(11, offlen);
|
||||
TEST_ASSERT_EQUAL_STRING_LEN("abracadabra", tstr + offset, offlen);
|
||||
|
||||
trie_destroy(&trie);
|
||||
}
|
||||
|
||||
TEST(TrieTest, Trie_string_finds_opt_end)
|
||||
{
|
||||
int ret;
|
||||
size_t offset;
|
||||
size_t offlen;
|
||||
struct trie_container trie;
|
||||
|
||||
ret = trie_init(&trie);
|
||||
ret = trie_add_string(&trie, (uint8_t *)ASTR, sizeof(ASTR) - 1);
|
||||
ret = trie_add_string(&trie, (uint8_t *)BSTR, sizeof(BSTR) - 1);
|
||||
ret = trie_add_string(&trie, (uint8_t *)CSTR, sizeof(CSTR) - 1);
|
||||
|
||||
ret = trie_process_str(&trie,
|
||||
(uint8_t *)tstr, sizeof(tstr) - 1,
|
||||
TRIE_OPT_MAP_TO_END,
|
||||
&offset, &offlen
|
||||
);
|
||||
TEST_ASSERT_EQUAL(1, ret);
|
||||
TEST_ASSERT_EQUAL(7, offlen);
|
||||
TEST_ASSERT_EQUAL_STRING_LEN("abacaba", tstr + offset, offlen);
|
||||
|
||||
ret = trie_process_str(&trie,
|
||||
(uint8_t *)tstr, sizeof(tstr),
|
||||
TRIE_OPT_MAP_TO_END,
|
||||
&offset, &offlen
|
||||
);
|
||||
TEST_ASSERT_EQUAL(0, ret);
|
||||
|
||||
trie_destroy(&trie);
|
||||
}
|
||||
|
||||
|
||||
TEST_GROUP_RUNNER(TrieTest)
|
||||
{
|
||||
RUN_TEST_CASE(TrieTest, Trie_string_adds);
|
||||
RUN_TEST_CASE(TrieTest, Trie_string_finds);
|
||||
RUN_TEST_CASE(TrieTest, Trie_string_finds_opt_end);
|
||||
}
|
||||
Reference in New Issue
Block a user