diff --git a/tests/signal-all.cpp b/tests/signal-all.cpp index 36818ba579777f9b30cf6ecf8ac51633e9c55163..0cb56e50867e7773abef755b03bf0cd60ec1fd68 100644 --- a/tests/signal-all.cpp +++ b/tests/signal-all.cpp @@ -129,7 +129,7 @@ BOOST_AUTO_TEST_CASE(test_base) { /// Display the signal sigB.display(output); - BOOST_CHECK(output.is_equal("")); + BOOST_CHECK(output.is_equal("Sig:test")); } BOOST_AUTO_TEST_CASE(test_cast_helper) { diff --git a/tests/signal-cast-register-test.h b/tests/signal-cast-register-test.h new file mode 100644 index 0000000000000000000000000000000000000000..1d466c159a7183471a6223543cbbdfe1c4f85716 --- /dev/null +++ b/tests/signal-cast-register-test.h @@ -0,0 +1,4 @@ +#pragma GCC diagnostic push +#pragma GCC system_header +#include <Eigen/Dense> +#pragma GCC diagnostic pop diff --git a/tests/signal-cast-registerer.cpp b/tests/signal-cast-registerer.cpp index 80057f2715d218907a8c020ee67f218f035a7550..99f145a6a8a5c3d4c936c8957d29e9e9b29984bc 100644 --- a/tests/signal-cast-registerer.cpp +++ b/tests/signal-cast-registerer.cpp @@ -6,8 +6,7 @@ #include <boost/foreach.hpp> #include <boost/format.hpp> -#include <Eigen/Dense> - +#include "signal-cast-register-test.h" #include <dynamic-graph/debug.h> #include <dynamic-graph/eigen-io.h> #include <dynamic-graph/entity.h> diff --git a/tests/signal-ptr.cpp b/tests/signal-ptr.cpp index 30be26826fb9b66f7a02d4be15ce868d3581fcce..3c3277fa9b6a224afff78882301653755af4b278 100644 --- a/tests/signal-ptr.cpp +++ b/tests/signal-ptr.cpp @@ -3,12 +3,15 @@ #include <string> +#include <boost/foreach.hpp> + #include <dynamic-graph/debug.h> #include <dynamic-graph/entity.h> #include <dynamic-graph/factory.h> #include <dynamic-graph/pool.h> #include <dynamic-graph/signal-base.h> #include <dynamic-graph/signal-ptr.h> +#include <dynamic-graph/signal-time-dependent.h> #include <dynamic-graph/signal.h> #include <iostream> @@ -17,14 +20,61 @@ #include <boost/test/unit_test_suite.hpp> #include <string> +using boost::test_tools::output_test_stream; + +typedef dynamicgraph::SignalTimeDependent<double, int> sigDouble_t; +typedef dynamicgraph::SignalTimeDependent<std::string, int> sigString_t; + using namespace dynamicgraph; using std::cout; -BOOST_AUTO_TEST_CASE(normal_test) { - Signal<double, int> sig("sig"); - SignalPtr<double, int> sigPtrA(NULL, "sigPtrA"), sigPtrB(NULL, "sigPtrB"); +template <class T> class DummyClass { +public: + std::string proname; + std::list<sigDouble_t *> inputsig; + std::list<sigString_t *> inputsigV; + + DummyClass(const std::string &n) : proname(n), res(), call(), timedata() {} + + T &fun(T &res, int t) { + ++call; + timedata = t; + + BOOST_FOREACH (sigDouble_t *ptr, inputsig) + ptr->access(timedata); + + BOOST_FOREACH (sigString_t *ptr, inputsigV) + ptr->access(timedata); + + res = (*this)(); + return res; + } + + void add(sigDouble_t &sig) { inputsig.push_back(&sig); } + void add(sigString_t &sig) { inputsigV.push_back(&sig); } + + T operator()(); + + T res; + int call; + int timedata; +}; + +template <> double DummyClass<double>::operator()() { + res = call * timedata; + return res; +} +template <> std::string DummyClass<std::string>::operator()() { + std::ostringstream oss; + oss << call * timedata; + return oss.str(); +} + +template <class T> T DummyClass<T>::operator()() { return this->res; } + +BOOST_AUTO_TEST_CASE(normal_cst_test) { SignalPtr<double, int> sigNotPlug(NULL, "sigNotPlug"); - SignalPtr<double, int> sigPtrAbstract(NULL, "sigPtrAbstract"); + const SignalPtr<double, int> cstSigNotPlug(NULL, "sigNotPlug"); try { sigNotPlug.getPtr(); @@ -32,6 +82,69 @@ BOOST_AUTO_TEST_CASE(normal_test) { cout << "Error catch" << std::endl; } + // Test getPtr without plug + /// This create a ExceptionSignal::NOT_INITIALIZED + bool res = false; + try { + // Signal<double, int> * r = + sigNotPlug.getPtr(); + } + catch(const ExceptionSignal &aea) + { + res = (aea.getCode() == ExceptionSignal::NOT_INITIALIZED); + } + BOOST_CHECK(res); + + /// Testing const getPtr() interface: no plug case + try { + cstSigNotPlug.getPtr(); + } + catch(const ExceptionSignal &aea) + { + res = (aea.getCode() == ExceptionSignal::NOT_INITIALIZED); + } + BOOST_CHECK(res); + + /// Test needUpdate without plug + res = sigNotPlug.needUpdate(5); + sigNotPlug.getTime(); + output_test_stream output; + sigNotPlug.display(output); + cstSigNotPlug.display(output); + + /// Testing getAbsatractPtr() interface: no plug + res=false; + try { + sigNotPlug.getAbstractPtr(); + } + catch(const ExceptionSignal &aea) + { + res = (aea.getCode() == ExceptionSignal::NOT_INITIALIZED); + } + BOOST_CHECK(res); + + /// Testing const getAbstractPtr() interface: no plug case + try { + cstSigNotPlug.getAbstractPtr(); + } + catch(const ExceptionSignal &aea) + { + res = (aea.getCode() == ExceptionSignal::NOT_INITIALIZED); + } + BOOST_CHECK(res); + + try { sigNotPlug.checkCompatibility(); } + catch(...) { } + BOOST_CHECK(res); + +} + +BOOST_AUTO_TEST_CASE(normal_test) { + Signal<double, int> sig("sig"); + SignalPtr<double, int> sigPtrA(NULL, "sigPtrA"), sigPtrB(NULL, "sigPtrB"); + SignalPtr<double, int> sigPtrAbstract(NULL, "sigPtrAbstract"); + DummyClass<double> pro3("pro3"); + sig.setConstant(1.56); sig.recompute(2); std::string name = "sig"; @@ -42,17 +155,31 @@ BOOST_AUTO_TEST_CASE(normal_test) { } catch (ExceptionSignal e) { e.getExceptionName(); } - + BOOST_CHECK(true); + + sigPtrA.setFunction(boost::bind(&DummyClass<double>::fun, &pro3, _1, _2)); + + /// Plugging signal. SignalBase<int> &sigRef = sig; SignalBase<int> &sigPtrARef = sigPtrA, &sigPtrBRef = sigPtrB, &sigPtrAbstractRef = sigPtrAbstract; + sigPtrARef.plug(0); sigPtrARef.plug(&sigRef); sigPtrBRef.plug(&sigPtrARef); - // TODO here + /// Plug the signal. sigPtrAbstractRef.plug(&sigRef); sigPtrA.getPtr(); + BOOST_CHECK(true); + try { sigPtrARef.checkCompatibility(); } + catch(...) { } + sigPtrA.needUpdate(5); + // BOOST_CHECK(res); + + int ltime = sigPtrA.getTime(); sigPtrA.getPluged(); + sigPtrA(ltime); + sigPtrB.getPtr(); sigPtrAbstract.getAbstractPtr(); @@ -71,10 +198,18 @@ BOOST_AUTO_TEST_CASE(normal_test) { tab_D[0] = 1.2; tab_D[1] = 3.4; sigPtrA.setReference(tab_D, NULL); + sigPtrA.access(5); + output_test_stream output; + sigPtrA.display(output); + sigPtrA.setReferenceNonConstant(tab_D, NULL); + sigPtrA.access(5); + sigPtrA.display(output); + // getreference sigPtrA.operator=(1.2); // getconstant - + sigPtrA.displayDependencies(output); + cout << t << std::endl; cout << "Sig = "; sigRef.get(cout); @@ -85,6 +220,8 @@ BOOST_AUTO_TEST_CASE(normal_test) { cout << "SigPtrB = "; sigPtrBRef.get(cout); cout << std::endl; + + sigPtrA.unplug(); } BOOST_AUTO_TEST_CASE(plug_signal_string) { diff --git a/tests/signal-time-dependent.cpp b/tests/signal-time-dependent.cpp index 6beca83b7e97ebdb82b1912cc6b6a53720cf9773..ff41935059fc1a1afad294685dae16b7aeac5d19 100644 --- a/tests/signal-time-dependent.cpp +++ b/tests/signal-time-dependent.cpp @@ -1,6 +1,6 @@ // Copyright 2010 Thomas Moulard. // - +#include <iostream> #include <boost/foreach.hpp> #include <dynamic-graph/signal-time-dependent.h> @@ -72,6 +72,7 @@ BOOST_AUTO_TEST_CASE(signaltimedependent) { sigDouble_t sig3(sig2 << sig5 << sig6, "Sig3"); sigDouble_t sig1(boost::bind(&DummyClass<double>::fun, &pro1, _1, _2), sig2 << sig3, "Sig1"); + sigDouble_t sig7("Sig7"); sig2.setFunction(boost::bind(&DummyClass<std::string>::fun, &pro2, _1, _2)); sig3.setFunction(boost::bind(&DummyClass<double>::fun, &pro3, _1, _2)); @@ -209,4 +210,23 @@ BOOST_AUTO_TEST_CASE(signaltimedependent) { sig1.needUpdate(6); sig1.needUpdate(6); + output_test_stream output; + sig1.writeGraph(output); + BOOST_CHECK(output.is_equal("")); + + sig1.removeDependency(sig3); + BOOST_CHECK(true); + const double & avalue =sig1(6); + output << avalue; + BOOST_CHECK(true); + /// Verify check compatibility + try { + sig1.checkCompatibility(); + } + // catch(double e) + catch(...) + { + std::cout << "Message: test \n"; + } + BOOST_CHECK(true); }