diff --git a/gtsam/discrete/DecisionTree-inl.h b/gtsam/discrete/DecisionTree-inl.h index 5de5d7ed2..11ecbf183 100644 --- a/gtsam/discrete/DecisionTree-inl.h +++ b/gtsam/discrete/DecisionTree-inl.h @@ -470,7 +470,7 @@ namespace gtsam { std::function Y_of_X) { // Define functor for identity mapping of node label. auto L_of_L = [](const L& label) { return label; }; - root_ = convertFrom(Y_of_X, L_of_L); + root_ = convertFrom(other.root_, L_of_L, Y_of_X); } /*********************************************************************************/ diff --git a/gtsam/discrete/tests/testDecisionTree.cpp b/gtsam/discrete/tests/testDecisionTree.cpp index 53f3c4379..5976ea2d4 100644 --- a/gtsam/discrete/tests/testDecisionTree.cpp +++ b/gtsam/discrete/tests/testDecisionTree.cpp @@ -230,13 +230,37 @@ TEST(DT, example) } /* ******************************************************************************** */ -// test Conversion +// test Conversion of values +std::function bool_of_int = [](const int& y) { + return y != 0; +}; +typedef DecisionTree StringBoolTree; + +TEST(DT, ConvertValuesOnly) +{ + // Create labels + string A("A"), B("B"); + + // apply, two nodes, in natural order + DT f1 = apply(DT(A, 0, 5), DT(B, 5, 0), &Ring::mul); + + // convert + StringBoolTree f2(f1, bool_of_int); + + // Check a value + Assignment x00; + x00["A"] = 0, x00["B"] = 0; + EXPECT(!f2(x00)); +} + +/* ******************************************************************************** */ +// test Conversion of both values and labels. enum Label { U, V, X, Y, Z }; -typedef DecisionTree BDT; +typedef DecisionTree LabelBoolTree; -TEST(DT, conversion) +TEST(DT, ConvertBoth) { // Create labels string A("A"), B("B"); @@ -248,12 +272,9 @@ TEST(DT, conversion) map ordering; ordering[A] = X; ordering[B] = Y; - std::function bool_of_int = [](const int& y) { - return y != 0; - }; - BDT f2(f1, ordering, bool_of_int); + LabelBoolTree f2(f1, ordering, bool_of_int); - // create a value + // Check some values Assignment