#include "prefix_tree.hh" #include "str.hh" #include TEST(prefix_tree, empty) { auto builder = prefix_tree::builder(); auto tree = builder->build(); ASSERT_TRUE(tree.has_value()); auto ret = prefix_tree::lookup(tree.value(), ""); EXPECT_FALSE(ret.has_value()); ret = prefix_tree::lookup(tree.value(), "foo"); EXPECT_FALSE(ret.has_value()); } TEST(prefix_tree, sanity) { auto builder = prefix_tree::builder(); builder->add("foo"); builder->add("bar"); builder->add("foobar"); auto tree = builder->build(); ASSERT_TRUE(tree.has_value()); auto ret = prefix_tree::lookup(tree.value(), ""); EXPECT_FALSE(ret.has_value()); ret = prefix_tree::lookup(tree.value(), "foo"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(3, ret.value()); ret = prefix_tree::lookup(tree.value(), "foobar"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(6, ret.value()); ret = prefix_tree::lookup(tree.value(), "bar"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(3, ret.value()); ret = prefix_tree::lookup(tree.value(), "ba"); EXPECT_FALSE(ret.has_value()); ret = prefix_tree::lookup(tree.value(), "barf"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(3, ret.value()); ret = prefix_tree::lookup(tree.value(), "foob"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(3, ret.value()); ret = prefix_tree::lookup(tree.value(), "foozum"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(3, ret.value()); ret = prefix_tree::lookup(tree.value(), "barfoo"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(3, ret.value()); } TEST(prefix_tree, many_and_long) { auto builder = prefix_tree::builder(); for (auto str : str::split( "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut " "enim ad minim veniam, quis nostrud exercitation ullamco laboris " "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in " "reprehenderit in voluptate velit esse cillum dolore eu fugiat " "nulla pariatur. Excepteur sint occaecat cupidatat non proident, " "sunt in culpa qui officia deserunt mollit anim id est laborum.")) { builder->add(str); } auto tree = builder->build(); ASSERT_TRUE(tree.has_value()); auto ret = prefix_tree::lookup(tree.value(), ""); EXPECT_FALSE(ret.has_value()); ret = prefix_tree::lookup(tree.value(), "Lorem"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(5, ret.value()); ret = prefix_tree::lookup(tree.value(), "cillum"); ASSERT_TRUE(ret.has_value()); EXPECT_EQ(6, ret.value()); }