#include "vad_unittest.h"
#include "../include/fvad.h"
bool ValidRatesAndFrameLengths(int rate, size_t frame_length) {
if (rate == 8000) {
if (frame_length == 80 || frame_length == 160 || frame_length == 240) {
return true;
}
return false;
} else if (rate == 16000) {
if (frame_length == 160 || frame_length == 320 || frame_length == 480) {
return true;
}
return false;
} else if (rate == 32000) {
if (frame_length == 320 || frame_length == 640 || frame_length == 960) {
return true;
}
return false;
} else if (rate == 48000) {
if (frame_length == 480 || frame_length == 960 || frame_length == 1440) {
return true;
}
return false;
}
return false;
}
#ifdef TEST_VAD_API
void test_main() {
Fvad* handle = fvad_new();
int16_t zeros[kMaxFrameLength] = { 0 };
int16_t speech[kMaxFrameLength];
for (size_t i = 0; i < kMaxFrameLength; i++) {
speech[i] = i * i;
}
EXPECT_TRUE(handle);
EXPECT_EQ(-1, fvad_set_mode(handle, -1));
EXPECT_EQ(-1, fvad_set_mode(handle, 4));
EXPECT_EQ(-1, fvad_set_sample_rate(handle, 9999));
EXPECT_EQ(0, fvad_set_sample_rate(handle, kRates[0]));
EXPECT_EQ(0, fvad_process(handle, zeros, kFrameLengths[0]));
for (size_t k = 0; k < kModesSize; k++) {
EXPECT_EQ(0, fvad_set_mode(handle, kModes[k]));
for (size_t i = 0; i < kRatesSize; i++) {
for (size_t j = 0; j < kFrameLengthsSize; j++) {
if (ValidRatesAndFrameLengths(kRates[i], kFrameLengths[j])) {
EXPECT_EQ(0, fvad_set_sample_rate(handle, kRates[i]));
EXPECT_EQ(1, fvad_process(handle, speech, kFrameLengths[j]));
} else if (ValidRatesAndFrameLengths(kRates[i], kRates[i] / 100)) {
EXPECT_EQ(0, fvad_set_sample_rate(handle, kRates[i]));
EXPECT_EQ(-1, fvad_process(handle, speech, kFrameLengths[j]));
} else {
EXPECT_EQ(-1, fvad_set_sample_rate(handle, kRates[i]));
}
}
}
}
fvad_free(handle);
}
#endif