//=========================================================================== // Complex higher level tests of markov database //=========================================================================== TEST(MarkovTree,ComplexOneLevelTreeTest) { MarkovData data(1); // ab, bb, bc, cd, bc, ac, ab, ba, bb, bb data.insert( MC2(a,b) ); data.insert( MC2(b,b) ); data.insert( MC2(b,c) ); data.insert( MC2(c,d) ); data.insert( MC2(b,c) ); data.insert( MC2(a,c) ); data.insert( MC2(a,b) ); data.insert( MC2(b,a) ); data.insert( MC2(b,b) ); data.insert( MC2(b,b) ); // make sure sum is 10 and 3 children EXPECT_EQ( 3, data.childrenAtRoot() ); EXPECT_EQ( 10, data.weightSumAtRoot() ); // Verify chains // a branch EXPECT_TRUE( testSubchain( data, MC1(a), 3, 2 ) ); EXPECT_TRUE( testSubchain( data, MC2(a,b), 2, 0 ) ); EXPECT_TRUE( testSubchain( data, MC2(a,c), 1, 0 ) ); // b branch EXPECT_TRUE( testSubchain( data, MC1(b), 6, 3 ) ); EXPECT_TRUE( testSubchain( data, MC2(b,a), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC2(b,b), 3, 0 ) ); EXPECT_TRUE( testSubchain( data, MC2(b,c), 2, 0 ) ); // c branch EXPECT_TRUE( testSubchain( data, MC1(c), 1, 1 ) ); EXPECT_TRUE( testSubchain( data, MC2(c,d), 1, 0 ) ); std::cout << data.debugDumpToString() << std::endl; }
//=========================================================================== // Basic markov data tests //=========================================================================== TEST(MarkovTree,FindNonexistantChainReturnsNull) { MarkovData data(2); data.insert( MC3(aa,bb,cc) ); EXPECT_TRUE( NULL == data.getNodeFor( MC1(xx) ) ); EXPECT_TRUE( NULL == data.getNodeFor( MC2(aa,cc) ) ); }
TEST(MarkovTree,InsertChainCanRetrieveAllLevels) { MarkovData data(2); data.insert( MC3(aa,bb,cc) ); EXPECT_TRUE( testSubchain( data, MC1(aa), 1, 1 ) ); EXPECT_TRUE( testSubchain( data, MC2(aa,bb), 1, 1 ) ); EXPECT_TRUE( testSubchain( data, MC3(aa,bb,cc), 1, 0 ) ); }
TEST(MarkovTree,InsertChainCanRetrieveIt) { MarkovData data(2); data.insert( MC3(a,b,c) ); ElementNode * n = NULL; // Lookup {"a"} --> {"b", "c"} EXPECT_TRUE( n != data.getNodeFor( MC1(a) ) ); }
int main(int argc, char **argv) { ros::init(argc, argv, "manual_control_node"); ros::NodeHandle nh; manual_control MC1(nh); while(ros::ok()) { ros::spinOnce(); } return 0; }
TEST(MarkovTree,BasicOneLevelTreeSameWeights) { MarkovData data(1); data.insert( MC2(a,b) ); data.insert( MC2(b,c) ); data.insert( MC2(c,d) ); // make sure three nodes at root EXPECT_EQ( 3, data.childrenAtRoot() ); // Verify subchains // {a,b} EXPECT_TRUE( testSubchain(data, MC1(a), 1, 1) ); EXPECT_TRUE( testSubchain(data, MC2(a,b), 1, 0) ); // {b,c} EXPECT_TRUE( testSubchain(data, MC1(b), 1, 1) ); EXPECT_TRUE( testSubchain(data, MC2(b,c), 1, 0) ); // {c,d} EXPECT_TRUE( testSubchain(data, MC1(c), 1, 1) ); EXPECT_TRUE( testSubchain(data, MC2(c,d), 1, 0) ); }
TEST(MarkovChain,ComplexTwoLevelTTreeest) { MarkovData data(2); /** * (ROOT:24) * - A:6 * - B:2 * - A:1 * - D:1 * - C:4 * - D:2 * - A:1 * - C:1 * - B:11 * - B:3 * - A:3 * - A:5 * - A:1 * - B:2 * - C:1 * - D:1 * - C:3 * - A:1 * - D:2 * - C:3 * - B:3 * - D:3 * - D:4 * - A:1 * - C:1 * - B:3 * - A:2 * - D:1 */ data.insert( MC3(a,b,a) ); data.insert( MC3(a,c,c) ); // 1 data.insert( MC3(d,a,c) ); data.insert( MC3(c,b,d) ); // 2 data.insert( MC3(a,c,d) ); data.insert( MC3(a,c,d) ); // 3 data.insert( MC3(b,a,a) ); data.insert( MC3(b,b,a) ); // 4 data.insert( MC3(b,c,a) ); data.insert( MC3(c,b,d) ); // 5 data.insert( MC3(c,b,d) ); data.insert( MC3(a,b,d) ); // 6 data.insert( MC3(a,c,a) ); data.insert( MC3(b,c,d) ); // 7 data.insert( MC3(d,b,a) ); data.insert( MC3(b,c,d) ); // 8 data.insert( MC3(d,b,a) ); data.insert( MC3(d,b,d) ); // 9 data.insert( MC3(b,b,a) ); data.insert( MC3(b,a,c) ); // 10 data.insert( MC3(b,a,b) ); data.insert( MC3(b,a,b) ); // 11 data.insert( MC3(b,a,d) ); data.insert( MC3(b,b,a) ); // 12 // make sure sum is 10 and 3 children EXPECT_EQ( 4, data.childrenAtRoot() ); EXPECT_EQ( 24, data.weightSumAtRoot() ); // Verify chains // a branch EXPECT_TRUE( testSubchain( data, MC1(a), 6, 2 ) ); EXPECT_TRUE( testSubchain( data, MC2(a,b), 2, 2 ) ); EXPECT_TRUE( testSubchain( data, MC2(a,c), 4, 3 ) ); EXPECT_TRUE( testSubchain( data, MC3(a,b,a), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(a,b,d), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(a,c,d), 2, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(a,c,a), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(a,c,c), 1, 0 ) ); // b branch EXPECT_TRUE( testSubchain( data, MC1(b), 11, 3 ) ); EXPECT_TRUE( testSubchain( data, MC2(b,a), 5, 4 ) ); EXPECT_TRUE( testSubchain( data, MC2(b,b), 3, 1 ) ); EXPECT_TRUE( testSubchain( data, MC2(b,c), 3, 2 ) ); EXPECT_TRUE( testSubchain( data, MC3(b,b,a), 3, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(b,a,a), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(b,a,b), 2, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(b,a,c), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(b,a,d), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(b,c,a), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(b,c,d), 2, 0 ) ); // c branch EXPECT_TRUE( testSubchain( data, MC1(c), 3, 1 ) ); EXPECT_TRUE( testSubchain( data, MC2(c,b), 3, 1 ) ); EXPECT_TRUE( testSubchain( data, MC3(c,b,d), 3, 0 ) ); // d branch EXPECT_TRUE( testSubchain( data, MC1(d), 4, 2 ) ); EXPECT_TRUE( testSubchain( data, MC2(d,a), 1, 1 ) ); EXPECT_TRUE( testSubchain( data, MC2(d,b), 3, 2 ) ); EXPECT_TRUE( testSubchain( data, MC3(d,a,c), 1, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(d,b,a), 2, 0 ) ); EXPECT_TRUE( testSubchain( data, MC3(d,b,d), 1, 0 ) ); }
TEST(MarkovTree,OneLengthChainsAreEqual) { EXPECT_TRUE( isEqual( MC1(bear), MC1(bear) ) ); }
TEST(MarkovTree,OneElementChainToString) { EXPECT_EQ( "<1;apple>", toString( MC1(apple) ) ); }