43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
#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);
|
|
}
|