Fix Eigen Row/ColMajor bug in NumericDiffCostFunction.

If the parameter block size is 1, asking Eigen to create
a row-major matrix triggers a compile time error. Previously
we were handling the case where the number of rows in the
jacobian block was known statically, but the problem is present
when the nummber of rows is dynamic.

This CL fixes this problem.

Thanks to Dominik Reitzle for reporting this.

Change-Id: I99c3eec3558e66ebf4efa51c4dee8ce292ffe0c1
This commit is contained in:
Sameer Agarwal
2014-08-27 22:18:33 -07:00
committed by Keir Mierle
parent 6c25185bb1
commit 12eb389b4e
2 changed files with 30 additions and 3 deletions
@@ -182,6 +182,30 @@ TEST(NumericDiffCostFunction, EigenRowMajorColMajorTest) {
cost_function.reset(
new NumericDiffCostFunction<SizeTestingCostFunction<2,2>, CENTRAL, 2, 2>(
new SizeTestingCostFunction<2,2>, ceres::TAKE_OWNERSHIP));
cost_function.reset(
new NumericDiffCostFunction<EasyFunctor, CENTRAL, ceres::DYNAMIC, 1, 1>(
new EasyFunctor, TAKE_OWNERSHIP, 1));
cost_function.reset(
new NumericDiffCostFunction<EasyFunctor, CENTRAL, ceres::DYNAMIC, 1, 1>(
new EasyFunctor, TAKE_OWNERSHIP, 2));
cost_function.reset(
new NumericDiffCostFunction<EasyFunctor, CENTRAL, ceres::DYNAMIC, 1, 2>(
new EasyFunctor, TAKE_OWNERSHIP, 1));
cost_function.reset(
new NumericDiffCostFunction<EasyFunctor, CENTRAL, ceres::DYNAMIC, 1, 2>(
new EasyFunctor, TAKE_OWNERSHIP, 2));
cost_function.reset(
new NumericDiffCostFunction<EasyFunctor, CENTRAL, ceres::DYNAMIC, 2, 1>(
new EasyFunctor, TAKE_OWNERSHIP, 1));
cost_function.reset(
new NumericDiffCostFunction<EasyFunctor, CENTRAL, ceres::DYNAMIC, 2, 1>(
new EasyFunctor, TAKE_OWNERSHIP, 2));
}
TEST(NumericDiffCostFunction, EasyCaseFunctorCentralDifferencesAndDynamicNumResiduals) {