| 39 | } // namespace |
| 40 | |
| 41 | TEST(LuaTimePrecision, RebasedDerivativeIsExactAtNanosecondScale) { |
| 42 | auto engine = makeLuauEngine(); |
| 43 | auto classes = engine->inspectModule(kDerivative, "test"); |
| 44 | ASSERT_TRUE(classes.has_value()); |
| 45 | LuaSisoTransform xf(engine, classes->front(), "{}"); |
| 46 | |
| 47 | // Two samples 100 ns apart, sitting at a ~2026 absolute epoch. |
| 48 | (void)xf.calculateNextPoint(Sample::scalar(kEpochNs, PJ::VarValue{0.0})); |
| 49 | auto out = xf.calculateNextPoint(Sample::scalar(kEpochNs + 100, PJ::VarValue{1.0})); |
| 50 | ASSERT_TRUE(out.has_value()); |
| 51 | // dt = 100 ns = 1e-7 s, so d = 1 / 1e-7 = 1e7, exactly (rebasing keeps it). |
| 52 | EXPECT_NEAR(PJ::proc::detail::toDouble(out->value()), 1e7, 1.0); |
| 53 | } |
| 54 | |
| 55 | TEST(LuaTimePrecision, NaiveAbsoluteEpochInDoubleCollapses100nsDt) { |
| 56 | // The bug the rebasing avoids: subtracting two absolute-epoch doubles. |
nothing calls this directly
no test coverage detected