// ================================================================================================ // Audio Backend - 音频配置测试 // ================================================================================================ #include #include "engine/audio_buffer.h" #include "tests/common/test_fixtures.h" using namespace audio_backend; using namespace audio_backend::engine; // 基本测试固定装置 class AudioConfigTest : public test::BaseTest {}; // 测试音频配置的默认值 TEST_F(AudioConfigTest, DefaultValues) { AudioConfig config; EXPECT_EQ(config.sample_rate, 48000); EXPECT_EQ(config.channels, 2); EXPECT_EQ(config.format, AudioFormat::FLOAT32); EXPECT_EQ(config.frames_per_buffer, 512); } // 测试音频配置的有效性验证 TEST_F(AudioConfigTest, Validation) { AudioConfig config; EXPECT_TRUE(config.is_valid()); // 无效采样率 { AudioConfig invalid_config = config; invalid_config.sample_rate = 0; EXPECT_FALSE(invalid_config.is_valid()); invalid_config.sample_rate = 200000; // 超过最大值 EXPECT_FALSE(invalid_config.is_valid()); } // 无效声道数 { AudioConfig invalid_config = config; invalid_config.channels = 0; EXPECT_FALSE(invalid_config.is_valid()); invalid_config.channels = 33; // 超过最大值 EXPECT_FALSE(invalid_config.is_valid()); } // 无效格式 { AudioConfig invalid_config = config; invalid_config.format = AudioFormat::UNKNOWN; EXPECT_FALSE(invalid_config.is_valid()); } // 无效帧数 { AudioConfig invalid_config = config; invalid_config.frames_per_buffer = 0; EXPECT_FALSE(invalid_config.is_valid()); invalid_config.frames_per_buffer = 9000; // 超过最大值 EXPECT_FALSE(invalid_config.is_valid()); } // 边界值测试 { AudioConfig boundary_config = config; // 最小有效值 boundary_config.sample_rate = 1; boundary_config.channels = 1; boundary_config.frames_per_buffer = 1; EXPECT_TRUE(boundary_config.is_valid()); // 最大有效值 boundary_config.sample_rate = 192000; boundary_config.channels = 32; boundary_config.frames_per_buffer = 8192; EXPECT_TRUE(boundary_config.is_valid()); } } // 测试缓冲区大小计算 TEST_F(AudioConfigTest, BufferSizeCalculation) { AudioConfig config; // 默认配置: 512帧 * 2声道 * 4字节(FLOAT32) = 4096字节 EXPECT_EQ(config.get_buffer_size_bytes(), 4096); EXPECT_EQ(config.get_buffer_size_samples(), 1024); // 修改配置 config.frames_per_buffer = 256; EXPECT_EQ(config.get_buffer_size_bytes(), 2048); EXPECT_EQ(config.get_buffer_size_samples(), 512); config.channels = 4; EXPECT_EQ(config.get_buffer_size_bytes(), 4096); EXPECT_EQ(config.get_buffer_size_samples(), 1024); config.format = AudioFormat::INT16; EXPECT_EQ(config.get_buffer_size_bytes(), 2048); EXPECT_EQ(config.get_buffer_size_samples(), 1024); config.format = AudioFormat::FLOAT64; EXPECT_EQ(config.get_buffer_size_bytes(), 8192); EXPECT_EQ(config.get_buffer_size_samples(), 1024); } // 测试延迟计算 TEST_F(AudioConfigTest, LatencyCalculation) { AudioConfig config; // 默认配置: 512帧 / 48000Hz * 1000 = 10.667毫秒 EXPECT_NEAR(config.get_latency_ms(), 10.667, 0.001); // 修改配置 config.frames_per_buffer = 256; EXPECT_NEAR(config.get_latency_ms(), 5.333, 0.001); config.sample_rate = 96000; EXPECT_NEAR(config.get_latency_ms(), 2.667, 0.001); config.frames_per_buffer = 1024; EXPECT_NEAR(config.get_latency_ms(), 10.667, 0.001); } // 测试比较操作符 TEST_F(AudioConfigTest, ComparisonOperators) { AudioConfig config1; AudioConfig config2; // 相等配置 EXPECT_EQ(config1, config2); EXPECT_FALSE(config1 != config2); // 不同采样率 config2.sample_rate = 44100; EXPECT_NE(config1, config2); EXPECT_FALSE(config1 == config2); // 重置并测试不同声道数 config2 = config1; config2.channels = 1; EXPECT_NE(config1, config2); // 重置并测试不同格式 config2 = config1; config2.format = AudioFormat::INT16; EXPECT_NE(config1, config2); // 重置并测试不同帧数 config2 = config1; config2.frames_per_buffer = 1024; EXPECT_NE(config1, config2); } int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }