From 9c992fa97c5819455b1070a8c58a6072ecf0071d Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 20 Jan 2015 00:46:58 +0100 Subject: [PATCH] few more basic ControList/Curve Tests --- libs/evoral/test/CurveTest.cpp | 172 +++++++++++++++++++++++++++++++-- libs/evoral/test/CurveTest.hpp | 6 ++ 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 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 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 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 TestCtrlList() { -- 2.30.2