diff options
author | Carl Hetherington <carl@carlh.net> | 2011-12-09 19:59:23 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-12-09 19:59:23 +0000 |
commit | 73461494d75ab794224cbe93021acfa51a8c98a9 (patch) | |
tree | 02738a5c19b178aebb3ae078e1bd2c2e8037eed2 /libs/ardour/test/interpolation_test.cc | |
parent | 1244cae5c1799c72dc7624dfd573704c56963ebe (diff) |
Add simple framewalk_to_beats test and normalise naming
of test files.
git-svn-id: svn://localhost/ardour2/branches/3.0@10954 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/test/interpolation_test.cc')
-rw-r--r-- | libs/ardour/test/interpolation_test.cc | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/libs/ardour/test/interpolation_test.cc b/libs/ardour/test/interpolation_test.cc new file mode 100644 index 0000000000..0bbb697b85 --- /dev/null +++ b/libs/ardour/test/interpolation_test.cc @@ -0,0 +1,168 @@ +#include <sigc++/sigc++.h> +#include "interpolation_test.h" + +CPPUNIT_TEST_SUITE_REGISTRATION(InterpolationTest); + +using namespace std; +using namespace ARDOUR; + +void +InterpolationTest::linearInterpolationTest () +{ + framecnt_t result = 0; +// cout << "\nLinear Interpolation Test\n"; + +// cout << "\nSpeed: 1/3"; + for (int i = 0; 3*i < NUM_SAMPLES - 1024;) { + linear.set_speed (double(1.0)/double(3.0)); + linear.set_target_speed (double(1.0)/double(3.0)); + result = linear.interpolate (0, 1024, input + i, output + i*3); + i += result; + } + +// cout << "\nSpeed: 1.0"; + linear.reset(); + linear.set_speed (1.0); + linear.set_target_speed (linear.speed()); + result = linear.interpolate (0, NUM_SAMPLES, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * linear.speed()), result); + for (int i = 0; i < NUM_SAMPLES; i += INTERVAL) { + CPPUNIT_ASSERT_EQUAL (1.0f, output[i]); + } + +// cout << "\nSpeed: 0.5"; + linear.reset(); + linear.set_speed (0.5); + linear.set_target_speed (linear.speed()); + result = linear.interpolate (0, NUM_SAMPLES, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * linear.speed()), result); + for (int i = 0; i < NUM_SAMPLES; i += (INTERVAL / linear.speed() +0.5)) { + CPPUNIT_ASSERT_EQUAL (1.0f, output[i]); + } + +// cout << "\nSpeed: 0.2"; + linear.reset(); + linear.set_speed (0.2); + linear.set_target_speed (linear.speed()); + result = linear.interpolate (0, NUM_SAMPLES, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * linear.speed()), result); + +// cout << "\nSpeed: 0.02"; + linear.reset(); + linear.set_speed (0.02); + linear.set_target_speed (linear.speed()); + result = linear.interpolate (0, NUM_SAMPLES, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * linear.speed()), result); + + /* This one fails due too error accumulation + cout << "\nSpeed: 0.002"; + linear.reset(); + linear.set_speed (0.002); + linear.set_target_speed (linear.speed()); + result = linear.interpolate (0, NUM_SAMPLES, input, output); + linear.speed(); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * linear.speed()), result); + */ + +// cout << "\nSpeed: 2.0"; + linear.reset(); + linear.set_speed (2.0); + linear.set_target_speed (linear.speed()); + result = linear.interpolate (0, NUM_SAMPLES / 2, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES / 2 * linear.speed()), result); + for (int i = 0; i < NUM_SAMPLES / 2; i += (INTERVAL / linear.speed() +0.5)) { + CPPUNIT_ASSERT_EQUAL (1.0f, output[i]); + } + +// cout << "\nSpeed: 10.0"; + linear.set_speed (10.0); + linear.set_target_speed (linear.speed()); + result = linear.interpolate (0, NUM_SAMPLES / 10, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES / 10 * linear.speed()), result); + for (int i = 0; i < NUM_SAMPLES / 10; i += (INTERVAL / linear.speed() +0.5)) { + CPPUNIT_ASSERT_EQUAL (1.0f, output[i]); + } + /* + for (int i=0; i < NUM_SAMPLES; ++i) { + cout << i << " " << output[i] << endl; + } + */ +} + +void +InterpolationTest::cubicInterpolationTest () +{ + framecnt_t result = 0; +// cout << "\nCubic Interpolation Test\n"; + +// cout << "\nSpeed: 1/3"; + for (int i = 0; 3*i < NUM_SAMPLES - 1024;) { + cubic.set_speed (double(1.0)/double(3.0)); + cubic.set_target_speed (double(1.0)/double(3.0)); + result = cubic.interpolate (0, 1024, input + i, output + i*3); + i += result; + } + +// cout << "\nSpeed: 1.0"; + cubic.reset(); + cubic.set_speed (1.0); + cubic.set_target_speed (cubic.speed()); + result = cubic.interpolate (0, NUM_SAMPLES, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * cubic.speed()), result); + for (int i = 0; i < NUM_SAMPLES; i += INTERVAL) { + CPPUNIT_ASSERT_EQUAL (1.0f, output[i]); + } + +// cout << "\nSpeed: 0.5"; + cubic.reset(); + cubic.set_speed (0.5); + cubic.set_target_speed (cubic.speed()); + result = cubic.interpolate (0, NUM_SAMPLES, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * cubic.speed()), result); + for (int i = 0; i < NUM_SAMPLES; i += (INTERVAL / cubic.speed() +0.5)) { + CPPUNIT_ASSERT_EQUAL (1.0f, output[i]); + } + +// cout << "\nSpeed: 0.2"; + cubic.reset(); + cubic.set_speed (0.2); + cubic.set_target_speed (cubic.speed()); + result = cubic.interpolate (0, NUM_SAMPLES, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * cubic.speed()), result); + +// cout << "\nSpeed: 0.02"; + cubic.reset(); + cubic.set_speed (0.02); + cubic.set_target_speed (cubic.speed()); + result = cubic.interpolate (0, NUM_SAMPLES, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * cubic.speed()), result); + + /* This one fails due too error accumulation + cout << "\nSpeed: 0.002"; + cubic.reset(); + cubic.set_speed (0.002); + cubic.set_target_speed (cubic.speed()); + result = cubic.interpolate (0, NUM_SAMPLES, input, output); + cubic.speed(); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES * cubic.speed()), result); + */ + +// cout << "\nSpeed: 2.0"; + cubic.reset(); + cubic.set_speed (2.0); + cubic.set_target_speed (cubic.speed()); + result = cubic.interpolate (0, NUM_SAMPLES / 2, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES / 2 * cubic.speed()), result); + for (int i = 0; i < NUM_SAMPLES / 2; i += (INTERVAL / cubic.speed() +0.5)) { + CPPUNIT_ASSERT_EQUAL (1.0f, output[i]); + } + +// cout << "\nSpeed: 10.0"; + cubic.set_speed (10.0); + cubic.set_target_speed (cubic.speed()); + result = cubic.interpolate (0, NUM_SAMPLES / 10, input, output); + CPPUNIT_ASSERT_EQUAL ((framecnt_t)(NUM_SAMPLES / 10 * cubic.speed()), result); + for (int i = 0; i < NUM_SAMPLES / 10; i += (INTERVAL / cubic.speed() +0.5)) { + CPPUNIT_ASSERT_EQUAL (1.0f, output[i]); + } +} |