centralize computation of tempo from SMF information
[ardour.git] / libs / evoral / test / CurveTest.cpp
index e7634f360251be2d5c37e022264f309bf409d9fe..01fdda20c2f70cda71cf5735b04e519b819d7f55 100644 (file)
@@ -38,6 +38,54 @@ using namespace Evoral;
             );                                                               \
     }
 
+void
+CurveTest::trivial ()
+{
+       float vec[1024];
+
+       boost::shared_ptr<Evoral::ControlList> cl = TestCtrlList();
+
+       cl->create_curve ();
+
+       // Empty curve
+       cl->curve().get_vector (1024.0, 2047.0, vec, 1024);
+       for (int i = 0; i < 1024; ++i) {
+               CPPUNIT_ASSERT_EQUAL (0.0f, vec[i]);
+       }
+
+       // Single point curve
+       cl->fast_simple_add(0.0, 42.0);
+       cl->curve().get_vector (1024.0, 2047.0, vec, 1024);
+       for (int i = 0; i < 1024; ++i) {
+               CPPUNIT_ASSERT_EQUAL (42.0f, vec[i]);
+       }
+}
+
+void
+CurveTest::rtGet ()
+{
+       float vec[1024];
+
+       // Create simple control list
+       boost::shared_ptr<Evoral::ControlList> cl = TestCtrlList();
+       cl->create_curve ();
+       cl->fast_simple_add(0.0, 42.0);
+
+       {
+               // Write-lock list
+               Glib::Threads::RWLock::WriterLock lm(cl->lock());
+
+               // Attempt to get vector in RT (expect failure)
+               CPPUNIT_ASSERT (!cl->curve().rt_safe_get_vector (1024.0, 2047.0, vec, 1024));
+       }
+
+       // Attempt to get vector in RT (expect success)
+       CPPUNIT_ASSERT (cl->curve().rt_safe_get_vector (1024.0, 2047.0, vec, 1024));
+       for (int i = 0; i < 1024; ++i) {
+               CPPUNIT_ASSERT_EQUAL (42.0f, vec[i]);
+       }
+}
+
 void
 CurveTest::twoPointLinear ()
 {
@@ -334,7 +382,7 @@ CurveTest::constrainedCubic ()
           f"2(x2) = 2*(2*f'2(x2) + f'2(x1))/(x2 – x1) - 6*(y2 – y1)/ (x2 – x1)^2
                   = 2*(2*0 + 1.8181)/(30 – 10) – 6*(150 – 130)/(30 – 10)^2
                   = -0.11818
-       
+
           d2 = 1/6 * (f"2(x2) - f"2(x1))/(x2 – x1)
              = 1/6 * (-0.11818 + 0.063636)/(30 – 10)
              = -0.0004545