eis/TestProject/RNG/test/test_sine.cc

46 lines
1.4 KiB
C++

#include "test_harness.h"
#include <TestProject/RNG/model/SineModel.h>
#include <cmath>
using json = nlohmann::json;
TEST(sine_at_zero) {
SineModel m(json::object(), 0.0f);
CHECK_FLOAT_EQ(m.evaluate(0), 0.0f, 0.001f);
}
TEST(sine_basic) {
// A=1, omega=π/2, phi=0 → sin(π/2 * t)
float omega = M_PI / 2.0f;
SineModel m(json{{"A", 1.0f}, {"omega", omega}}, 0.0f);
CHECK_FLOAT_EQ(m.evaluate(0), 0.0f, 0.001f); // sin(0)=0
CHECK_FLOAT_EQ(m.evaluate(1), 1.0f, 0.001f); // sin(π/2)=1
CHECK_FLOAT_EQ(m.evaluate(2), 0.0f, 0.01f); // sin(π)=0
CHECK_FLOAT_EQ(m.evaluate(3), -1.0f, 0.001f); // sin(3π/2)=-1
}
TEST(sine_with_offset) {
float omega = M_PI / 2.0f;
SineModel m(json{{"A", 1.0f}, {"omega", omega}}, 100.0f);
CHECK_FLOAT_EQ(m.evaluate(1), 101.0f, 0.001f); // sin(π/2)=1 + 100
CHECK_FLOAT_EQ(m.evaluate(3), 99.0f, 0.001f); // sin(3π/2)=-1 + 100
}
TEST(sine_zero_amplitude) {
SineModel m(json{{"A", 0.0f}, {"omega", 1.0f}}, 5.0f);
CHECK_FLOAT_EQ(m.evaluate(0), 5.0f, 0.001f);
CHECK_FLOAT_EQ(m.evaluate(100), 5.0f, 0.001f);
}
TEST(sine_with_phase) {
// phi=π/2 → sin(ωt + π/2) = cos(ωt). At t=0: cos(0)=1
float phi = M_PI / 2.0f;
SineModel m(json{{"A", 1.0f}, {"omega", 0.0f}, {"phi", phi}}, 0.0f);
CHECK_FLOAT_EQ(m.evaluate(0), 1.0f, 0.001f);
}
TEST(sine_negative_amplitude) {
float omega = M_PI / 2.0f;
SineModel m(json{{"A", -2.0f}, {"omega", omega}}, 0.0f);
CHECK_FLOAT_EQ(m.evaluate(1), -2.0f, 0.001f);
}