/* ************************************************************************* */ TEST(VariableIndex, deep_copy) { SymbolicFactorGraph fg1, fg2; fg1.push_factor(0, 1); fg1.push_factor(0, 2); fg1.push_factor(5, 9); fg1.push_factor(2, 3); fg2.push_factor(1, 3); fg2.push_factor(2, 4); fg2.push_factor(3, 5); fg2.push_factor(5, 6); // Create original graph and VariableIndex SymbolicFactorGraph fgOriginal; fgOriginal.push_back(fg1); fgOriginal.push_back(fg2); VariableIndex original(fgOriginal); VariableIndex expectedOriginal(fgOriginal); // Create a factor graph containing only the factors from fg2 and with null // factors in the place of those of fg1, so that the factor indices are correct. SymbolicFactorGraph fg2removed(fgOriginal); fg2removed.remove(0); fg2removed.remove(1); fg2removed.remove(2); fg2removed.remove(3); VariableIndex expectedRemoved(fg2removed); // Create a clone and modify the clone - the original should not change VariableIndex clone(original); vector<size_t> indices; indices.push_back(0); indices.push_back(1); indices.push_back(2); indices.push_back(3); clone.remove(indices, fg1); // When modifying the clone, the original should have stayed the same EXPECT(assert_equal(expectedOriginal, original)); EXPECT(assert_equal(expectedRemoved, clone)); }
/* ************************************************************************* */ TEST(VariableIndex, remove) { SymbolicFactorGraph fg1, fg2; fg1.push_factor(0, 1); fg1.push_factor(0, 2); fg1.push_factor(5, 9); fg1.push_factor(2, 3); fg2.push_factor(1, 3); fg2.push_factor(2, 4); fg2.push_factor(3, 5); fg2.push_factor(5, 6); SymbolicFactorGraph fgCombined; fgCombined.push_back(fg1); fgCombined.push_back(fg2); // Create a factor graph containing only the factors from fg2 and with null // factors in the place of those of fg1, so that the factor indices are correct. SymbolicFactorGraph fg2removed(fgCombined); fg2removed.remove(0); fg2removed.remove(1); fg2removed.remove(2); fg2removed.remove(3); // The expected VariableIndex has the same factor indices as fgCombined but // with entries from fg1 removed, and still has all 10 variables. VariableIndex expected(fg2removed, 10); VariableIndex actual(fgCombined); vector<size_t> indices; indices.push_back(0); indices.push_back(1); indices.push_back(2); indices.push_back(3); actual.remove(indices, fg1); CHECK(assert_equal(expected, actual)); }
/* ************************************************************************* */ TEST(VariableIndex, augment2) { SymbolicFactorGraph fg1, fg2; fg1.push_factor(0, 1); fg1.push_factor(0, 2); fg1.push_factor(5, 9); fg1.push_factor(2, 3); fg2.push_factor(1, 3); fg2.push_factor(2, 4); fg2.push_factor(3, 5); fg2.push_factor(5, 6); SymbolicFactorGraph fgCombined; fgCombined.push_back(fg1); fgCombined.push_back(SymbolicFactor::shared_ptr()); // Add an extra empty factor fgCombined.push_back(fg2); VariableIndex expected(fgCombined); FastVector<size_t> newIndices = list_of(5)(6)(7)(8); VariableIndex actual(fg1); actual.augment(fg2, newIndices); LONGS_EQUAL(16, (long) actual.nEntries()); LONGS_EQUAL(9, (long) actual.nFactors()); EXPECT(assert_equal(expected, actual)); }
/* ************************************************************************* */ TEST( SymbolicFactorGraph, symbolicFactorGraph ) { Ordering o; o += X(1),L(1),X(2); // construct expected symbolic graph SymbolicFactorGraph expected; expected.push_factor(o[X(1)]); expected.push_factor(o[X(1)],o[X(2)]); expected.push_factor(o[X(1)],o[L(1)]); expected.push_factor(o[X(2)],o[L(1)]); // construct it from the factor graph GaussianFactorGraph factorGraph = example::createGaussianFactorGraph(o); SymbolicFactorGraph actual(factorGraph); CHECK(assert_equal(expected, actual)); }
/* ************************************************************************* */ TEST(VariableIndex, augment) { SymbolicFactorGraph fg1, fg2; fg1.push_factor(0, 1); fg1.push_factor(0, 2); fg1.push_factor(5, 9); fg1.push_factor(2, 3); fg2.push_factor(1, 3); fg2.push_factor(2, 4); fg2.push_factor(3, 5); fg2.push_factor(5, 6); SymbolicFactorGraph fgCombined; fgCombined.push_back(fg1); fgCombined.push_back(fg2); VariableIndex expected(fgCombined); VariableIndex actual(fg1); actual.augment(fg2); LONGS_EQUAL(16, actual.nEntries()); LONGS_EQUAL(8, actual.nFactors()); EXPECT(assert_equal(expected, actual)); }