29 lines
869 B
C++
29 lines
869 B
C++
|
|
#include "test_harness.h"
|
||
|
|
#include <TestProject/RNG/model/DriftModel.h>
|
||
|
|
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
|
||
|
|
}
|