# HG changeset patch # User Chris Cannam # Date 1720024681 -3600 # Wed Jul 03 17:38:01 2024 +0100 # Branch rblive # Node ID 381b6368a5532fb45cc299a5874dde73a9c9b385 # Parent feb19ac31aa09a2a9c132ead1ce1a773efe67aac Adjust test check diff --git a/src/test/TestLiveShifter.cpp b/src/test/TestLiveShifter.cpp --- a/src/test/TestLiveShifter.cpp +++ b/src/test/TestLiveShifter.cpp @@ -193,49 +193,42 @@ expected[i] = 0.5f * sinf(float(i) * freq * shift * M_PI * 2.f / float(rate)); } - in[1000] = 1.f; - for (int i = 0; i < n; i += blocksize) { float *inp = in.data() + i; float *outp = out.data() + i; shifter.shift(&inp, &outp); } - int delay = shifter.getStartDelay(); - - // We now have n samples of a simple sinusoid with stretch factor - // 1.0; obviously we expect the output to be essentially the same - // thing. It will have lower precision for a while at the start, - // so we check that with a threshold of 0.1; after that we expect - // better precision. + int reportedDelay = shifter.getStartDelay(); int slackpart = 2048; - float slackeps = 1.0e-1f; + int delay = reportedDelay + slackpart; + + // Align to the next zero-crossing in output, as phase may differ + + for (int i = delay; i < endpoint; ++i) { + if (out[i] < 0.f && out[i+1] >= 0.f) { + delay = i+1; + break; + } + } + + cerr << "Adjusted delay from reported value of " << reportedDelay + << " by adding slack of " << slackpart + << " and moving to next positive zero crossing at " << delay << endl; + float eps = 1.0e-3f; #ifdef USE_BQRESAMPLER eps = 1.0e-2f; #endif - for (int i = 0; i < slackpart; ++i) { - float fin = expected[i]; - float fout = out[delay + i]; - float err = fabsf(fin - fout); - if (err > slackeps) { - cerr << "Error at index " << i << " exceeds slack eps " - << slackeps << ": output " << fout << " - expected " - << fin << " = " << fout - fin << endl; - BOOST_TEST(err < eps); - break; - } - } - - for (int i = slackpart; i < n - delay; ++i) { + for (int i = 0; i + delay < endpoint; ++i) { float fin = expected[i]; float fout = out[delay + i]; float err = fabsf(fin - fout); if (err > eps) { - cerr << "Error at index " << i << " exceeds tight eps " + cerr << "Error at index " << i << " exceeds eps " << eps << ": output " << fout << " - expected " << fin << " = " << fout - fin << endl; BOOST_TEST(err < eps);