@@ -490,6 +490,58 @@ TEST(HybridGaussianFactorGraph, SwitchingTwoVar) {
490
490
}
491
491
}
492
492
493
+ /* ****************************************************************************/
494
+ // Select a particular continuous factor graph given a discrete assignment
495
+ TEST (HybridGaussianFactorGraph, DiscreteSelection) {
496
+ Switching s (3 );
497
+
498
+ HybridGaussianFactorGraph graph = s.linearizedFactorGraph ;
499
+
500
+ DiscreteValues dv00{{M (0 ), 0 }, {M (1 ), 0 }};
501
+ GaussianFactorGraph continuous_00 = graph (dv00);
502
+ GaussianFactorGraph expected_00;
503
+ expected_00.push_back (JacobianFactor (X (0 ), I_1x1 * 10 , Vector1 (-10 )));
504
+ expected_00.push_back (JacobianFactor (X (0 ), -I_1x1, X (1 ), I_1x1, Vector1 (-1 )));
505
+ expected_00.push_back (JacobianFactor (X (1 ), -I_1x1, X (2 ), I_1x1, Vector1 (-1 )));
506
+ expected_00.push_back (JacobianFactor (X (1 ), I_1x1 * 10 , Vector1 (-10 )));
507
+ expected_00.push_back (JacobianFactor (X (2 ), I_1x1 * 10 , Vector1 (-10 )));
508
+
509
+ EXPECT (assert_equal (expected_00, continuous_00));
510
+
511
+ DiscreteValues dv01{{M (0 ), 0 }, {M (1 ), 1 }};
512
+ GaussianFactorGraph continuous_01 = graph (dv01);
513
+ GaussianFactorGraph expected_01;
514
+ expected_01.push_back (JacobianFactor (X (0 ), I_1x1 * 10 , Vector1 (-10 )));
515
+ expected_01.push_back (JacobianFactor (X (0 ), -I_1x1, X (1 ), I_1x1, Vector1 (-1 )));
516
+ expected_01.push_back (JacobianFactor (X (1 ), -I_1x1, X (2 ), I_1x1, Vector1 (-0 )));
517
+ expected_01.push_back (JacobianFactor (X (1 ), I_1x1 * 10 , Vector1 (-10 )));
518
+ expected_01.push_back (JacobianFactor (X (2 ), I_1x1 * 10 , Vector1 (-10 )));
519
+
520
+ EXPECT (assert_equal (expected_01, continuous_01));
521
+
522
+ DiscreteValues dv10{{M (0 ), 1 }, {M (1 ), 0 }};
523
+ GaussianFactorGraph continuous_10 = graph (dv10);
524
+ GaussianFactorGraph expected_10;
525
+ expected_10.push_back (JacobianFactor (X (0 ), I_1x1 * 10 , Vector1 (-10 )));
526
+ expected_10.push_back (JacobianFactor (X (0 ), -I_1x1, X (1 ), I_1x1, Vector1 (-0 )));
527
+ expected_10.push_back (JacobianFactor (X (1 ), -I_1x1, X (2 ), I_1x1, Vector1 (-1 )));
528
+ expected_10.push_back (JacobianFactor (X (1 ), I_1x1 * 10 , Vector1 (-10 )));
529
+ expected_10.push_back (JacobianFactor (X (2 ), I_1x1 * 10 , Vector1 (-10 )));
530
+
531
+ EXPECT (assert_equal (expected_10, continuous_10));
532
+
533
+ DiscreteValues dv11{{M (0 ), 1 }, {M (1 ), 1 }};
534
+ GaussianFactorGraph continuous_11 = graph (dv11);
535
+ GaussianFactorGraph expected_11;
536
+ expected_11.push_back (JacobianFactor (X (0 ), I_1x1 * 10 , Vector1 (-10 )));
537
+ expected_11.push_back (JacobianFactor (X (0 ), -I_1x1, X (1 ), I_1x1, Vector1 (-0 )));
538
+ expected_11.push_back (JacobianFactor (X (1 ), -I_1x1, X (2 ), I_1x1, Vector1 (-0 )));
539
+ expected_11.push_back (JacobianFactor (X (1 ), I_1x1 * 10 , Vector1 (-10 )));
540
+ expected_11.push_back (JacobianFactor (X (2 ), I_1x1 * 10 , Vector1 (-10 )));
541
+
542
+ EXPECT (assert_equal (expected_11, continuous_11));
543
+ }
544
+
493
545
/* ************************************************************************* */
494
546
TEST (HybridGaussianFactorGraph, optimize) {
495
547
HybridGaussianFactorGraph hfg;
0 commit comments