#include #include "modulation/PSKModulator.h" // Fixture for PSK Modulator tests class PSKModulatorTest : public ::testing::Test { protected: double sample_rate = 48000; size_t num_taps = 48; bool is_frequency_hopping = false; PSKModulator modulator{sample_rate, is_frequency_hopping, num_taps}; std::vector symbols = {0, 3, 5, 7}; }; TEST_F(PSKModulatorTest, ModulationOutputLength) { auto signal = modulator.modulate(symbols); size_t expected_length = symbols.size() * (sample_rate / SYMBOL_RATE); ASSERT_EQ(signal.size(), expected_length); for (auto& sample : signal) { EXPECT_GE(sample, -32768); EXPECT_LE(sample, 32767); } } TEST_F(PSKModulatorTest, DemodulationOutput) { auto passband_signal = modulator.modulate(symbols); auto decoded_symbols = modulator.demodulate(passband_signal); ASSERT_EQ(symbols.size(), decoded_symbols.size()); for (size_t i = 0; i < symbols.size(); i++) { EXPECT_EQ(symbols[i], decoded_symbols[i]); } } TEST_F(PSKModulatorTest, InvalidSymbolInput) { std::vector invalid_symbols = {0, 8, 9}; EXPECT_THROW(modulator.modulate(invalid_symbols), std::out_of_range); }