162 lines
4.7 KiB
C++
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();
|
|
} |