| 9 | #include "fl/math/math.h" |
| 10 | |
| 11 | FL_TEST_FILE(FL_FILEPATH) { |
| 12 | |
| 13 | using namespace fl; |
| 14 | using fl::audio::test::makeSample; |
| 15 | |
| 16 | namespace { |
| 17 | |
| 18 | } // anonymous namespace |
| 19 | |
| 20 | FL_TEST_CASE("audio::Processor - update with valid sample doesn't crash") { |
| 21 | audio::Processor processor; |
| 22 | audio::Sample sample = makeSample(440.0f, 1000); |
| 23 | processor.update(sample); |
| 24 | // After update, the processor should have a valid context |
| 25 | FL_CHECK(processor.getContext() != nullptr); |
| 26 | } |
| 27 | |
| 28 | FL_TEST_CASE("audio::Processor - setSampleRate / getSampleRate round-trip") { |
| 29 | audio::Processor processor; |
| 30 | FL_CHECK_EQ(processor.getSampleRate(), 44100); |
| 31 | processor.setSampleRate(22050); |
| 32 | FL_CHECK_EQ(processor.getSampleRate(), 22050); |
| 33 | } |
| 34 | |
| 35 | FL_TEST_CASE("audio::Processor - onEnergy callback fires") { |
| 36 | audio::Processor processor; |
| 37 | float lastRMS = -1.0f; |
| 38 | processor.onEnergy([&lastRMS](float rms) { lastRMS = rms; }); |
| 39 | |
| 40 | audio::Sample sample = makeSample(440.0f, 1000, 10000.0f); |
| 41 | processor.update(sample); |
| 42 | |
| 43 | FL_CHECK_GT(lastRMS, 0.0f); |
| 44 | } |
| 45 | |
| 46 | FL_TEST_CASE("audio::Processor - onBass/onMid/onTreble callbacks fire") { |
| 47 | audio::Processor processor; |
| 48 | float lastBass = -1.0f; |
| 49 | float lastMid = -1.0f; |
| 50 | float lastTreble = -1.0f; |
| 51 | processor.onBass([&lastBass](float level) { lastBass = level; }); |
| 52 | processor.onMid([&lastMid](float level) { lastMid = level; }); |
| 53 | processor.onTreble([&lastTreble](float level) { lastTreble = level; }); |
| 54 | |
| 55 | // Feed a multi-frequency signal |
| 56 | fl::vector<fl::i16> data; |
| 57 | data.reserve(512); |
| 58 | for (int i = 0; i < 512; ++i) { |
| 59 | float t = static_cast<float>(i) / 44100.0f; |
| 60 | float bass = 5000.0f * fl::sinf(2.0f * FL_M_PI * 200.0f * t); |
| 61 | float mid = 5000.0f * fl::sinf(2.0f * FL_M_PI * 1000.0f * t); |
| 62 | float treble = 5000.0f * fl::sinf(2.0f * FL_M_PI * 4000.0f * t); |
| 63 | fl::i32 combined = static_cast<fl::i32>(bass + mid + treble); |
| 64 | if (combined > 32767) combined = 32767; |
| 65 | if (combined < -32768) combined = -32768; |
| 66 | data.push_back(static_cast<fl::i16>(combined)); |
| 67 | } |
| 68 | audio::Sample sample(data, 1000); |
nothing calls this directly
no test coverage detected