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); }
/* ************************************************************************* */