#include #include "fgc/Geometry.h" using namespace fgc; TEST_CASE("AxisMap converts degrees and counts with an offset") { AxisMap m{983.33, 500000, -90.0, 90.0}; CHECK(m.toCounts(0.0) == 500000); CHECK(m.toCounts(90.0) == 588500); // lround(500000 + 90*983.33) CHECK(m.toDeg(500000) == doctest::Approx(0.0)); CHECK(m.toDeg(m.toCounts(45.0)) == doctest::Approx(45.0).epsilon(0.001)); } TEST_CASE("AxisMap clamps to the soft range on the way out") { AxisMap m{10.0, 0, -90.0, 90.0}; CHECK(m.toCounts(200.0) == 900); // clamped to +90 CHECK(m.toCounts(-200.0) == -900); // clamped to -90 CHECK(m.toCounts(45.0) == 450); } TEST_CASE("AxisMap supports a negative (flipped) direction") { AxisMap m{-10.0, 1000, -90.0, 90.0}; CHECK(m.toCounts(10.0) == 900); CHECK(m.toDeg(900) == doctest::Approx(10.0)); } TEST_CASE("AxisMap toDeg guards against a zero scale") { AxisMap m{0.0, 0, -90.0, 90.0}; CHECK(m.toDeg(12345) == doctest::Approx(0.0)); }