/* Ousía Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include namespace ousia { TEST(Specificity, testOperators) { Specificity s1{0, 0, 1}; Specificity s2{0, 1, 1}; Specificity s3{1, 1, 1}; Specificity s4{0, 0, 2}; Specificity s5{1, 0, 2}; // This should be s1 < s4 < s2 < s5 < s3 ASSERT_TRUE(s1 == s1); ASSERT_FALSE(s1 < s1); ASSERT_FALSE(s1 > s1); ASSERT_FALSE(s1 == s2); ASSERT_TRUE(s1 < s2); ASSERT_FALSE(s1 > s2); ASSERT_FALSE(s1 == s3); ASSERT_TRUE(s1 < s3); ASSERT_FALSE(s1 > s3); ASSERT_FALSE(s1 == s4); ASSERT_TRUE(s1 < s4); ASSERT_FALSE(s1 > s4); ASSERT_FALSE(s1 == s5); ASSERT_TRUE(s1 < s5); ASSERT_FALSE(s1 > s5); ASSERT_FALSE(s2 == s1); ASSERT_FALSE(s2 < s1); ASSERT_TRUE(s2 > s1); ASSERT_TRUE(s2 == s2); ASSERT_FALSE(s2 < s2); ASSERT_FALSE(s2 > s2); ASSERT_FALSE(s2 == s3); ASSERT_TRUE(s2 < s3); ASSERT_FALSE(s2 > s3); ASSERT_FALSE(s2 == s4); ASSERT_FALSE(s2 < s4); ASSERT_TRUE(s2 > s4); ASSERT_FALSE(s2 == s5); ASSERT_TRUE(s2 < s5); ASSERT_FALSE(s2 > s5); ASSERT_FALSE(s3 == s1); ASSERT_FALSE(s3 < s1); ASSERT_TRUE(s3 > s1); ASSERT_FALSE(s3 == s2); ASSERT_FALSE(s3 < s2); ASSERT_TRUE(s3 > s2); ASSERT_TRUE(s3 == s3); ASSERT_FALSE(s3 < s3); ASSERT_FALSE(s3 > s3); ASSERT_FALSE(s3 == s4); ASSERT_FALSE(s3 < s4); ASSERT_TRUE(s3 > s4); ASSERT_FALSE(s3 == s5); ASSERT_FALSE(s3 < s5); ASSERT_TRUE(s3 > s5); ASSERT_FALSE(s4 == s1); ASSERT_FALSE(s4 < s1); ASSERT_TRUE(s4 > s1); ASSERT_FALSE(s4 == s2); ASSERT_TRUE(s4 < s2); ASSERT_FALSE(s4 > s2); ASSERT_FALSE(s4 == s3); ASSERT_TRUE(s4 < s3); ASSERT_FALSE(s4 > s3); ASSERT_TRUE(s4 == s4); ASSERT_FALSE(s4 < s4); ASSERT_FALSE(s4 > s4); ASSERT_FALSE(s4 == s5); ASSERT_TRUE(s4 < s5); ASSERT_FALSE(s4 > s5); ASSERT_FALSE(s5 == s1); ASSERT_FALSE(s5 < s1); ASSERT_TRUE(s5 > s1); ASSERT_FALSE(s5 == s2); ASSERT_FALSE(s5 < s2); ASSERT_TRUE(s5 > s2); ASSERT_FALSE(s5 == s3); ASSERT_TRUE(s5 < s3); ASSERT_FALSE(s5 > s3); ASSERT_FALSE(s5 == s4); ASSERT_FALSE(s5 < s4); ASSERT_TRUE(s5 > s4); ASSERT_TRUE(s5 == s5); ASSERT_FALSE(s5 < s5); ASSERT_FALSE(s5 > s5); } TEST(SelectorNode, testGetChildren) { Manager mgr(1); // build some children. Rooted root{new SelectorNode{mgr, "root"}}; Rooted A{new SelectorNode{mgr, "A"}}; Rooted AMy_Select{ new SelectorNode{mgr, "A", {"my_select", {"a", "b"}, false}}}; Rooted B{new SelectorNode{mgr, "B"}}; std::vector> children = {A, AMy_Select, B}; for (auto &c : children) { root->getEdges().push_back(new SelectorNode::SelectorEdge{ mgr, c, SelectionOperator::DESCENDANT}); } root->getEdges().push_back(new SelectorNode::SelectorEdge{ mgr, B, SelectionOperator::DIRECT_DESCENDANT}); // make some checks. std::vector> expected = {A}; std::vector> actual = root->getChildren(SelectionOperator::DESCENDANT, "A", {"true", false}); ASSERT_EQ(expected, actual); expected = {A, AMy_Select}; actual = root->getChildren(SelectionOperator::DESCENDANT, "A"); ASSERT_EQ(expected, actual); actual = root->getChildren("A"); ASSERT_EQ(expected, actual); expected = {A, AMy_Select, B}; actual = root->getChildren(SelectionOperator::DESCENDANT); ASSERT_EQ(expected, actual); expected = {B}; actual = root->getChildren(SelectionOperator::DIRECT_DESCENDANT); ASSERT_EQ(expected, actual); expected = {B, B}; actual = root->getChildren("B"); ASSERT_EQ(expected, actual); { expected = {A, B, B}; PseudoSelector select = {"true", false}; actual = root->getChildren(select); ASSERT_EQ(expected, actual); } expected = {A, AMy_Select, B, B}; actual = root->getChildren(); ASSERT_EQ(expected, actual); } }