annotate tests/xttest_scalar.cpp @ 264:ecd6f2cf1346

Initial unit testing setup with an example test
author Jamie Bullock <jamie@jamiebullock.com>
date Mon, 10 Nov 2014 20:29:19 +0000
parents
children 41fe82c7ff80
rev   line source
jamie@264 1
jamie@264 2 #include "xttest_util.hpp"
jamie@264 3
jamie@264 4 #include "xtract/xtract_scalar.h"
jamie@264 5
jamie@264 6 #include "catch.hpp"
jamie@264 7
jamie@264 8
jamie@264 9 SCENARIO( "F0 is correctly detected for a clean sine wave", "[xtract_f0]" )
jamie@264 10 {
jamie@264 11 GIVEN( "a 1024 sample block with a sample rate of 44100" )
jamie@264 12 {
jamie@264 13 uint32_t blocksize = 1024;
jamie@264 14 double samplerate = 44100;
jamie@264 15 double result = 0.0;
jamie@264 16 double table[blocksize];
jamie@264 17
jamie@264 18 WHEN( "the frequency is 344.53125 Hz" ) // This will give a period of exactly 128 samples: 8 cycles in the block
jamie@264 19 {
jamie@264 20 double frequency = 344.53125;
jamie@264 21 double min = frequency * 0.995;
jamie@264 22 double max = frequency * 1.005;
jamie@264 23
jamie@264 24 WHEN( "the amplitude is 1.0" )
jamie@264 25 {
jamie@264 26 double amplitude = 1.0;
jamie@264 27
jamie@264 28 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@264 29 xtract_f0(table, blocksize, &samplerate, &result);
jamie@264 30 CAPTURE( result );
jamie@264 31
jamie@264 32 THEN( "the detected F0 is in the range 344.53125 ± 0.5%" )
jamie@264 33 {
jamie@264 34 REQUIRE(result < max);
jamie@264 35 REQUIRE(result > min);
jamie@264 36 }
jamie@264 37 }
jamie@264 38 WHEN( "the amplitude is 0.1" )
jamie@264 39 {
jamie@264 40 double amplitude = 0.1;
jamie@264 41
jamie@264 42 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@264 43 xtract_f0(table, blocksize, &samplerate, &result);
jamie@264 44 CAPTURE( result );
jamie@264 45
jamie@264 46 THEN( "the detected F0 is in the range 344.53125 ± 0.5%" )
jamie@264 47 {
jamie@264 48 REQUIRE(result < max);
jamie@264 49 REQUIRE(result > min);
jamie@264 50 }
jamie@264 51 }
jamie@264 52 }
jamie@264 53 }
jamie@264 54 }