#include "test_harness.h" #include using json = nlohmann::json; TEST(drift_basic) { DriftModel m(json{{"drift_rate", 0.1f}}, 0.0f); CHECK_FLOAT_EQ(m.evaluate(0), 0.0f, 0.001f); CHECK_FLOAT_EQ(m.evaluate(10), 1.0f, 0.001f); } TEST(drift_default_rate_is_zero) { DriftModel m(json::object(), 42.0f); CHECK_FLOAT_EQ(m.evaluate(0), 42.0f, 0.001f); CHECK_FLOAT_EQ(m.evaluate(1000), 42.0f, 0.001f); } TEST(drift_negative_rate) { DriftModel m(json{{"drift_rate", -0.5f}}, 100.0f); CHECK_FLOAT_EQ(m.evaluate(10), 95.0f, 0.001f); } TEST(drift_with_period) { // period_ms=100 → 5 ticks per period DriftModel m(json{{"drift_rate", 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 }