diff --git a/.cproject b/.cproject index f241acfb8..e7bb2cd93 100644 --- a/.cproject +++ b/.cproject @@ -311,6 +311,14 @@ true true + + make + -j2 + testGaussianFactor.run + true + true + true + make -j2 @@ -337,7 +345,6 @@ make - tests/testBayesTree.run true false @@ -345,7 +352,6 @@ make - testBinaryBayesNet.run true false @@ -393,7 +399,6 @@ make - testSymbolicBayesNet.run true false @@ -401,7 +406,6 @@ make - tests/testSymbolicFactor.run true false @@ -409,7 +413,6 @@ make - testSymbolicFactorGraph.run true false @@ -425,20 +428,11 @@ make - tests/testBayesTree true false true - - make - -j2 - testGaussianFactor.run - true - true - true - make -j2 @@ -465,6 +459,7 @@ make + testGraph.run true false @@ -536,6 +531,7 @@ make + testInference.run true false @@ -543,6 +539,7 @@ make + testGaussianFactor.run true false @@ -550,6 +547,7 @@ make + testJunctionTree.run true false @@ -557,6 +555,7 @@ make + testSymbolicBayesNet.run true false @@ -564,6 +563,7 @@ make + testSymbolicFactorGraph.run true false @@ -633,22 +633,6 @@ false true - - make - -j2 - tests/testPose2.run - true - true - true - - - make - -j2 - tests/testPose3.run - true - true - true - make -j2 @@ -665,6 +649,22 @@ true true + + make + -j2 + tests/testPose2.run + true + true + true + + + make + -j2 + tests/testPose3.run + true + true + true + make -j2 @@ -689,26 +689,18 @@ true true - + make - -j2 - all + -j5 + nonlinear.testValues.run true true true - + make - -j2 - check - true - true - true - - - make - -j2 - clean + -j5 + nonlinear.testOrdering.run true true true @@ -745,18 +737,26 @@ true true - + make - -j5 - nonlinear.testValues.run + -j2 + all true true true - + make - -j5 - nonlinear.testOrdering.run + -j2 + check + true + true + true + + + make + -j2 + clean true true true @@ -1067,7 +1067,6 @@ make - testErrors.run true false @@ -1523,6 +1522,7 @@ make + testSimulated2DOriented.run true false @@ -1562,6 +1562,7 @@ make + testSimulated2D.run true false @@ -1569,6 +1570,7 @@ make + testSimulated3D.run true false @@ -1582,6 +1584,14 @@ true true + + make + -j5 + testVector.run + true + true + true + make -j2 @@ -1752,6 +1762,7 @@ make + tests/testGaussianISAM2 true false @@ -1773,6 +1784,102 @@ true true + + make + -j2 + testRot3.run + true + true + true + + + make + -j2 + testRot2.run + true + true + true + + + make + -j2 + testPose3.run + true + true + true + + + make + -j2 + timeRot3.run + true + true + true + + + make + -j2 + testPose2.run + true + true + true + + + make + -j2 + testCal3_S2.run + true + true + true + + + make + -j2 + testSimpleCamera.run + true + true + true + + + make + -j2 + testHomography2.run + true + true + true + + + make + -j2 + testCalibratedCamera.run + true + true + true + + + make + -j2 + check + true + true + true + + + make + -j2 + clean + true + true + true + + + make + -j2 + testPoint2.run + true + true + true + make -j2 @@ -1974,7 +2081,6 @@ cpack - -G DEB true false @@ -1982,7 +2088,6 @@ cpack - -G RPM true false @@ -1990,7 +2095,6 @@ cpack - -G TGZ true false @@ -1998,147 +2102,11 @@ cpack - --config CPackSourceConfig.cmake true false true - - make - -j2 - testRot3.run - true - true - true - - - make - -j2 - testRot2.run - true - true - true - - - make - -j2 - testPose3.run - true - true - true - - - make - -j2 - timeRot3.run - true - true - true - - - make - -j2 - testPose2.run - true - true - true - - - make - -j2 - testCal3_S2.run - true - true - true - - - make - -j2 - testSimpleCamera.run - true - true - true - - - make - -j2 - testHomography2.run - true - true - true - - - make - -j2 - testCalibratedCamera.run - true - true - true - - - make - -j2 - check - true - true - true - - - make - -j2 - clean - true - true - true - - - make - -j2 - testPoint2.run - true - true - true - - - make - -j2 - check - true - true - true - - - make - -j2 - clean - true - true - true - - - make - -j2 - install - true - true - true - - - make - -j2 - all - true - true - true - - - cmake - .. - true - false - true - make -j5 @@ -2179,6 +2147,45 @@ true true + + make + -j2 + check + true + true + true + + + make + -j2 + clean + true + true + true + + + make + -j2 + install + true + true + true + + + make + -j2 + all + true + true + true + + + cmake + .. + true + false + true + diff --git a/gtsam/base/Vector.cpp b/gtsam/base/Vector.cpp index 5367cec09..27b56830c 100644 --- a/gtsam/base/Vector.cpp +++ b/gtsam/base/Vector.cpp @@ -38,6 +38,8 @@ using namespace std; +boost::minstd_rand generator(42u); + namespace gtsam { /* ************************************************************************* */ @@ -197,6 +199,15 @@ bool assert_equal(const Vector& expected, const Vector& actual, double tol) { return false; } +/* ************************************************************************* */ +bool assert_inequal(const Vector& expected, const Vector& actual, double tol) { + if (!equal_with_abs_tol(expected,actual,tol)) return true; + cout << "Erroneously equal:" << endl; + print(expected, "expected"); + print(actual, "actual"); + return false; +} + /* ************************************************************************* */ bool assert_equal(const SubVector& expected, const SubVector& actual, double tol) { if (equal_with_abs_tol(expected,actual,tol)) return true; diff --git a/gtsam/base/Vector.h b/gtsam/base/Vector.h index 2dd038e42..84fd506cb 100644 --- a/gtsam/base/Vector.h +++ b/gtsam/base/Vector.h @@ -25,11 +25,20 @@ #include #include -// Vector is just a typedef of the Eigen dynamic vector type -// TODO: make a version that works for matlab wrapping +/** + * Static random number generator - needs to maintain a state + * over time, hence the static generator. Be careful in + * cases where multiple processes (as is frequently the case with + * multi-robot scenarios) are using the sample() facilities + * in NoiseModel, as they will each have the same seed. + */ +// FIXME: make this go away - use the Sampler class instead +extern boost::minstd_rand generator; namespace gtsam { +// Vector is just a typedef of the Eigen dynamic vector type + // Typedef arbitary length vector typedef Eigen::VectorXd Vector; @@ -160,6 +169,15 @@ inline bool equal(const Vector& vec1, const Vector& vec2) { */ bool assert_equal(const Vector& vec1, const Vector& vec2, double tol=1e-9); +/** + * Not the same, prints if error + * @param vec1 Vector + * @param vec2 Vector + * @param tol 1e-9 + * @return bool + */ +bool assert_inequal(const Vector& vec1, const Vector& vec2, double tol=1e-9); + /** * Same, prints if error * @param vec1 Vector @@ -344,12 +362,17 @@ Vector concatVectors(size_t nrVectors, ...); */ Vector rand_vector_norm(size_t dim, double mean = 0, double sigma = 1); +/** + * Sets the generator to use a different seed value. + * Default argument resets the RNG + * @param seed is the new seed + */ +inline void seedRNG(unsigned int seed = 42u) { + generator.seed(seed); +} + } // namespace gtsam -// FIXME: make this go away - use the Sampler class instead -static boost::minstd_rand generator(42u); - - #include #include diff --git a/gtsam/base/tests/testVector.cpp b/gtsam/base/tests/testVector.cpp index 7506043c3..8b8757027 100644 --- a/gtsam/base/tests/testVector.cpp +++ b/gtsam/base/tests/testVector.cpp @@ -297,6 +297,27 @@ TEST( TestVector, linear_dependent3 ) EXPECT(!linear_dependent(v1, v2)); } +/* ************************************************************************* */ +TEST( TestVector, random ) +{ + // Assumes seed not previously reset during this test + seedRNG(); + Vector v1_42 = rand_vector_norm(5); + + // verify that resetting the RNG produces the same value + seedRNG(); + Vector v2_42 = rand_vector_norm(5); + + EXPECT(assert_equal(v1_42, v2_42, 1e-6)); + + // verify that different seed produces a different value + seedRNG(41u); + + Vector v3_41 = rand_vector_norm(5); + + EXPECT(assert_inequal(v1_42, v3_41, 1e-6)); +} + /* ************************************************************************* */ int main() { TestResult tr; return TestRegistry::runAllTests(tr); } /* ************************************************************************* */