Source
stdlib/tests/math_test.cpp
1
// Copyright (c) 2026 BigBrain LLC. MIT-licensed (see LICENSE).2
// Original work; see ACKNOWLEDGMENTS.md for the open-source ideas we build upon.3
#include "math.hpp"5
#include <gtest/gtest.h>7
namespace m = cheatah::math;9
TEST(CheatahMath, Constants) {10
EXPECT_NEAR(m::pi, 3.14159265, 1e-7);11
EXPECT_NEAR(m::e, 2.71828182, 1e-7);12
EXPECT_NEAR(m::tau, 2.0 * m::pi, 1e-12);13
EXPECT_TRUE(m::isinf(m::inf));14
EXPECT_TRUE(m::isnan(m::nan));15
}17
TEST(CheatahMath, BuiltinLikeOps) {18
EXPECT_EQ(m::abs(-7), 7);19
EXPECT_EQ(m::min(3, 9, 1, 5), 1);20
EXPECT_EQ(m::max(3, 9, 1, 5), 9);21
EXPECT_DOUBLE_EQ(m::pow(2, 10), 1024.0);22
}24
TEST(CheatahMath, ScalarFunctions) {25
EXPECT_DOUBLE_EQ(m::sqrt(144.0), 12.0);26
EXPECT_DOUBLE_EQ(m::floor(2.7), 2.0);27
EXPECT_DOUBLE_EQ(m::ceil(2.1), 3.0);28
EXPECT_DOUBLE_EQ(m::round(2.5), 3.0);29
EXPECT_NEAR(m::log2(8.0), 3.0, 1e-12);30
EXPECT_NEAR(m::hypot(3.0, 4.0), 5.0, 1e-12);31
EXPECT_NEAR(m::degrees(m::pi), 180.0, 1e-9);32
}34
TEST(CheatahMath, TranscendentalAndRounding) {35
EXPECT_DOUBLE_EQ(m::cbrt(27.0), 3.0);36
EXPECT_DOUBLE_EQ(m::fabs(-3.5), 3.5);37
EXPECT_DOUBLE_EQ(m::trunc(2.9), 2.0);38
EXPECT_DOUBLE_EQ(m::trunc(-2.9), -2.0);39
EXPECT_NEAR(m::exp(0.0), 1.0, 1e-12);40
EXPECT_NEAR(m::exp(1.0), m::e, 1e-12);41
EXPECT_NEAR(m::log(m::e), 1.0, 1e-12);42
EXPECT_NEAR(m::log10(1000.0), 3.0, 1e-12);43
EXPECT_NEAR(m::fmod(7.0, 3.0), 1.0, 1e-12);44
EXPECT_DOUBLE_EQ(m::copysign(3.0, -1.0), -3.0);45
EXPECT_NEAR(m::radians(180.0), m::pi, 1e-12);46
}48
TEST(CheatahMath, Trigonometry) {49
EXPECT_NEAR(m::sin(0.0), 0.0, 1e-12);50
EXPECT_NEAR(m::sin(m::pi / 2), 1.0, 1e-12);51
EXPECT_NEAR(m::cos(0.0), 1.0, 1e-12);52
EXPECT_NEAR(m::tan(0.0), 0.0, 1e-12);53
EXPECT_NEAR(m::asin(1.0), m::pi / 2, 1e-12);54
EXPECT_NEAR(m::acos(1.0), 0.0, 1e-12);55
EXPECT_NEAR(m::atan(1.0), m::pi / 4, 1e-12);56
EXPECT_NEAR(m::atan2(1.0, 1.0), m::pi / 4, 1e-12);57
}59
TEST(CheatahMath, IsFiniteIsNanIsInf) {60
EXPECT_TRUE(m::isfinite(1.0));61
EXPECT_FALSE(m::isfinite(m::inf));62
EXPECT_FALSE(m::isfinite(m::nan));63
EXPECT_TRUE(m::isinf(m::inf));64
EXPECT_FALSE(m::isinf(1.0));65
EXPECT_TRUE(m::isnan(m::nan));66
EXPECT_FALSE(m::isnan(1.0));67
}69
TEST(CheatahMath, Integer) {70
EXPECT_EQ(m::gcd(54, 24), 6);71
EXPECT_EQ(m::factorial(5), 120);72
}