module Tests; import Core.Math; import Core.Test; constexpr float eps = 0.0001f; static void testInterpolate() { Core::testFloat(7.5f, Core::interpolate(5.0f, 10.0f, 0.5f), eps); Core::testFloat(-2.0, Core::interpolate(-10.0f, 10.0f, 0.4f), eps); Core::testFloat(10.0f, Core::interpolate(-3.0f, 10.0f, 1.0f), eps); Core::testFloat(7.0f, Core::interpolate(7.0f, 10.0f, 0.0f), eps); Core::testFloat(6.0f, Core::interpolate(0.0f, 10.0f, 0.6f), eps); } static void testIsPowerOf2() { Core::testTrue(Core::isPowerOf2(1)); Core::testTrue(Core::isPowerOf2(2)); Core::testFalse(Core::isPowerOf2(3)); Core::testTrue(Core::isPowerOf2(4)); Core::testFalse(Core::isPowerOf2(5)); Core::testFalse(Core::isPowerOf2(6)); Core::testFalse(Core::isPowerOf2(7)); Core::testTrue(Core::isPowerOf2(8)); Core::testFalse(Core::isPowerOf2(9)); Core::testFalse(Core::isPowerOf2(10)); for(int i = 16; i < 30'000; i *= 2) { Core::testTrue(Core::isPowerOf2(i)); Core::testFalse(Core::isPowerOf2(i + 1)); Core::testFalse(Core::isPowerOf2(i + 2)); Core::testFalse(Core::isPowerOf2(i + 3)); } } static void testRoundUpLog2() { Core::test(0, Core::roundUpLog2(-5)); Core::test(0, Core::roundUpLog2(0)); Core::test(1, Core::roundUpLog2(1)); Core::test(1, Core::roundUpLog2(2)); Core::test(2, Core::roundUpLog2(3)); Core::test(2, Core::roundUpLog2(4)); Core::test(3, Core::roundUpLog2(5)); Core::test(4, Core::roundUpLog2(10)); Core::test(5, Core::roundUpLog2(20)); Core::test(16, Core::roundUpLog2(35'345)); Core::test(31, Core::roundUpLog2(0x7FFF'FFFF)); } static void testMin() { Core::test(-5, Core::min(-5)); Core::test(-10, Core::min(-5, 4, 3, 2, -10)); Core::test(4, Core::min(5, 20, 4, 30)); } static void testMax() { Core::test(-5, Core::max(-5)); Core::test(4, Core::max(-5, 4, 3, 2, -10)); Core::test(30, Core::max(5, 20, 4, 30)); } static void testClamp() { Core::test(5, Core::clamp(1, 5, 10)); Core::test(7, Core::clamp(7, 5, 10)); Core::test(10, Core::clamp(20, 5, 10)); Core::test(5, Core::clamp(1, 10, 5)); Core::test(7, Core::clamp(7, 10, 5)); Core::test(10, Core::clamp(20, 10, 5)); } static void testRadianToDegree() { Core::testFloat(45.0f, Core::radianToDegree(Core::PI * 0.25f), eps); Core::testFloat(90.0f, Core::radianToDegree(Core::PI * 0.5f), eps); Core::testFloat(180.0f, Core::radianToDegree(Core::PI), eps); Core::testFloat(360.0f, Core::radianToDegree(Core::PI * 2.0f), eps); } static void testDegreeToRadian() { Core::testFloat(Core::PI * 0.25f, Core::degreeToRadian(45.0f), eps); Core::testFloat(Core::PI * 0.5f, Core::degreeToRadian(90.0f), eps); Core::testFloat(Core::PI, Core::degreeToRadian(180.0f), eps); Core::testFloat(Core::PI * 2.0f, Core::degreeToRadian(360.0f), eps); } void testMath() { testInterpolate(); testIsPowerOf2(); testRoundUpLog2(); testMin(); testMax(); testClamp(); testRadianToDegree(); testDegreeToRadian(); }