// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. // Unit tests for templatetermvisitor. #include LOG_SETUP("templatetermvisitor_test"); #include #include #include #include #include using namespace search::query; namespace { class MyVisitor; class Test : public vespalib::TestApp { void requireThatAllTermsCanBeVisited(); public: int Main() override; }; int Test::Main() { TEST_INIT("templatetermvisitor_test"); TEST_DO(requireThatAllTermsCanBeVisited()); TEST_DONE(); } class MyVisitor : public TemplateTermVisitor { public: template bool &isVisited() { static bool b; return b; } template void visitTerm(TermType &) { isVisited() = true; } }; template bool checkVisit(T *q) { Node::UP query(q); MyVisitor visitor; visitor.isVisited() = false; query->accept(visitor); return visitor.isVisited(); } template bool checkVisit() { return checkVisit(new T(typename T::Type(), "field", 0, Weight(0))); } void Test::requireThatAllTermsCanBeVisited() { EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit()); EXPECT_TRUE(checkVisit(new SimplePhrase("field", 0, Weight(0)))); EXPECT_TRUE(checkVisit(new SimpleSameElement("foo", 0, Weight(0)))); EXPECT_TRUE(!checkVisit(new SimpleAnd)); EXPECT_TRUE(!checkVisit(new SimpleAndNot)); EXPECT_TRUE(!checkVisit(new SimpleEquiv(17, Weight(100)))); EXPECT_TRUE(!checkVisit(new SimpleNear(2))); EXPECT_TRUE(!checkVisit(new SimpleONear(2))); EXPECT_TRUE(!checkVisit(new SimpleOr)); EXPECT_TRUE(!checkVisit(new SimpleRank)); } } // namespace TEST_APPHOOK(Test);