diff options
Diffstat (limited to 'internal/ceres/ordered_groups_test.cc')
-rw-r--r-- | internal/ceres/ordered_groups_test.cc | 66 |
1 files changed, 61 insertions, 5 deletions
diff --git a/internal/ceres/ordered_groups_test.cc b/internal/ceres/ordered_groups_test.cc index 700e788..7719d35 100644 --- a/internal/ceres/ordered_groups_test.cc +++ b/internal/ceres/ordered_groups_test.cc @@ -38,7 +38,7 @@ namespace ceres { namespace internal { -TEST(OrderedGroup, EmptyOrderedGroupBehavesCorrectly) { +TEST(OrderedGroups, EmptyOrderedGroupBehavesCorrectly) { ParameterBlockOrdering ordering; EXPECT_EQ(ordering.NumGroups(), 0); EXPECT_EQ(ordering.NumElements(), 0); @@ -48,7 +48,7 @@ TEST(OrderedGroup, EmptyOrderedGroupBehavesCorrectly) { EXPECT_FALSE(ordering.Remove(&x)); } -TEST(OrderedGroup, EverythingInOneGroup) { +TEST(OrderedGroups, EverythingInOneGroup) { ParameterBlockOrdering ordering; double x[3]; ordering.AddElementToGroup(x, 1); @@ -75,7 +75,7 @@ TEST(OrderedGroup, EverythingInOneGroup) { EXPECT_EQ(ordering.GroupId(x + 2), 1); } -TEST(OrderedGroup, StartInOneGroupAndThenSplit) { +TEST(OrderedGroups, StartInOneGroupAndThenSplit) { ParameterBlockOrdering ordering; double x[3]; ordering.AddElementToGroup(x, 1); @@ -103,7 +103,7 @@ TEST(OrderedGroup, StartInOneGroupAndThenSplit) { EXPECT_EQ(ordering.GroupId(x + 2), 1); } -TEST(OrderedGroup, AddAndRemoveEveryThingFromOneGroup) { +TEST(OrderedGroups, AddAndRemoveEveryThingFromOneGroup) { ParameterBlockOrdering ordering; double x[3]; ordering.AddElementToGroup(x, 1); @@ -133,7 +133,7 @@ TEST(OrderedGroup, AddAndRemoveEveryThingFromOneGroup) { EXPECT_EQ(ordering.GroupId(x + 2), 5); } -TEST(OrderedGroup, ReverseOrdering) { +TEST(OrderedGroups, ReverseOrdering) { ParameterBlockOrdering ordering; double x[3]; ordering.AddElementToGroup(x, 1); @@ -159,5 +159,61 @@ TEST(OrderedGroup, ReverseOrdering) { EXPECT_EQ(ordering.GroupId(x + 2), 2); } +TEST(OrderedGroups, BulkRemove) { + ParameterBlockOrdering ordering; + double x[3]; + ordering.AddElementToGroup(x, 1); + ordering.AddElementToGroup(x + 1, 2); + ordering.AddElementToGroup(x + 2, 2); + + vector<double*> elements_to_remove; + elements_to_remove.push_back(x); + elements_to_remove.push_back(x + 2); + + EXPECT_EQ(ordering.Remove(elements_to_remove), 2); + EXPECT_EQ(ordering.NumElements(), 1); + EXPECT_EQ(ordering.GroupId(x), -1); + EXPECT_EQ(ordering.GroupId(x + 1), 2); + EXPECT_EQ(ordering.GroupId(x + 2), -1); +} + +TEST(OrderedGroups, BulkRemoveWithNoElements) { + ParameterBlockOrdering ordering; + + double x[3]; + vector<double*> elements_to_remove; + elements_to_remove.push_back(x); + elements_to_remove.push_back(x + 2); + + EXPECT_EQ(ordering.Remove(elements_to_remove), 0); + + ordering.AddElementToGroup(x, 1); + ordering.AddElementToGroup(x + 1, 2); + ordering.AddElementToGroup(x + 2, 2); + + elements_to_remove.clear(); + EXPECT_EQ(ordering.Remove(elements_to_remove), 0); +} + +TEST(OrderedGroups, MinNonZeroGroup) { + ParameterBlockOrdering ordering; + double x[3]; + + ordering.AddElementToGroup(x, 1); + ordering.AddElementToGroup(x + 1, 1); + ordering.AddElementToGroup(x + 2, 2); + + EXPECT_EQ(ordering.MinNonZeroGroup(), 1); + ordering.Remove(x); + + EXPECT_EQ(ordering.MinNonZeroGroup(), 1); + ordering.Remove(x + 1); + + EXPECT_EQ(ordering.MinNonZeroGroup(), 2); + ordering.Remove(x + 2); + + // No non-zero groups left. + EXPECT_DEATH_IF_SUPPORTED(ordering.MinNonZeroGroup(), "NumGroups()"); +} } // namespace internal } // namespace ceres |