diff --git a/gtsam/discrete/discrete.i b/gtsam/discrete/discrete.i index a883226cc..faa6a15d6 100644 --- a/gtsam/discrete/discrete.i +++ b/gtsam/discrete/discrete.i @@ -91,6 +91,8 @@ class DiscreteBayesNet { double operator()(const gtsam::DiscreteValues& values) const; gtsam::DiscreteValues optimize() const; gtsam::DiscreteValues sample() const; + string dot(const gtsam::KeyFormatter& keyFormatter = + gtsam::DefaultKeyFormatter) const; }; #include diff --git a/gtsam/discrete/tests/testDiscreteBayesNet.cpp b/gtsam/discrete/tests/testDiscreteBayesNet.cpp index cb50dd05f..5fff6d423 100644 --- a/gtsam/discrete/tests/testDiscreteBayesNet.cpp +++ b/gtsam/discrete/tests/testDiscreteBayesNet.cpp @@ -135,7 +135,7 @@ TEST(DiscreteBayesNet, Asia) { } /* ************************************************************************* */ -TEST_UNSAFE(DiscreteBayesNet, Sugar) { +TEST(DiscreteBayesNet, Sugar) { DiscreteKey T(0, 2), L(1, 2), E(2, 2), C(8, 3), S(7, 2); DiscreteBayesNet bn; @@ -149,6 +149,23 @@ TEST_UNSAFE(DiscreteBayesNet, Sugar) { bn.add(C | S = "1/1/2 5/2/3"); } +/* ************************************************************************* */ +TEST_UNSAFE(DiscreteBayesNet, Dot) { + DiscreteKey Asia(0, 2), Smoking(4, 2), Tuberculosis(3, 2), LungCancer(6, 2), + Either(5, 2); + + DiscreteBayesNet fragment; + fragment.add(Asia % "99/1"); + fragment.add(Smoking % "50/50"); + + fragment.add(Tuberculosis | Asia = "99/1 95/5"); + fragment.add(LungCancer | Smoking = "99/1 90/10"); + fragment.add((Either | Tuberculosis, LungCancer) = "F T T T"); + + string actual = fragment.dot(); + EXPECT(actual == "digraph G{\n3->5\n6->5\n4->6\n0->3\n}"); +} + /* ************************************************************************* */ int main() { TestResult tr;