138 lines
3.5 KiB
C++
138 lines
3.5 KiB
C++
// ================================================================================================
|
|
// Audio Backend - 测试工具
|
|
// ================================================================================================
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <memory>
|
|
#include <random>
|
|
#include <functional>
|
|
#include <chrono>
|
|
#include <filesystem>
|
|
#include <fstream>
|
|
|
|
namespace audio_backend {
|
|
namespace test {
|
|
|
|
/**
|
|
* @brief 测试工具类
|
|
* 提供一系列辅助函数用于简化测试的编写
|
|
*/
|
|
class TestUtils {
|
|
public:
|
|
/**
|
|
* @brief 生成随机浮点数
|
|
* @param min 最小值
|
|
* @param max 最大值
|
|
* @return 生成的随机浮点数
|
|
*/
|
|
static float generate_random_float(float min = -1.0f, float max = 1.0f);
|
|
|
|
/**
|
|
* @brief 生成随机整数
|
|
* @param min 最小值
|
|
* @param max 最大值
|
|
* @return 生成的随机整数
|
|
*/
|
|
static int generate_random_int(int min = 0, int max = 100);
|
|
|
|
/**
|
|
* @brief 生成随机音频数据
|
|
* @param buffer 要填充的缓冲区
|
|
* @param size 缓冲区大小
|
|
* @param min 最小值
|
|
* @param max 最大值
|
|
*/
|
|
static void generate_random_audio_data(float* buffer, size_t size, float min = -1.0f, float max = 1.0f);
|
|
|
|
/**
|
|
* @brief 生成随机字符串
|
|
* @param length 字符串长度
|
|
* @return 生成的随机字符串
|
|
*/
|
|
static std::string generate_random_string(size_t length);
|
|
|
|
/**
|
|
* @brief 创建临时文件
|
|
* @param content 文件内容
|
|
* @param extension 文件扩展名
|
|
* @return 临时文件路径
|
|
*/
|
|
static std::string create_temp_file(const std::string& content, const std::string& extension = ".tmp");
|
|
|
|
/**
|
|
* @brief 删除临时文件
|
|
* @param filepath 临时文件路径
|
|
* @return 是否成功删除
|
|
*/
|
|
static bool delete_temp_file(const std::string& filepath);
|
|
|
|
/**
|
|
* @brief 比较两个浮点数组
|
|
* @param buffer1 第一个缓冲区
|
|
* @param buffer2 第二个缓冲区
|
|
* @param size 缓冲区大小
|
|
* @param epsilon 误差范围
|
|
* @return 是否相等
|
|
*/
|
|
static bool compare_audio_buffers(const float* buffer1, const float* buffer2, size_t size, float epsilon = 1e-6f);
|
|
|
|
/**
|
|
* @brief 测量函数执行时间
|
|
* @param func 要测量的函数
|
|
* @return 执行时间(微秒)
|
|
*/
|
|
static int64_t measure_execution_time(const std::function<void()>& func);
|
|
|
|
/**
|
|
* @brief 获取测试数据目录路径
|
|
* @return 测试数据目录
|
|
*/
|
|
static std::string get_test_data_dir();
|
|
|
|
/**
|
|
* @brief 检查目录是否存在,不存在则创建
|
|
* @param dir 目录路径
|
|
* @return 是否成功
|
|
*/
|
|
static bool ensure_directory_exists(const std::string& dir);
|
|
};
|
|
|
|
/**
|
|
* @brief 性能测试辅助类
|
|
* 用于测量代码执行性能
|
|
*/
|
|
class PerformanceTimer {
|
|
public:
|
|
/**
|
|
* @brief 构造函数,开始计时
|
|
* @param label 计时器标签
|
|
*/
|
|
explicit PerformanceTimer(const std::string& label);
|
|
|
|
/**
|
|
* @brief 析构函数,结束计时并输出结果
|
|
*/
|
|
~PerformanceTimer();
|
|
|
|
/**
|
|
* @brief 手动结束计时
|
|
* @return 执行时间(微秒)
|
|
*/
|
|
int64_t stop();
|
|
|
|
/**
|
|
* @brief 重置计时器并重新开始
|
|
*/
|
|
void restart();
|
|
|
|
private:
|
|
std::string label_;
|
|
std::chrono::high_resolution_clock::time_point start_time_;
|
|
bool running_;
|
|
};
|
|
|
|
} // namespace test
|
|
} // namespace audio_backend
|