116 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
		
		
			
		
	
	
			116 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
|  | /*
 | ||
|  |  * testConstrainedChordalBayesNet.cpp | ||
|  |  * | ||
|  |  *  Created on: Aug 11, 2009 | ||
|  |  *      Author: alexgc | ||
|  |  */ | ||
|  | 
 | ||
|  | #include <iostream>
 | ||
|  | #include <CppUnitLite/TestHarness.h>
 | ||
|  | #include "ConstrainedChordalBayesNet.h"
 | ||
|  | #include "smallExample.h"
 | ||
|  | 
 | ||
|  | using namespace gtsam; | ||
|  | using namespace std; | ||
|  | 
 | ||
|  | TEST ( ConstrainedChordalBayesNet, basic ) | ||
|  | { | ||
|  | 	ConstrainedChordalBayesNet ccbn = createConstrainedChordalBayesNet(); | ||
|  | 	FGConfig c = createConstrainedConfig(); | ||
|  | 
 | ||
|  | 	// get data back out
 | ||
|  | 	DeltaFunction::shared_ptr x0 = ccbn.get_delta("x0"); | ||
|  | 	ConditionalGaussian::shared_ptr x1 = ccbn.get("x1"); | ||
|  | 
 | ||
|  | 	Matrix R = eye(2); | ||
|  | 	Vector d = c["x1"]; | ||
|  | 	double sigma = 0.1; | ||
|  | 	ConditionalGaussian::shared_ptr f1(new ConditionalGaussian(d/sigma, R/sigma)); | ||
|  | 
 | ||
|  | 	DeltaFunction::shared_ptr f2(new DeltaFunction(c["x0"], "x0")); | ||
|  | 
 | ||
|  | 	CHECK(f1->equals(*x1)); | ||
|  | 	CHECK(f2->equals(*x0)); | ||
|  | } | ||
|  | 
 | ||
|  | TEST ( ConstrainedChordalBayesNet, equals ) | ||
|  | { | ||
|  | 	// basic check
 | ||
|  | 	ConstrainedChordalBayesNet ccbn1 = createConstrainedChordalBayesNet(); | ||
|  | 	ConstrainedChordalBayesNet ccbn2 = createConstrainedChordalBayesNet(); | ||
|  | 	CHECK(ccbn1.equals(ccbn2)); | ||
|  | 
 | ||
|  | 	// ensure deltas are compared
 | ||
|  | 	ConstrainedChordalBayesNet ccbn3; | ||
|  | 	FGConfig c = createConstrainedConfig(); | ||
|  | 	Matrix R = eye(2); | ||
|  | 	Vector d = c["x1"]; | ||
|  | 	double sigma = 0.1; | ||
|  | 	ConditionalGaussian::shared_ptr f1(new ConditionalGaussian(d/sigma, R/sigma)); | ||
|  | 	ccbn3.insert("x1", f1); | ||
|  | 
 | ||
|  | 	CHECK(!ccbn1.equals(ccbn3)); | ||
|  | } | ||
|  | 
 | ||
|  | TEST ( ConstrainedChordalBayesNet, copy ) | ||
|  | { | ||
|  | 	// use copy to allow testing with old example
 | ||
|  | 	ChordalBayesNet cbn = createSmallChordalBayesNet(); | ||
|  | 	ConstrainedChordalBayesNet actual(cbn); | ||
|  | 
 | ||
|  | 	ConditionalGaussian::shared_ptr x = cbn.get("x"); | ||
|  | 	ConditionalGaussian::shared_ptr y = cbn.get("y"); | ||
|  | 
 | ||
|  | 	ConstrainedChordalBayesNet expected; | ||
|  | 	expected.insert("x",x); | ||
|  | 	expected.insert("y",y); | ||
|  | 
 | ||
|  | 	CHECK(assert_equal(actual, expected)); | ||
|  | } | ||
|  | 
 | ||
|  | TEST ( ConstrainedChordalBayesNet, optimize_baseline ) | ||
|  | { | ||
|  | 	// optimize simple example
 | ||
|  | 	ChordalBayesNet cbn = createSmallChordalBayesNet(); | ||
|  | 	ConstrainedChordalBayesNet ccbn(cbn); | ||
|  | 	boost::shared_ptr<FGConfig> actual = ccbn.optimize(); | ||
|  | 
 | ||
|  | 	// create expected
 | ||
|  | 	FGConfig expected; | ||
|  | 	Vector x(1), y(1); x(0)=4.; y(0)=5.; | ||
|  | 	expected.insert("x", x); | ||
|  | 	expected.insert("y", y); | ||
|  | 
 | ||
|  | 	// verify
 | ||
|  | 	CHECK(expected.equals(*actual)); | ||
|  | } | ||
|  | 
 | ||
|  | TEST ( ConstrainedChordalBayesNet, optimize ) | ||
|  | { | ||
|  | 	ConstrainedChordalBayesNet ccbn = createConstrainedChordalBayesNet(); | ||
|  | 	FGConfig expected = createConstrainedConfig(); | ||
|  | 
 | ||
|  | 	// full optimization
 | ||
|  | 	boost::shared_ptr<FGConfig> actual1 = ccbn.optimize(); | ||
|  | 	CHECK(expected.equals(*actual1)); | ||
|  | 
 | ||
|  | 	// plug in a config
 | ||
|  | 	boost::shared_ptr<FGConfig> c1(new FGConfig); | ||
|  | 	c1->insert("x0", expected["x0"]); | ||
|  | 	boost::shared_ptr<FGConfig> actual2 = ccbn.optimize(c1); | ||
|  | 	CHECK(expected.equals(*actual2)); | ||
|  | 
 | ||
|  | 	// plug in the other value
 | ||
|  | 	boost::shared_ptr<FGConfig> c2(new FGConfig); | ||
|  | 	c2->insert("x1", expected["x1"]); | ||
|  | 	boost::shared_ptr<FGConfig> actual3 = ccbn.optimize(c2); | ||
|  | 	CHECK(expected.equals(*actual3)); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /* ************************************************************************* */ | ||
|  | int main() { TestResult tr; return TestRegistry::runAllTests(tr);} | ||
|  | /* ************************************************************************* */ | ||
|  | 
 |