eis/TestProject/RNG/test/test_linear.cc

43 lines
1.3 KiB
C++
Raw Normal View History

#include "test_harness.h"
#include <TestProject/RNG/model/LinearModel.h>
using json = nlohmann::json;
TEST(linear_basic) {
LinearModel m(json{{"k", 2.0f}}, 0.0f);
CHECK_FLOAT_EQ(m.evaluate(0), 0.0f, 0.001f);
CHECK_FLOAT_EQ(m.evaluate(1), 2.0f, 0.001f);
CHECK_FLOAT_EQ(m.evaluate(5), 10.0f, 0.001f);
}
TEST(linear_default_k_is_zero) {
LinearModel m(json::object(), 50.0f);
CHECK_FLOAT_EQ(m.evaluate(0), 50.0f, 0.001f);
CHECK_FLOAT_EQ(m.evaluate(100), 50.0f, 0.001f);
}
TEST(linear_negative_k) {
LinearModel m(json{{"k", -1.0f}}, 10.0f);
CHECK_FLOAT_EQ(m.evaluate(0), 10.0f, 0.001f);
CHECK_FLOAT_EQ(m.evaluate(3), 7.0f, 0.001f);
}
TEST(linear_with_period) {
// period_ms=100 → 5 ticks per period
LinearModel m(json{{"k", 1.0f}, {"period_ms", 100}}, 0.0f);
CHECK_FLOAT_EQ(m.evaluate(0), 0.0f, 0.001f);
CHECK_FLOAT_EQ(m.evaluate(4), 4.0f, 0.001f);
CHECK_FLOAT_EQ(m.evaluate(5), 0.0f, 0.001f); // wraps
CHECK_FLOAT_EQ(m.evaluate(7), 2.0f, 0.001f); // 7%5=2
}
TEST(linear_no_period) {
LinearModel m(json{{"k", 0.5f}}, 100.0f);
CHECK_FLOAT_EQ(m.evaluate(10), 105.0f, 0.001f);
CHECK_FLOAT_EQ(m.evaluate(1000), 600.0f, 0.001f);
}
TEST(linear_large_values) {
LinearModel m(json{{"k", 0.001f}}, 0.0f);
CHECK_FLOAT_EQ(m.evaluate(100000), 100.0f, 0.01f);
}