46 lines
1.4 KiB
C++
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);
|
|
}
|