Add test for DSPLoadCalculator to libardour tests
This commit is contained in:
parent
158c12eb92
commit
449b57d583
112
libs/ardour/test/dsp_load_calculator_test.cc
Normal file
112
libs/ardour/test/dsp_load_calculator_test.cc
Normal file
@ -0,0 +1,112 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "ardour/dsp_load_calculator.h"
|
||||
|
||||
#include "dsp_load_calculator_test.h"
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION (DSPLoadCalculatorTest);
|
||||
|
||||
using namespace std;
|
||||
using namespace ARDOUR;
|
||||
|
||||
void
|
||||
DSPLoadCalculatorTest::basicTest ()
|
||||
{
|
||||
DSPLoadCalculator dsp_calc;
|
||||
|
||||
dsp_calc.set_max_time(48000, 512);
|
||||
int64_t dsp_100_pc_48k_us = 10666;
|
||||
|
||||
CPPUNIT_ASSERT(dsp_calc.get_max_time_us() == dsp_100_pc_48k_us);
|
||||
|
||||
// test equivalent of 10% load
|
||||
dsp_calc.set_start_timestamp_us(0);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us/10);
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() <= 0.1f);
|
||||
|
||||
// test equivalent of 50% load and check that the load jumps to 50 percent
|
||||
dsp_calc.set_start_timestamp_us(0);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us/2);
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() <= 0.5f);
|
||||
|
||||
// test equivalent of 100% load
|
||||
dsp_calc.set_start_timestamp_us(0);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us);
|
||||
CPPUNIT_ASSERT(dsp_calc.elapsed_time_us() == dsp_100_pc_48k_us);
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() <= 1.0f);
|
||||
|
||||
// test setting the equivalent of 100% twice doesn't lead to a dsp value > 1.0
|
||||
dsp_calc.set_start_timestamp_us(dsp_100_pc_48k_us);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us * 2);
|
||||
CPPUNIT_ASSERT(dsp_calc.elapsed_time_us() == dsp_100_pc_48k_us);
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() <= 1.0f);
|
||||
|
||||
// test setting the equivalent of 200% clamps the value to 1.0
|
||||
dsp_calc.set_start_timestamp_us(dsp_100_pc_48k_us);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us * 3);
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() == 1.0f);
|
||||
|
||||
// test setting the an stop timestamp before the start timestamp is ignored
|
||||
// and the previous dsp value is returned
|
||||
dsp_calc.set_start_timestamp_us(dsp_100_pc_48k_us * 2);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us);
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() == 1.0f);
|
||||
|
||||
float dsp_load = dsp_calc.get_dsp_load();
|
||||
|
||||
// test setting the equivalent of beyond the max_timer_error_us is ignored and
|
||||
// the previous dsp value is returned
|
||||
dsp_calc.set_start_timestamp_us (0);
|
||||
dsp_calc.set_stop_timestamp_us (dsp_100_pc_48k_us*10);
|
||||
CPPUNIT_ASSERT(dsp_calc.elapsed_time_us() > dsp_calc.max_timer_error_us());
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() == dsp_load);
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
// test the rate of rolloff of the LPF from 100% with load at constant 50%
|
||||
// over the equivalent of 1 second
|
||||
for (int i = 0; i < 1e6 / dsp_100_pc_48k_us; ++i) {
|
||||
dsp_calc.set_start_timestamp_us(0);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us / 2);
|
||||
CPPUNIT_ASSERT(dsp_calc.elapsed_time_us() == 5333);
|
||||
std::cout << "DSP 50% load value = " << dsp_calc.get_dsp_load() << std::endl;
|
||||
}
|
||||
|
||||
// test that the LPF is still working after one second of values
|
||||
// TODO need to work out what is required in terms of responsiveness etc
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() > 0.5f);
|
||||
|
||||
// compare 96k to 48k
|
||||
DSPLoadCalculator dsp_calc_96k;
|
||||
dsp_calc_96k.set_max_time(96000, 512);
|
||||
int64_t dsp_100_pc_96k_us = 5333;
|
||||
|
||||
// reset both to 100%
|
||||
dsp_calc.set_start_timestamp_us(dsp_100_pc_48k_us);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us * 2);
|
||||
CPPUNIT_ASSERT(dsp_calc.elapsed_time_us() == dsp_100_pc_48k_us);
|
||||
CPPUNIT_ASSERT(dsp_calc.get_dsp_load() <= 1.0f);
|
||||
dsp_calc_96k.set_start_timestamp_us(dsp_100_pc_96k_us);
|
||||
dsp_calc_96k.set_stop_timestamp_us(dsp_100_pc_96k_us * 2);
|
||||
CPPUNIT_ASSERT(dsp_calc_96k.elapsed_time_us() == dsp_100_pc_96k_us);
|
||||
CPPUNIT_ASSERT(dsp_calc_96k.get_dsp_load() <= 1.0f);
|
||||
|
||||
// test the rate of rolloff of the LPF from 100% with load at constant 50%
|
||||
// over the equivalent of 1 second for 48k and 96k and test for ~equality
|
||||
for (int i = 0; i < 1e6 / dsp_100_pc_96k_us; ++i) {
|
||||
dsp_calc_96k.set_start_timestamp_us(0);
|
||||
dsp_calc_96k.set_stop_timestamp_us(dsp_100_pc_96k_us / 2);
|
||||
if (i % 2 == 0) {
|
||||
dsp_calc.set_start_timestamp_us(0);
|
||||
dsp_calc.set_stop_timestamp_us(dsp_100_pc_48k_us / 2);
|
||||
|
||||
std::cout << "DSP 50% load value 48k = " << dsp_calc.get_dsp_load()
|
||||
<< std::endl;
|
||||
std::cout << "DSP 50% load value 96k = " << dsp_calc_96k.get_dsp_load()
|
||||
<< std::endl;
|
||||
CPPUNIT_ASSERT_DOUBLES_EQUAL(dsp_calc.get_dsp_load(),
|
||||
dsp_calc_96k.get_dsp_load(), 0.001);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
12
libs/ardour/test/dsp_load_calculator_test.h
Normal file
12
libs/ardour/test/dsp_load_calculator_test.h
Normal file
@ -0,0 +1,12 @@
|
||||
#include <cppunit/TestFixture.h>
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
|
||||
class DSPLoadCalculatorTest : public CppUnit::TestFixture
|
||||
{
|
||||
CPPUNIT_TEST_SUITE (DSPLoadCalculatorTest);
|
||||
CPPUNIT_TEST (basicTest);
|
||||
CPPUNIT_TEST_SUITE_END ();
|
||||
|
||||
public:
|
||||
void basicTest ();
|
||||
};
|
@ -491,11 +491,13 @@ def build(bld):
|
||||
create_ardour_test_program(bld, obj.includes, 'mtdm_test', 'test_mtdm', ['test/mtdm_test.cc'])
|
||||
create_ardour_test_program(bld, obj.includes, 'sha1_test', 'test_sha1', ['test/sha1_test.cc'])
|
||||
create_ardour_test_program(bld, obj.includes, 'session_test', 'test_session', ['test/session_test.cc'])
|
||||
create_ardour_test_program(bld, obj.includes, 'dsp_load_calculator_test', 'test_dsp_load_calculator', ['test/dsp_load_calculator_test.cc'])
|
||||
|
||||
test_sources = '''
|
||||
test/audio_engine_test.cc
|
||||
test/automation_list_property_test.cc
|
||||
test/bbt_test.cc
|
||||
test/dsp_load_calculator_test.cc
|
||||
test/tempo_test.cc
|
||||
test/interpolation_test.cc
|
||||
test/midi_clock_slave_test.cc
|
||||
|
Loading…
Reference in New Issue
Block a user