# Basic arithmetic functions
assert sqrt(2.0) > 1.4
assert sqrt(2.0) < 1.5
assert sqrt(9.0) == 3.0
assert sqrt(0.0) == 0.0
# Exponential functions
assert exp(0.0) == 1.0
assert exp(1.0) > 2.7
assert exp(1.0) < 2.8
assert exp(2.0) > 7.3
assert exp(2.0) < 7.4
# Logarithmic functions
assert log(1.0) == 0.0
assert log(2.0) > 0.69
assert log(2.0) < 0.70
assert log(10.0) > 2.30
assert log(10.0) < 2.31
assert log10(1.0) == 0.0
assert log10(2.0) > 0.30
assert log10(2.0) < 0.31
assert log10(100.0) == 2.0
assert log2(1.0) == 0.0
assert log2(2.0) == 1.0
assert log2(8.0) == 3.0
assert log2(10.0) > 3.32
assert log2(10.0) < 3.33
# Trigonometric functions (in radians)
assert sin(0.0) == 0.0
assert sin(1.57079) > 0.99 # Close to π/2
assert sin(1.57079) < 1.0
assert sin(3.14159) > -0.01 # Close to π
assert sin(3.14159) < 0.01
assert cos(0.0) == 1.0
assert cos(1.57079) > -0.01 # Close to π/2
assert cos(1.57079) < 0.01
assert cos(3.14159) > -1.0 # Close to π
assert cos(3.14159) < -0.99
assert tan(0.0) == 0.0
assert tan(0.78539) > 0.99 # Close to π/4
assert tan(0.78539) < 1.01
assert tan(2.35619) > -1.01 # Close to 3π/4
assert tan(2.35619) < -0.99
# Inverse trigonometric functions
assert asin(0.0) == 0.0
assert asin(1.0) > 1.57
assert asin(1.0) < 1.58 # Close to π/2
assert asin(-1.0) < -1.57
assert asin(-1.0) > -1.58 # Close to -π/2
assert acos(1.0) == 0.0
assert acos(0.0) > 1.57
assert acos(0.0) < 1.58 # Close to π/2
assert acos(-1.0) > 3.14
assert acos(-1.0) < 3.15 # Close to π
assert atan(0.0) == 0.0
assert atan(1.0) > 0.78
assert atan(1.0) < 0.79 # Close to π/4
assert atan(-1.0) < -0.78
assert atan(-1.0) > -0.79 # Close to -π/4
# Hyperbolic functions
assert sinh(0.0) == 0.0
assert sinh(1.0) > 1.17
assert sinh(1.0) < 1.18
assert sinh(-1.0) < -1.17
assert sinh(-1.0) > -1.18
assert cosh(0.0) == 1.0
assert cosh(1.0) > 1.54
assert cosh(1.0) < 1.55
assert cosh(-1.0) > 1.54
assert cosh(-1.0) < 1.55
assert tanh(0.0) == 0.0
assert tanh(1.0) > 0.76
assert tanh(1.0) < 0.77
assert tanh(-1.0) < -0.76
assert tanh(-1.0) > -0.77
assert tanh(10.0) > 0.99999
assert tanh(10.0) < 1.0
# Inverse hyperbolic functions
assert asinh(0.0) == 0.0
assert asinh(1.0) > 0.88
assert asinh(1.0) < 0.89
assert asinh(-1.0) < -0.88
assert asinh(-1.0) > -0.89
assert acosh(1.0) == 0.0
assert acosh(2.0) > 1.31
assert acosh(2.0) < 1.32
assert atanh(0.0) == 0.0
assert atanh(0.5) > 0.54
assert atanh(0.5) < 0.55
assert atanh(-0.5) < -0.54
assert atanh(-0.5) > -0.55
# Power functions
assert 2.0 ** 3.0 == 8.0
assert 9.0 ** 0.5 == 3.0
assert 10.0 ** -1.0 == 0.1
assert 2.0 ** 0.5 > 1.4
assert 2.0 ** 0.5 < 1.5
# Rounding functions
assert floor(1.7) == 1.0
assert floor(-1.7) == -2.0
assert floor(1.0) == 1.0
assert ceil(1.7) == 2.0
assert ceil(-1.7) == -1.0
assert ceil(1.0) == 1.0
assert round(1.4) == 1.0
assert round(1.5) == 2.0
assert round(-1.5) == -1.0
assert trunc(1.7) == 1.0
assert trunc(-1.7) == -1.0
# Absolute value and sign
assert abs(1.7) == 1.7
assert abs(-1.7) == 1.7
assert abs(0.0) == 0.0
# Min/max functions
assert min(1.0, 2.0) == 1.0
assert min(-1.0, -2.0) == -2.0
assert max(1.0, 2.0) == 2.0
assert max(-1.0, -2.0) == -1.0
# Constants
assert PI > 3.14
assert PI < 3.15
# Infinity and NaN handling
assert isFinite(1.0) == true
assert isFinite(Infinity) == false
assert isFinite(NaN) == false
assert isNaN(NaN) == true
assert isNaN(1.0) == false
# Check that edge cases don't crash
assert isNaN(sqrt(-1.0)) == true
assert isFinite(exp(1000.0)) == false
assert isNaN(log(-1.0)) == true
assert isNaN(log10(-1.0)) == true
assert isNaN(asin(2.0)) == true
assert isNaN(acos(2.0)) == true
print "ok"