aboutsummaryrefslogtreecommitdiff
path: root/internal/ceres/ordered_groups_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'internal/ceres/ordered_groups_test.cc')
-rw-r--r--internal/ceres/ordered_groups_test.cc66
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