Added test and fixed constructor

release/4.3a0
Frank Dellaert 2022-01-03 12:06:29 -05:00
parent 6cd3eeb692
commit 0631193415
2 changed files with 30 additions and 9 deletions

View File

@ -470,7 +470,7 @@ namespace gtsam {
std::function<Y(const X&)> Y_of_X) { std::function<Y(const X&)> Y_of_X) {
// Define functor for identity mapping of node label. // Define functor for identity mapping of node label.
auto L_of_L = [](const L& label) { return label; }; auto L_of_L = [](const L& label) { return label; };
root_ = convertFrom<L, X>(Y_of_X, L_of_L); root_ = convertFrom<L, X>(other.root_, L_of_L, Y_of_X);
} }
/*********************************************************************************/ /*********************************************************************************/

View File

@ -230,13 +230,37 @@ TEST(DT, example)
} }
/* ******************************************************************************** */ /* ******************************************************************************** */
// test Conversion // test Conversion of values
std::function<bool(const int&)> bool_of_int = [](const int& y) {
return y != 0;
};
typedef DecisionTree<string, bool> 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<string> x00;
x00["A"] = 0, x00["B"] = 0;
EXPECT(!f2(x00));
}
/* ******************************************************************************** */
// test Conversion of both values and labels.
enum Label { enum Label {
U, V, X, Y, Z U, V, X, Y, Z
}; };
typedef DecisionTree<Label, bool> BDT; typedef DecisionTree<Label, bool> LabelBoolTree;
TEST(DT, conversion) TEST(DT, ConvertBoth)
{ {
// Create labels // Create labels
string A("A"), B("B"); string A("A"), B("B");
@ -248,12 +272,9 @@ TEST(DT, conversion)
map<string, Label> ordering; map<string, Label> ordering;
ordering[A] = X; ordering[A] = X;
ordering[B] = Y; ordering[B] = Y;
std::function<bool(const int&)> bool_of_int = [](const int& y) { LabelBoolTree f2(f1, ordering, bool_of_int);
return y != 0;
};
BDT f2(f1, ordering, bool_of_int);
// create a value // Check some values
Assignment<Label> x00, x01, x10, x11; Assignment<Label> x00, x01, x10, x11;
x00[X] = 0, x00[Y] = 0; x00[X] = 0, x00[Y] = 0;
x01[X] = 0, x01[Y] = 1; x01[X] = 0, x01[Y] = 1;