107SCENARIO(
"Performance: CarveDSPUnit, 100 buffers of 1024 samples each") {
108 GIVEN(
"A CarveDSPUnit and a buffer of samples") {
110 const int NUM_BUFFERS {100};
111 std::vector<double> buffer(1024);
115 Limits mLimits{0.11, 0.07, 0.01};
118 std::vector<double> executionTimes;
120 WHEN(
"The samples are processed") {
124 for (
int nbuf {0}; nbuf < NUM_BUFFERS; nbuf++) {
128 std::generate(buffer.begin(), buffer.end(), [&iii]{ return std::sin(iii++); });
132 const clock_t startTime {clock()};
133 for (
size_t jjj {0}; jjj < buffer.size(); jjj++) {
134 buffer[jjj] = mCarve.
process(buffer[jjj]);
136 const clock_t endTime {clock()};
139 const double CLOCKS_PER_MICROSEC {
static_cast<double>(CLOCKS_PER_SEC) / 1000};
140 const double executionTime {
static_cast<double>(endTime - startTime) / CLOCKS_PER_MICROSEC};
141 executionTimes.push_back(executionTime);
142 CHECK(executionTime < mLimits.INDIVIDUAL);
145 THEN(
"The average and variance are within limits") {
146 Stats mStats = calcAverageAndDeviation(executionTimes);
147 CHECK(mStats.average < mLimits.AVERAGE);
148 CHECK(mStats.deviation < mLimits.DEVIATION);
150 appendToResultsFile(mStats, Catch::getResultCapture().getCurrentTestName());
156SCENARIO(
"Performance: SongbirdFilterModule (blend mode), 100 buffers of 1024 samples each") {
157 GIVEN(
"A SongbirdFilterModule and a buffer of samples") {
159 const int NUM_BUFFERS {100};
160 std::vector<double> leftBuffer(1024);
161 std::vector<double> rightBuffer(1024);
166 Limits mLimits{1.8, 1.5, 0.12};
169 std::vector<double> executionTimes;
171 WHEN(
"The samples are processed") {
173 for (
int nbuf {0}; nbuf < NUM_BUFFERS; nbuf++) {
177 std::generate(leftBuffer.begin(), leftBuffer.end(), [&iii]{ return std::sin(iii++); });
178 rightBuffer = leftBuffer;
182 const clock_t startTime {clock()};
183 mSongbird.
Process2in2out(&leftBuffer[0], &rightBuffer[0], leftBuffer.size());
184 const clock_t endTime {clock()};
187 const double CLOCKS_PER_MICROSEC {
static_cast<double>(CLOCKS_PER_SEC) / 1000};
188 const double executionTime {
static_cast<double>(endTime - startTime) / CLOCKS_PER_MICROSEC};
189 executionTimes.push_back(executionTime);
190 CHECK(executionTime < mLimits.INDIVIDUAL);
193 THEN(
"The average and variance are within limits") {
194 Stats mStats = calcAverageAndDeviation(executionTimes);
195 CHECK(mStats.average < mLimits.AVERAGE);
196 CHECK(mStats.deviation < mLimits.DEVIATION);
198 appendToResultsFile(mStats, Catch::getResultCapture().getCurrentTestName());
204SCENARIO(
"Performance: SongbirdFilterModule (freq mode), 100 buffers of 1024 samples each") {
205 GIVEN(
"A SongbirdFilterModule and a buffer of samples") {
207 const int NUM_BUFFERS {100};
208 std::vector<double> leftBuffer(1024);
209 std::vector<double> rightBuffer(1024);
214 Limits mLimits{1.8, 1.5, 0.12};
217 std::vector<double> executionTimes;
219 WHEN(
"The samples are processed") {
221 for (
int nbuf {0}; nbuf < NUM_BUFFERS; nbuf++) {
225 std::generate(leftBuffer.begin(), leftBuffer.end(), [&iii]{ return std::sin(iii++); });
226 rightBuffer = leftBuffer;
230 const clock_t startTime {clock()};
231 mSongbird.
Process2in2out(&leftBuffer[0], &rightBuffer[0], leftBuffer.size());
232 const clock_t endTime {clock()};
235 const double CLOCKS_PER_MICROSEC {
static_cast<double>(CLOCKS_PER_SEC) / 1000};
236 const double executionTime {
static_cast<double>(endTime - startTime) / CLOCKS_PER_MICROSEC};
237 executionTimes.push_back(executionTime);
238 CHECK(executionTime < mLimits.INDIVIDUAL);
241 THEN(
"The average and variance are within limits") {
242 Stats mStats = calcAverageAndDeviation(executionTimes);
243 CHECK(mStats.average < mLimits.AVERAGE);
244 CHECK(mStats.deviation < mLimits.DEVIATION);
246 appendToResultsFile(mStats, Catch::getResultCapture().getCurrentTestName());