mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 16:40:38 +08:00
Allow LocalParameterizations to have zero local size.
Local parameterizations with zero tangent/local size will cause the corresponding parameter block to be treated as constant. https://github.com/ceres-solver/ceres-solver/issues/347 Change-Id: I554a2acc420f5dd9d0cc7f97b691877eb057b2c0
This commit is contained in:
@@ -36,7 +36,7 @@
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
TEST(ParameterBlock, SetLocalParameterizationDiesOnSizeMismatch) {
|
||||
TEST(ParameterBlock, SetParameterizationDiesOnSizeMismatch) {
|
||||
double x[3] = {1.0, 2.0, 3.0};
|
||||
ParameterBlock parameter_block(x, 3, -1);
|
||||
std::vector<int> indices;
|
||||
@@ -46,7 +46,7 @@ TEST(ParameterBlock, SetLocalParameterizationDiesOnSizeMismatch) {
|
||||
parameter_block.SetParameterization(&subset_wrong_size), "global");
|
||||
}
|
||||
|
||||
TEST(ParameterBlock, SetLocalParameterizationWithSameExistingParameterization) {
|
||||
TEST(ParameterBlock, SetParameterizationWithSameExistingParameterization) {
|
||||
double x[3] = {1.0, 2.0, 3.0};
|
||||
ParameterBlock parameter_block(x, 3, -1);
|
||||
std::vector<int> indices;
|
||||
@@ -56,19 +56,34 @@ TEST(ParameterBlock, SetLocalParameterizationWithSameExistingParameterization) {
|
||||
parameter_block.SetParameterization(&subset);
|
||||
}
|
||||
|
||||
TEST(ParameterBlock, SetParameterizationDiesOnZeroLocalSize) {
|
||||
TEST(ParameterBlock, SetParameterizationAllowsResettingToNull) {
|
||||
double x[3] = {1.0, 2.0, 3.0};
|
||||
ParameterBlock parameter_block(x, 3, -1);
|
||||
std::vector<int> indices;
|
||||
indices.push_back(0);
|
||||
indices.push_back(1);
|
||||
indices.push_back(2);
|
||||
SubsetParameterization subset(3, indices);
|
||||
EXPECT_DEATH_IF_SUPPORTED(parameter_block.SetParameterization(&subset),
|
||||
"positive dimensional tangent");
|
||||
parameter_block.SetParameterization(&subset);
|
||||
EXPECT_EQ(parameter_block.local_parameterization(), &subset);
|
||||
parameter_block.SetParameterization(nullptr);
|
||||
EXPECT_EQ(parameter_block.local_parameterization(), nullptr);
|
||||
}
|
||||
|
||||
TEST(ParameterBlock, SetLocalParameterizationAndNormalOperation) {
|
||||
TEST(ParameterBlock,
|
||||
SetParameterizationAllowsResettingToDifferentParameterization) {
|
||||
double x[3] = {1.0, 2.0, 3.0};
|
||||
ParameterBlock parameter_block(x, 3, -1);
|
||||
std::vector<int> indices;
|
||||
indices.push_back(1);
|
||||
SubsetParameterization subset(3, indices);
|
||||
parameter_block.SetParameterization(&subset);
|
||||
EXPECT_EQ(parameter_block.local_parameterization(), &subset);
|
||||
|
||||
SubsetParameterization subset_different(3, indices);
|
||||
parameter_block.SetParameterization(&subset_different);
|
||||
EXPECT_EQ(parameter_block.local_parameterization(), &subset_different);
|
||||
}
|
||||
|
||||
TEST(ParameterBlock, SetParameterizationAndNormalOperation) {
|
||||
double x[3] = {1.0, 2.0, 3.0};
|
||||
ParameterBlock parameter_block(x, 3, -1);
|
||||
std::vector<int> indices;
|
||||
|
||||
Reference in New Issue
Block a user