123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- //===- TrigramIndexTest.cpp - Unit tests for TrigramIndex -----------------===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- #include "llvm/ADT/STLExtras.h"
- #include "llvm/Support/TrigramIndex.h"
- #include "gtest/gtest.h"
- #include <string>
- #include <vector>
- using namespace llvm;
- namespace {
- class TrigramIndexTest : public ::testing::Test {
- protected:
- std::unique_ptr<TrigramIndex> makeTrigramIndex(
- std::vector<std::string> Rules) {
- std::unique_ptr<TrigramIndex> TI =
- make_unique<TrigramIndex>();
- for (auto &Rule : Rules)
- TI->insert(Rule);
- return TI;
- }
- };
- TEST_F(TrigramIndexTest, Empty) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({});
- EXPECT_FALSE(TI->isDefeated());
- EXPECT_TRUE(TI->isDefinitelyOut("foo"));
- }
- TEST_F(TrigramIndexTest, Basic) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"*hello*", "*wor.d*"});
- EXPECT_FALSE(TI->isDefeated());
- EXPECT_TRUE(TI->isDefinitelyOut("foo"));
- }
- TEST_F(TrigramIndexTest, NoTrigramsInRules) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"b.r", "za*az"});
- EXPECT_TRUE(TI->isDefeated());
- EXPECT_FALSE(TI->isDefinitelyOut("foo"));
- EXPECT_FALSE(TI->isDefinitelyOut("bar"));
- EXPECT_FALSE(TI->isDefinitelyOut("zakaz"));
- }
- TEST_F(TrigramIndexTest, NoTrigramsInARule) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"*hello*", "*wo.ld*"});
- EXPECT_TRUE(TI->isDefeated());
- EXPECT_FALSE(TI->isDefinitelyOut("foo"));
- }
- TEST_F(TrigramIndexTest, RepetitiveRule) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"*bar*bar*bar*bar*bar", "bar*bar"});
- EXPECT_FALSE(TI->isDefeated());
- EXPECT_TRUE(TI->isDefinitelyOut("foo"));
- EXPECT_TRUE(TI->isDefinitelyOut("bar"));
- EXPECT_FALSE(TI->isDefinitelyOut("barbara"));
- EXPECT_FALSE(TI->isDefinitelyOut("bar+bar"));
- }
- TEST_F(TrigramIndexTest, PopularTrigram) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"*aaa*", "*aaaa*", "*aaaaa*", "*aaaaa*", "*aaaaaa*"});
- EXPECT_TRUE(TI->isDefeated());
- }
- TEST_F(TrigramIndexTest, PopularTrigram2) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"class1.h", "class2.h", "class3.h", "class4.h", "class.h"});
- EXPECT_TRUE(TI->isDefeated());
- }
- TEST_F(TrigramIndexTest, TooComplicatedRegex) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"[0-9]+"});
- EXPECT_TRUE(TI->isDefeated());
- }
- TEST_F(TrigramIndexTest, TooComplicatedRegex2) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"foo|bar"});
- EXPECT_TRUE(TI->isDefeated());
- }
- TEST_F(TrigramIndexTest, EscapedSymbols) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"*c\\+\\+*", "*hello\\\\world*", "a\\tb", "a\\0b"});
- EXPECT_FALSE(TI->isDefeated());
- EXPECT_FALSE(TI->isDefinitelyOut("c++"));
- EXPECT_TRUE(TI->isDefinitelyOut("c\\+\\+"));
- EXPECT_FALSE(TI->isDefinitelyOut("hello\\world"));
- EXPECT_TRUE(TI->isDefinitelyOut("hello\\\\world"));
- EXPECT_FALSE(TI->isDefinitelyOut("atb"));
- EXPECT_TRUE(TI->isDefinitelyOut("a\\tb"));
- EXPECT_TRUE(TI->isDefinitelyOut("a\tb"));
- EXPECT_FALSE(TI->isDefinitelyOut("a0b"));
- }
- TEST_F(TrigramIndexTest, Backreference1) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"*foo\\1*"});
- EXPECT_TRUE(TI->isDefeated());
- }
- TEST_F(TrigramIndexTest, Backreference2) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"*foo\\2*"});
- EXPECT_TRUE(TI->isDefeated());
- }
- TEST_F(TrigramIndexTest, Sequence) {
- std::unique_ptr<TrigramIndex> TI =
- makeTrigramIndex({"class1.h", "class2.h", "class3.h", "class4.h"});
- EXPECT_FALSE(TI->isDefeated());
- EXPECT_FALSE(TI->isDefinitelyOut("class1"));
- EXPECT_TRUE(TI->isDefinitelyOut("class.h"));
- EXPECT_TRUE(TI->isDefinitelyOut("class"));
- }
- } // namespace
|