From d2d1e2c7b0a7a201bbce7a1a704f0ebb43c63ee1 Mon Sep 17 00:00:00 2001 From: Varun Agrawal Date: Fri, 11 Apr 2025 15:13:45 -0400 Subject: [PATCH] test case for edge case of restrict --- gtsam/discrete/tests/testDecisionTreeFactor.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gtsam/discrete/tests/testDecisionTreeFactor.cpp b/gtsam/discrete/tests/testDecisionTreeFactor.cpp index b365d56ce..52fa7c097 100644 --- a/gtsam/discrete/tests/testDecisionTreeFactor.cpp +++ b/gtsam/discrete/tests/testDecisionTreeFactor.cpp @@ -196,6 +196,19 @@ TEST(DecisionTreeFactor, Restrict) { DecisionTreeFactor expected_f2(C, "5 6"); EXPECT(assert_equal(expected_f2, restricted_f2)); + + // Edge case of restricting a single value when it is the only value. + DecisionTreeFactor f3(A, "50 100"); + fixedValues = {{A.first, 1}}; // select 100 + + DecisionTreeFactor restricted_f3 = + *std::static_pointer_cast(f3.restrict(fixedValues)); + + EXPECT_LONGS_EQUAL(0, restricted_f3.discreteKeys().size()); + // There should only be 1 value which is 100 + EXPECT_LONGS_EQUAL(1, restricted_f3.nrValues()); + EXPECT_LONGS_EQUAL(1, restricted_f3.nrLeaves()); + EXPECT_DOUBLES_EQUAL(100, restricted_f3.evaluate(DiscreteValues()), 1e-9); } namespace pruning_fixture {