18#ifndef RESONANCE_AUDIO_GEOMETRICAL_ACOUSTICS_TEST_UTIL_H_
19#define RESONANCE_AUDIO_GEOMETRICAL_ACOUSTICS_TEST_UTIL_H_
23#include <unordered_set>
26#include "embree2/rtcore.h"
27#include "api/resonance_audio_api.h"
28#include "base/constants_and_types.h"
29#include "geometrical_acoustics/mesh.h"
30#include "geometrical_acoustics/path.h"
31#include "geometrical_acoustics/scene_manager.h"
32#include "platforms/common/room_effects_utils.h"
38static const std::array<float, kNumReverbOctaveBands> kUnitEnergies{
39 {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}};
50void ValidateDistribution(
const int num_samples,
const int num_bins,
51 std::function<
float()> cdf);
56void AddTestGround(RTCScene scene);
68void BuildTestBoxScene(
69 const Vertex& min_corner,
const Vertex& max_corner,
70 std::vector<Vertex>* box_vertices, std::vector<Triangle>* box_triangles,
71 std::vector<std::unordered_set<unsigned int>>* box_wall_triangles);
86std::vector<Path> TracePathsInTestcene(
87 size_t num_rays,
size_t max_depth,
float energy_threshold,
88 const float source_position[3],
const std::vector<Vertex>& scene_vertices,
89 const std::vector<Triangle>& scene_triangles,
90 const std::vector<std::unordered_set<unsigned int>>& scene_triangle_groups,
91 const std::vector<MaterialName>& materials, SceneManager* scene_manager);
98std::vector<Path> GenerateUniformlyDistributedRayPaths(
99 const float source_position[3],
size_t min_num_rays);
105void ExpectFloat3Close(
const float actual_vector[3],
106 const float expected_vector[3]);
113void ExpectFloat3Close(
const float actual_vector[3],
114 const float expected_vector[3],
float tolerance);
125void ValidateSparseFloatArray(
const std::vector<float>& actual_array,
126 const std::vector<size_t>& expected_indices,
127 const std::vector<float>& expected_values,
128 float relative_error_tolerance);