Mercurial > hg > vamp-plugin-tester
changeset 34:a2d9aed55a2a
Check that a reset call does not change parameter values
author | Chris Cannam |
---|---|
date | Mon, 16 Dec 2013 13:28:28 +0000 |
parents | 005ac7a3d827 |
children | b700f37dc118 |
files | TestDefaults.cpp TestDefaults.h |
diffstat | 2 files changed, 76 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/TestDefaults.cpp Wed Nov 06 13:01:03 2013 +0000 +++ b/TestDefaults.cpp Mon Dec 16 13:28:28 2013 +0000 @@ -58,6 +58,9 @@ Tester::TestRegistrar<TestDefaultParameters> TestDefaultParameters::m_registrar("E2 Inconsistent default parameters"); +Tester::TestRegistrar<TestParametersOnReset> +TestParametersOnReset::m_registrar("E3 Parameter retention through reset"); + static const size_t _step = 1000; Test::Results @@ -168,3 +171,66 @@ return r; } + +Test::Results +TestParametersOnReset::test(string key, Options options) +{ + Plugin::FeatureSet f[2]; + int rate = 44100; + Results r; + float **data = 0; + size_t channels = 0; + size_t count = 100; + + for (int run = 0; run < 2; ++run) { + auto_ptr<Plugin> p(load(key, rate)); + if (p->getParameterDescriptors().empty()) return r; + + // Set all parameters to non-default values + Plugin::ParameterList pl = p->getParameterDescriptors(); + for (int i = 0; i < (int)pl.size(); ++i) { + if (pl[i].defaultValue == pl[i].minValue) { + p->setParameter(pl[i].identifier, pl[i].maxValue); + } else { + p->setParameter(pl[i].identifier, pl[i].minValue); + } + } + + if (!initAdapted(p.get(), channels, _step, _step, r)) return r; + + // First run: construct, set params, init, process + // Second run: construct, set params, init, reset, process + // We expect these to produce the same results + if (run == 1) p->reset(); + + if (!data) data = createTestAudio(channels, _step, count); + for (size_t i = 0; i < count; ++i) { +#ifdef __GNUC__ + float *ptr[channels]; +#else + float **ptr = (float **)alloca(channels * sizeof(float)); +#endif + size_t idx = i * _step; + for (size_t c = 0; c < channels; ++c) ptr[c] = data[c] + idx; + RealTime timestamp = RealTime::frame2RealTime(idx, rate); + Plugin::FeatureSet fs = p->process(ptr, timestamp); + appendFeatures(f[run], fs); + } + Plugin::FeatureSet fs = p->getRemainingFeatures(); + appendFeatures(f[run], fs); + } + if (data) destroyTestAudio(data, channels); + + if (!(f[0] == f[1])) { + string message = "Call to reset after setting parameters, but before processing, changes the results (parameter values not retained through reset?)"; + Result res; + if (options & NonDeterministic) res = note(message); + else res = error(message); + if (options & Verbose) dump(res, f[0], f[1]); + r.push_back(res); + } else { + r.push_back(success()); + } + + return r; +}
--- a/TestDefaults.h Wed Nov 06 13:01:03 2013 +0000 +++ b/TestDefaults.h Mon Dec 16 13:28:28 2013 +0000 @@ -63,4 +63,14 @@ static Tester::TestRegistrar<TestDefaultParameters> m_registrar; }; +class TestParametersOnReset : public Test +{ +public: + TestParametersOnReset() : Test() { } + Results test(std::string key, Options options); + +protected: + static Tester::TestRegistrar<TestParametersOnReset> m_registrar; +}; + #endif