summaryrefslogtreecommitdiff
path: root/libs/evoral/test
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-01-20 00:46:58 +0100
committerRobin Gareus <robin@gareus.org>2015-01-20 00:46:58 +0100
commit9c992fa97c5819455b1070a8c58a6072ecf0071d (patch)
treeeb67a64b8090739da6b74ae01c52c5b63db233bf /libs/evoral/test
parentc6e71a683e6a685ed55c35670c6b4bfd20e38b5f (diff)
few more basic ControList/Curve Tests
Diffstat (limited to 'libs/evoral/test')
-rw-r--r--libs/evoral/test/CurveTest.cpp172
-rw-r--r--libs/evoral/test/CurveTest.hpp6
2 files changed, 168 insertions, 10 deletions
diff --git a/libs/evoral/test/CurveTest.cpp b/libs/evoral/test/CurveTest.cpp
index f4e2d606b6..36c4d808d2 100644
--- a/libs/evoral/test/CurveTest.cpp
+++ b/libs/evoral/test/CurveTest.cpp
@@ -43,7 +43,7 @@ CurveTest::twoPointLinear ()
// greetings to tartina
cl->curve ().get_vector (2048.0, 2048.0, vec, 1);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 @ 2048-2048", 2560.f, vec[0]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 @ 2048..2048", 2560.f, vec[0]);
/* XXX WHAT DO WE EXPECT WITH veclen=1 AND x1 > x0 ? */
#if 0
@@ -56,22 +56,174 @@ CurveTest::twoPointLinear ()
#else
/* .. value at x0 */
cl->curve ().get_vector (2048.0, 2049.0, vec, 1);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 , 2048-2049", 2560.f, vec[0]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 , 2048..2049", 2560.f, vec[0]);
cl->curve ().get_vector (2048.0, 2056.0, vec, 1);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 , 2048-2049", 2560.f, vec[0]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 , 2048..2049", 2560.f, vec[0]);
#endif
cl->curve ().get_vector (2048.0, 2048.0, vec, 2);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=2 , 2048-2048 @ 0", 2560.f, vec[0]);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=2 , 2048-2048 @ 1", 2560.f, vec[1]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=2 , 2048..2048 @ 0", 2560.f, vec[0]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=2 , 2048..2048 @ 1", 2560.f, vec[1]);
cl->curve ().get_vector (2048.0, 2056.0, vec, 2);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=2 , 2048-2056 @ 0", 2560.f, vec[0]);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=2 , 2048-2056 @ 0", 2562.f, vec[1]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=2 , 2048..2056 @ 0", 2560.f, vec[0]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=2 , 2048..2056 @ 0", 2562.f, vec[1]);
cl->curve ().get_vector (2048.0, 2056.0, vec, 3);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 , 2048-2056 @ 0", 2560.f, vec[0]);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 , 2048-2056 @ 1", 2561.f, vec[1]);
- CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 , 2048-2056 @ 2", 2562.f, vec[2]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 , 2048..2056 @ 0", 2560.f, vec[0]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 , 2048..2056 @ 1", 2561.f, vec[1]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 , 2048..2056 @ 2", 2562.f, vec[2]);
+
+ /* check out-of range..
+ * we expect the first and last value - no interpolation
+ */
+ cl->curve ().get_vector (-1, -1, vec, 1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 @ -1", 2048.f, vec[0]);
+
+ cl->curve ().get_vector (9999.0, 9999.0, vec, 1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 @ 9999", 4096.f, vec[0]);
+
+ cl->curve ().get_vector (-999.0, 0, vec, 13);
+ for (int i = 0; i < 13; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=13 @ -999..0", 2048.f, vec[i]);
+ }
+
+ cl->curve ().get_vector (9998.0, 9999.0, vec, 8);
+ for (int i = 0; i < 8; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=8 @ 9998..9999", 4096.f, vec[i]);
+ }
+}
+
+void
+CurveTest::threePointLinear ()
+{
+ float vec[4];
+
+ boost::shared_ptr<Evoral::ControlList> cl = TestCtrlList();
+
+ cl->create_curve ();
+ cl->set_interpolation (ControlList::Linear);
+
+ // add 3 points to curve
+ cl->fast_simple_add ( 0.0 , 2.0);
+ cl->fast_simple_add ( 100.0 , 4.0);
+ cl->fast_simple_add ( 200.0 , 0.0);
+
+ cl->curve ().get_vector (50.0, 60.0, vec, 1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 @ 50", 3.f, vec[0]);
+
+ cl->curve ().get_vector (100.0, 100.0, vec, 1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 @ 100", 4.f, vec[0]);
+
+ cl->curve ().get_vector (150.0, 150.0, vec, 1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=1 @ 150", 2.f, vec[0]);
+
+ cl->curve ().get_vector (130.0, 150.0, vec, 3);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 130..150 @ 0", 2.8f, vec[0]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 130..150 @ 2", 2.4f, vec[1]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 130..150 @ 3", 2.0f, vec[2]);
+
+ cl->curve ().get_vector (80.0, 160.0, vec, 3);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 80..160 @ 0", 3.6f, vec[0]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 80..160 @ 2", 3.2f, vec[1]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE ("veclen=3 80..160 @ 3", 1.6f, vec[2]);
+}
+
+void
+CurveTest::threePointDiscete ()
+{
+ boost::shared_ptr<Evoral::ControlList> cl = TestCtrlList();
+ cl->set_interpolation (ControlList::Discrete);
+
+ // add 3 points to curve
+ cl->fast_simple_add ( 0.0 , 2.0);
+ cl->fast_simple_add ( 100.0 , 4.0);
+ cl->fast_simple_add ( 200.0 , 0.0);
+
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(160.));
+
+ cl->set_interpolation (ControlList::Linear);
+
+ CPPUNIT_ASSERT_EQUAL(3.6, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(3.2, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(1.6, cl->unlocked_eval(160.));
+}
+
+void
+CurveTest::ctrlListEval ()
+{
+ boost::shared_ptr<Evoral::ControlList> cl = TestCtrlList();
+
+ cl->fast_simple_add ( 0.0 , 2.0);
+
+ cl->set_interpolation (ControlList::Discrete);
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(160.));
+
+ cl->set_interpolation (ControlList::Linear);
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(160.));
+
+ cl->fast_simple_add ( 100.0 , 4.0);
+
+ cl->set_interpolation (ControlList::Discrete);
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(160.));
+
+ cl->set_interpolation (ControlList::Linear);
+ CPPUNIT_ASSERT_EQUAL(3.6, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(160.));
+
+ cl->fast_simple_add ( 200.0 , 0.0);
+
+ cl->set_interpolation (ControlList::Discrete);
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(160.));
+
+ cl->set_interpolation (ControlList::Linear);
+ CPPUNIT_ASSERT_EQUAL(3.6, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(3.2, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(1.6, cl->unlocked_eval(160.));
+
+ cl->fast_simple_add ( 300.0 , 8.0);
+
+ cl->set_interpolation (ControlList::Discrete);
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(160.));
+ CPPUNIT_ASSERT_EQUAL(0.0, cl->unlocked_eval(250.));
+ CPPUNIT_ASSERT_EQUAL(8.0, cl->unlocked_eval(999.));
+
+ cl->set_interpolation (ControlList::Linear);
+ CPPUNIT_ASSERT_EQUAL(3.6, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(3.2, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(1.6, cl->unlocked_eval(160.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(250.));
+ CPPUNIT_ASSERT_EQUAL(8.0, cl->unlocked_eval(999.));
+
+ cl->fast_simple_add ( 400.0 , 9.0);
+
+ cl->set_interpolation (ControlList::Discrete);
+ CPPUNIT_ASSERT_EQUAL(2.0, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(160.));
+ CPPUNIT_ASSERT_EQUAL(0.0, cl->unlocked_eval(250.));
+ CPPUNIT_ASSERT_EQUAL(8.0, cl->unlocked_eval(350.));
+ CPPUNIT_ASSERT_EQUAL(9.0, cl->unlocked_eval(999.));
+
+ cl->set_interpolation (ControlList::Linear);
+ CPPUNIT_ASSERT_EQUAL(3.6, cl->unlocked_eval(80.));
+ CPPUNIT_ASSERT_EQUAL(3.2, cl->unlocked_eval(120.));
+ CPPUNIT_ASSERT_EQUAL(1.6, cl->unlocked_eval(160.));
+ CPPUNIT_ASSERT_EQUAL(4.0, cl->unlocked_eval(250.));
+ CPPUNIT_ASSERT_EQUAL(8.5, cl->unlocked_eval(350.));
+ CPPUNIT_ASSERT_EQUAL(9.0, cl->unlocked_eval(999.));
}
diff --git a/libs/evoral/test/CurveTest.hpp b/libs/evoral/test/CurveTest.hpp
index 042ee90843..a1c37d4246 100644
--- a/libs/evoral/test/CurveTest.hpp
+++ b/libs/evoral/test/CurveTest.hpp
@@ -7,10 +7,16 @@ class CurveTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE (CurveTest);
CPPUNIT_TEST (twoPointLinear);
+ CPPUNIT_TEST (threePointLinear);
+ CPPUNIT_TEST (threePointDiscete);
+ CPPUNIT_TEST (ctrlListEval);
CPPUNIT_TEST_SUITE_END ();
public:
void twoPointLinear ();
+ void threePointLinear ();
+ void threePointDiscete ();
+ void ctrlListEval ();
private:
boost::shared_ptr<Evoral::ControlList> TestCtrlList() {