diff --git a/gtsam/discrete/tests/testDecisionTree.cpp b/gtsam/discrete/tests/testDecisionTree.cpp index 02ef52ab8..46e6c3813 100644 --- a/gtsam/discrete/tests/testDecisionTree.cpp +++ b/gtsam/discrete/tests/testDecisionTree.cpp @@ -528,35 +528,6 @@ TEST(DecisionTree, ApplyWithAssignment) { EXPECT_LONGS_EQUAL(5, count); } -/* ****************************************************************************/ -using Tree = gtsam::DecisionTree; - -BOOST_CLASS_EXPORT_GUID(Tree, "gtsam_DecisionTreeStringInt") -BOOST_CLASS_EXPORT_GUID(Tree::Leaf, "gtsam_DecisionTree_Leaf") -BOOST_CLASS_EXPORT_GUID(Tree::Choice, "gtsam_DecisionTree_Choice") - -// Test HybridBayesNet serialization. -TEST(DecisionTree, Serialization) { - Tree tree({{"A", 2}}, std::vector{1, 2}); - - using namespace serializationTestHelpers; - - // Object roundtrip - Tree outputObj = create(); - roundtrip(tree, outputObj); - EXPECT(tree.equals(outputObj)); - - // XML roundtrip - Tree outputXml = create(); - roundtripXML(tree, outputXml); - EXPECT(tree.equals(outputXml)); - - // Binary roundtrip - Tree outputBinary = create(); - roundtripBinary(tree, outputBinary); - EXPECT(tree.equals(outputBinary)); -} - /* ************************************************************************* */ int main() { TestResult tr; diff --git a/gtsam/discrete/tests/testDecisionTreeFactor.cpp b/gtsam/discrete/tests/testDecisionTreeFactor.cpp index d4ca9faa6..869b3c630 100644 --- a/gtsam/discrete/tests/testDecisionTreeFactor.cpp +++ b/gtsam/discrete/tests/testDecisionTreeFactor.cpp @@ -221,30 +221,6 @@ TEST(DecisionTreeFactor, htmlWithValueFormatter) { EXPECT(actual == expected); } -/* ************************************************************************* */ -BOOST_CLASS_EXPORT_GUID(DecisionTreeFactor, "gtsam_DecisionTreeFactor"); -using ADT = AlgebraicDecisionTree; -BOOST_CLASS_EXPORT_GUID(ADT, "gtsam_AlgebraicDecisionTree"); -BOOST_CLASS_EXPORT_GUID(ADT::Leaf, "gtsam_DecisionTree_Leaf") -BOOST_CLASS_EXPORT_GUID(ADT::Choice, "gtsam_DecisionTree_Choice") - -// Check serialization for AlgebraicDecisionTree and the DecisionTreeFactor -TEST(DecisionTreeFactor, Serialization) { - using namespace serializationTestHelpers; - - DiscreteKey A(1, 2), B(2, 2), C(3, 2); - - DecisionTreeFactor::ADT tree(A & B & C, "1 5 3 7 2 6 4 8"); - EXPECT(equalsObj(tree)); - EXPECT(equalsXML(tree)); - EXPECT(equalsBinary(tree)); - - DecisionTreeFactor f(A & B & C, "1 5 3 7 2 6 4 8"); - EXPECT(equalsObj(f)); - EXPECT(equalsXML(f)); - EXPECT(equalsBinary(f)); -} - /* ************************************************************************* */ int main() { TestResult tr; diff --git a/gtsam/discrete/tests/testDiscreteConditional.cpp b/gtsam/discrete/tests/testDiscreteConditional.cpp index 99ea138b1..3df4bf9e6 100644 --- a/gtsam/discrete/tests/testDiscreteConditional.cpp +++ b/gtsam/discrete/tests/testDiscreteConditional.cpp @@ -368,23 +368,6 @@ TEST(DiscreteConditional, html) { EXPECT(actual == expected); } -/* ************************************************************************* */ -using ADT = AlgebraicDecisionTree; -BOOST_CLASS_EXPORT_GUID(ADT::Leaf, "gtsam_ADT_Leaf") -BOOST_CLASS_EXPORT_GUID(ADT::Choice, "gtsam_ADT_Choice") - -// Check serialization for DiscreteConditional -TEST(DiscreteConditional, Serialization) { - using namespace serializationTestHelpers; - - DiscreteKey A(Symbol('x', 1), 3); - DiscreteConditional conditional(A % "1/2/2"); - - EXPECT(equalsObj(conditional)); - EXPECT(equalsXML(conditional)); - EXPECT(equalsBinary(conditional)); -} - /* ************************************************************************* */ int main() { TestResult tr; diff --git a/gtsam/discrete/tests/testSerializationDiscrete.cpp b/gtsam/discrete/tests/testSerializationDiscrete.cpp new file mode 100644 index 000000000..df7df0b7e --- /dev/null +++ b/gtsam/discrete/tests/testSerializationDiscrete.cpp @@ -0,0 +1,105 @@ +/* ---------------------------------------------------------------------------- + + * GTSAM Copyright 2010, Georgia Tech Research Corporation, + * Atlanta, Georgia 30332-0415 + * All Rights Reserved + * Authors: Frank Dellaert, et al. (see THANKS for the full author list) + + * See LICENSE for the license information + + * -------------------------------------------------------------------------- */ + +/* + * testSerializtionDiscrete.cpp + * + * @date January 2023 + * @author Varun Agrawal + */ + +#include +#include +#include +#include +#include + +using namespace std; +using namespace gtsam; + +using Tree = gtsam::DecisionTree; + +BOOST_CLASS_EXPORT_GUID(Tree, "gtsam_DecisionTreeStringInt") +BOOST_CLASS_EXPORT_GUID(Tree::Leaf, "gtsam_DecisionTreeStringInt_Leaf") +BOOST_CLASS_EXPORT_GUID(Tree::Choice, "gtsam_DecisionTreeStringInt_Choice") + +BOOST_CLASS_EXPORT_GUID(DecisionTreeFactor, "gtsam_DecisionTreeFactor"); + +using ADT = AlgebraicDecisionTree; +BOOST_CLASS_EXPORT_GUID(ADT, "gtsam_AlgebraicDecisionTree"); +BOOST_CLASS_EXPORT_GUID(ADT::Leaf, "gtsam_AlgebraicDecisionTree_Leaf") +BOOST_CLASS_EXPORT_GUID(ADT::Choice, "gtsam_AlgebraicDecisionTree_Choice") + +/* ****************************************************************************/ +// Test DecisionTree serialization. +TEST(DiscreteSerialization, DecisionTree) { + Tree tree({{"A", 2}}, std::vector{1, 2}); + + using namespace serializationTestHelpers; + + // Object roundtrip + Tree outputObj = create(); + roundtrip(tree, outputObj); + EXPECT(tree.equals(outputObj)); + + // XML roundtrip + Tree outputXml = create(); + roundtripXML(tree, outputXml); + EXPECT(tree.equals(outputXml)); + + // Binary roundtrip + Tree outputBinary = create(); + roundtripBinary(tree, outputBinary); + EXPECT(tree.equals(outputBinary)); +} + +/* ************************************************************************* */ +// Check serialization for AlgebraicDecisionTree and the DecisionTreeFactor +TEST(DiscreteSerialization, DecisionTreeFactor) { + using namespace serializationTestHelpers; + + DiscreteKey A(1, 2), B(2, 2), C(3, 2); + + DecisionTreeFactor::ADT tree(A & B & C, "1 5 3 7 2 6 4 8"); + EXPECT(equalsObj(tree)); + EXPECT(equalsXML(tree)); + EXPECT(equalsBinary(tree)); + + DecisionTreeFactor f(A & B & C, "1 5 3 7 2 6 4 8"); + EXPECT(equalsObj(f)); + EXPECT(equalsXML(f)); + EXPECT(equalsBinary(f)); +} + +/* ************************************************************************* */ +// Check serialization for DiscreteConditional & DiscreteDistribution +TEST(DiscreteSerialization, DiscreteConditional) { + using namespace serializationTestHelpers; + + DiscreteKey A(Symbol('x', 1), 3); + DiscreteConditional conditional(A % "1/2/2"); + + EXPECT(equalsObj(conditional)); + EXPECT(equalsXML(conditional)); + EXPECT(equalsBinary(conditional)); + + DiscreteDistribution P(A % "3/2/1"); + EXPECT(equalsObj(P)); + EXPECT(equalsXML(P)); + EXPECT(equalsBinary(P)); +} + +/* ************************************************************************* */ +int main() { + TestResult tr; + return TestRegistry::runAllTests(tr); +} +/* ************************************************************************* */