Files
Alicho/tests/unit/engine/audio_config_test.cpp
2025-10-28 10:27:49 +08:00

162 lines
4.7 KiB
C++

// ================================================================================================
// Audio Backend - 音频配置测试
// ================================================================================================
#include <gtest/gtest.h>
#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();
}