Files
Alicho/tests/common/test_utils.h
2025-10-28 10:27:49 +08:00

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