// MathPlugin功能测试程序
// 测试所有数学函数和自动类型转换功能
extern fn println(obj: Any)
// 三角函数
extern fn sin(x: Double) -> Double
extern fn cos(x: Double) -> Double
extern fn tan(x: Double) -> Double
extern fn asin(x: Double) -> Double
extern fn acos(x: Double) -> Double
extern fn atan(x: Double) -> Double
extern fn atan2(y: Double, x: Double) -> Double
// 双曲函数
extern fn sinh(x: Double) -> Double
extern fn cosh(x: Double) -> Double
extern fn tanh(x: Double) -> Double
// 指数对数函数
extern fn exp(x: Double) -> Double
extern fn exp2(x: Double) -> Double
extern fn ln(x: Double) -> Double
extern fn log10(x: Double) -> Double
extern fn log2(x: Double) -> Double
extern fn pow(base: Double, exponent: Double) -> Double
// 开方函数
extern fn sqrt(x: Double) -> Double
extern fn cbrt(x: Double) -> Double
// 取整函数
extern fn floor(x: Double) -> Double
extern fn ceil(x: Double) -> Double
extern fn round(x: Double) -> Double
extern fn trunc(x: Double) -> Double
// 绝对值函数
extern fn absF64(x: Double) -> Double
extern fn absF32(x: Float) -> Float
extern fn absI64(x: Int64) -> Int64
extern fn absI32(x: Int32) -> Int32
// 最值和限制函数
extern fn maxF64(a: Double, b: Double) -> Double
extern fn minF64(a: Double, b: Double) -> Double
extern fn maxI64(a: Int64, b: Int64) -> Int64
extern fn minI64(a: Int64, b: Int64) -> Int64
extern fn clampF64(value: Double, min: Double, max: Double) -> Double
extern fn clampI64(value: Int64, min: Int64, max: Int64) -> Int64
// 其他数学函数
extern fn fmod(dividend: Double, divisor: Double) -> Double
extern fn factorial(n: Int64) -> Int64
extern fn gcd(a: Int64, b: Int64) -> Int64
extern fn lcm(a: Int64, b: Int64) -> Int64
// 角度弧度转换
extern fn toRadians(degrees: Double) -> Double
extern fn toDegrees(radians: Double) -> Double
// 浮点数状态检查
extern fn isNaN(x: Double) -> Bool
extern fn isInfinite(x: Double) -> Bool
extern fn isFinite(x: Double) -> Bool
// 随机数函数
extern fn random() -> Double
extern fn randomRangeI64(min: Int64, max: Int64) -> Int64
extern fn randomRangeF64(min: Double, max: Double) -> Double
// 数学常量
extern fn PI() -> Double
extern fn E() -> Double
extern fn PHI() -> Double
extern fn LN2() -> Double
extern fn LN10() -> Double
extern fn SQRT2() -> Double
fn main() {
println("=== MathPlugin 功能测试程序 ===")
// 测试数学常量
println("\n--- 数学常量测试 ---")
println("π (PI):")
println(PI())
println("e (自然常数):")
println(E())
println("φ (黄金比例):")
println(PHI())
println("ln(2):")
println(LN2())
println("ln(10):")
println(LN10())
println("√2:")
println(SQRT2())
// 测试三角函数
println("\n--- 三角函数测试 ---")
let angle_deg: Double = 45.0
let angle_rad = toRadians(angle_deg)
println("角度: 45°")
println("弧度:")
println(angle_rad)
println("sin(45°):")
println(sin(angle_rad))
println("cos(45°):")
println(cos(angle_rad))
println("tan(45°):")
println(tan(angle_rad))
// 测试反三角函数
println("\n--- 反三角函数测试 ---")
let sin_val = sin(angle_rad)
println("asin(sin(45°)) 转换回角度:")
println(toDegrees(asin(sin_val)))
// 测试指数对数函数
println("\n--- 指数对数函数测试 ---")
let base: Double = 2.0
let exponent: Double = 3.0
println("2³ = ")
println(pow(base, exponent))
println("e² = ")
println(exp(2.0))
println("ln(e²) = ")
println(ln(exp(2.0)))
println("log₁₀(100) = ")
println(log10(100.0))
println("log₂(8) = ")
println(log2(8.0))
// 测试开方函数
println("\n--- 开方函数测试 ---")
println("√16 = ")
println(sqrt(16.0))
println("∛27 = ")
println(cbrt(27.0))
// 测试取整函数
println("\n--- 取整函数测试 ---")
let test_val: Double = 3.7
println("原值: 3.7")
println("floor(3.7) = ")
println(floor(test_val))
println("ceil(3.7) = ")
println(ceil(test_val))
println("round(3.7) = ")
println(round(test_val))
println("trunc(3.7) = ")
println(trunc(test_val))
// 测试绝对值函数
println("\n--- 绝对值函数测试 ---")
println("abs(-5.5) = ")
println(absF64(-5.5))
println("abs(-42) = ")
println(absI64(-42))
// 测试最值函数
println("\n--- 最值函数测试 ---")
println("max(3.14, 2.71) = ")
println(maxF64(3.14, 2.71))
println("min(100, 50) = ")
println(minI64(100, 50))
println("clamp(15, 0, 10) = ")
println(clampI64(15, 0, 10))
// 测试其他数学函数
println("\n--- 其他数学函数测试 ---")
println("5! = ")
println(factorial(5))
println("gcd(48, 18) = ")
println(gcd(48, 18))
println("lcm(12, 18) = ")
println(lcm(12, 18))
println("fmod(10.5, 3.0) = ")
println(fmod(10.5, 3.0))
// 测试浮点数状态检查
println("\n--- 浮点数状态检查测试 ---")
let normal_val: Double = 3.14
let inf_val = 1.0 / 0.0
let nan_val = 0.0 / 0.0
println("isFinite(3.14):")
println(isFinite(normal_val))
println("isInfinite(1/0):")
println(isInfinite(inf_val))
println("isNaN(0/0):")
println(isNaN(nan_val))
// 测试随机数函数
println("\n--- 随机数函数测试 ---")
println("random():")
println(random())
println("randomRangeI64(1, 10):")
println(randomRangeI64(1, 10))
println("randomRangeF64(0.0, 1.0):")
println(randomRangeF64(0.0, 1.0))
// 测试自动类型转换
println("\n--- 自动类型转换测试 ---")
let float_val: Float = 3.14
let double_val: Double = 2.71
println("Float值: 3.14")
println("Double值: 2.71")
println("Float + Double = ")
println(float_val + double_val) // 应该自动转换为Double
println("Float * Double = ")
println(float_val * double_val) // 应该自动转换为Double
println("Float > Double ? ")
println(float_val > double_val) // 应该自动转换后比较
// 综合数学计算示例
println("\n--- 综合计算示例 ---")
println("计算圆的面积和周长 (半径 = 5.0):")
let radius: Double = 5.0
let area = PI() * pow(radius, 2.0)
let circumference = 2.0 * PI() * radius
println("面积 = π × r² = ")
println(area)
println("周长 = 2 × π × r = ")
println(circumference)
println("\n二次方程求解 (x² - 5x + 6 = 0):")
let a: Double = 1.0
let b: Double = -5.0
let c: Double = 6.0
let discriminant = pow(b, 2.0) - 4.0 * a * c
println("判别式 = b² - 4ac = ")
println(discriminant)
if discriminant >= 0.0 {
let x1 = (-b + sqrt(discriminant)) / (2.0 * a)
let x2 = (-b - sqrt(discriminant)) / (2.0 * a)
println("x1 = ")
println(x1)
println("x2 = ")
println(x2)
} else {
println("方程无实数解")
}
println("\n=== 测试完成 ===")
println("所有MathPlugin功能测试已完成!")
}