import { describe, test, expect,expectNumber, Result } from './tests.uts' export function testMath(): Result { return describe("Math", () => { test('E', () => { function getNapier():number { return Math.E } expect(getNapier()).toEqual(2.718281828459045); }) test('LN10', () => { function getNatLog10():number { return Math.LN10; } expect(getNatLog10()).toEqual(2.302585092994046); }) test('LN2', () => { function getNatLog2():number { return Math.LN2; } expect(getNatLog2()).toEqual(0.6931471805599453); }) test('LOG10E', () => { function getLog10e():number { return Math.LOG10E; } expect(getLog10e()).toEqual(0.4342944819032518); }) test('LOG2E', () => { function getLog2e():number { return Math.LOG2E; } expect(getLog2e()).toEqual(1.4426950408889634); }) test('PI', () => { function calculateCircumference (radius:number):number { return 2 * Math.PI * radius; } expect(calculateCircumference(1)).toEqual(6.283185307179586); }) test('SQRT1_2', () => { function getRoot1_2():number { return Math.SQRT1_2; } expect(getRoot1_2()).toEqual(0.7071067811865476); }) test('SQRT2', () => { function getRoot2():number { return Math.SQRT2; } expect(getRoot2()).toEqual(1.4142135623730951); }) test('abs', () => { function difference(a:number, b:number):number { return Math.abs(a - b); } expect(difference(3, 5)).toEqual(2); expect(difference(5, 3)).toEqual(2); expect(difference(1.23456, 7.89012)).toEqual(6.6555599999999995); }) test('acos', () => { expect(Math.acos(-1)).toEqual(3.141592653589793); expect(Math.acos(NaN)).toEqual(NaN); expect(Math.acos(0)).toEqual(1.5707963267948966); // 解决精度问题 expect(Math.acos(1)).toEqual(0); }) test('acosh', () => { // 解决精度问题 expect(Math.acosh(1)).toEqual(0); expect(Math.acosh(NaN)).toEqual(NaN); expectNumber(Math.acosh(2)).toEqualDouble(1.3169578969248166); expectNumber(Math.acosh(2.5)).toEqualDouble(1.566799236972411); }) test('asin', () => { expect(Math.asin(NaN)).toEqual(NaN); expect(Math.asin(-1)).toEqual(-1.5707963267948966); // 解决精度问题 expect(Math.asin(0)).toEqual(0); // expect(Math.asin(0.5)).toEqual(0.5235987755982989); expect(Math.asin(1)).toEqual(1.5707963267948966); }) test('asinh', () => { expect(Math.asinh(NaN)).toEqual(NaN); expectNumber(Math.asinh(1)).toEqualDouble(0.881373587019543); expectNumber(Math.asinh(0)).toEqualDouble(0); expectNumber(Math.asinh(-1)).toEqualDouble(-0.881373587019543); expectNumber(Math.asinh(2)).toEqualDouble(1.4436354751788103); }) test('atan', () => { expect(Math.atan(NaN)).toEqual(NaN); expect(Math.atan(1)).toEqual(0.7853981633974483); // 解决精度问题 expect(Math.atan(0)).toEqual(0); }) test('atan2', () => { expect(Math.atan2(90, 15)).toEqual(1.4056476493802699); expectNumber(Math.atan2(15, 90)).toEqualDouble(0.16514867741462683); }) test('atanh', () => { // 解决精度问题 expect(Math.atanh(NaN)).toEqual(NaN); expect(Math.atanh(0)).toEqual(0); // expect(Math.atanh(0.5)).toEqual(0.5493061443340548); }) test('cbrt', () => { // expect(Math.cbrt(-1)).toEqual(-1); // expect(Math.cbrt(0)).toEqual(0); // expect(Math.cbrt(1)).toEqual(1); // expect(Math.cbrt(2)).toEqual(1.2599210498948732); }) test('ceil', () => { expect(Math.ceil(0.95)).toEqual(1); expect(Math.ceil(4)).toEqual(4); expect(Math.ceil(7.004)).toEqual(8); expect(Math.ceil(-7.004)).toEqual(-7); expect(Math.ceil(37110233000.223)).toEqual(37110233001); expect(Math.ceil(-37110233000.223)).toEqual(-37110233000); }) test('clz32', () => { expect(Math.clz32(NaN)).toEqual(32); expect(Math.clz32(1)).toEqual(31); expect(Math.clz32(1000)).toEqual(22); expect(Math.clz32(0)).toEqual(32); expect(Math.clz32(3.5)).toEqual(30); }) test('cos', () => { expect(Math.cos(0)).toEqual(1.0); expect(Math.cos(1)).toEqual(0.5403023058681398); }) test('cosh', () => { // 解决精度问题 expect(Math.cosh(0)).toEqual(1.0); expectNumber(Math.cosh(1)).toEqualDouble(1.5430806348152437); expectNumber(Math.cosh(-1)).toEqualDouble(1.5430806348152437); }) test('exp', () => { expectNumber(Math.exp(-1)).toEqualDouble(0.36787944117144233); // 解决精度问题 expect(Math.exp(0)).toEqual(1.0); expectNumber(Math.exp(1)).toEqualDouble(2.718281828459045); }) test('expm1', () => { expectNumber(Math.expm1(1)).toEqualDouble(1.718281828459045); expectNumber(Math.expm1(-38)).toEqualDouble(-1); }) test('floor', () => { expect(Math.floor(5.95)).toEqual(5); expect(Math.floor(5.05)).toEqual(5); expect(Math.floor(5)).toEqual(5); expect(Math.floor(-5.05)).toEqual(-6); expect(Math.floor(37110233000.223)).toEqual(37110233000); expect(Math.floor(-37110233000.223)).toEqual(-37110233001); }) test('fround', () => { expect(Math.fround(NaN)).toEqual(NaN); expect(Math.fround(1.5)).toEqual(1.5); expectNumber(Math.fround(1.337)).toEqualDouble(1.3370000123977661); }) // test('hypot', () => { // expect(Math.hypot(3, 4)).toEqual(5); // expect(Math.hypot(5, 12)).toEqual(13); // expect(Math.hypot(3, 4, 5)).toEqual(7.0710678118654755); // expect(Math.hypot(-5)).toEqual(5); // }) // test('imul', () => { // expect(Math.imul(3, 4)).toEqual(12); // expect(Math.imul(-5, 12)).toEqual(-60); // }) test('log', () => { // 解决精度问题 expect(Math.log(1)).toEqual(0.0); expect(Math.log(10)).toEqual(2.302585092994046); }) test('log10', () => { // 解决精度问题 expect(Math.log10(10)).toEqual(1.0); expect(Math.log10(100)).toEqual(2.0); expect(Math.log10(1)).toEqual(0.0); }) test('log1p', () => { // 解决精度问题 expect(Math.log1p(Math.E - 1)).toEqual(1.0); expect(Math.log1p(0)).toEqual(0.0); }) test('log2', () => { // 解决精度问题 expect(Math.log2(2)).toEqual(1.0); expect(Math.log2(1024)).toEqual(10.0); expect(Math.log2(1)).toEqual(0.0); }) test('max', () => { expect(Math.max(1, 3, 2)).toEqual(3); expect(Math.max(-1, -3, -2)).toEqual(-1); }) test('min', () => { expect(Math.min(2, 3, 1)).toEqual(1); expect(Math.min(-2, -3, -1)).toEqual(-3); }) test('pow', () => { expectNumber(Math.pow(7, 3)).toEqualDouble(343); expectNumber(Math.pow(4, 0.5)).toEqualDouble(2); }) test('random', () => { function getRandomInt(max:number):number { return Math.floor(Math.random() * max); } expect(getRandomInt(getRandomInt(1))).toEqual(0); }) test('sign', () => { expect(Math.sign(3)).toEqual(1); expect(Math.sign(-3)).toEqual(-1); expect(Math.sign(0)).toEqual(0); }) test('sin', () => { // 解决精度问题 expect(Math.sin(0)).toEqual(0.0); expect(Math.sin(1)).toEqual(0.8414709848078965); }) test('sinh', () => { // 解决精度问题 expect(Math.sinh(0)).toEqual(0.0); expect(Math.sinh(1)).toEqual(1.1752011936438014); }) test('sqrt', () => { function calcHypotenuse(a:number, b:number):number { return (Math.sqrt((a * a) + (b * b))); } // 解决精度问题 expect(calcHypotenuse(3, 4)).toEqual(5.0); expect(calcHypotenuse(5, 12)).toEqual(13.0); expect(calcHypotenuse(0, 0)).toEqual(0.0); }) test('tan', () => { // 解决精度问题 expect(Math.tan(0)).toEqual(0.0); // expect(Math.tan(1)).toEqual(1.5574077246549023); }) test('tanh', () => { expect(Math.tanh(-1)).toEqual(-0.7615941559557649); // 解决精度问题 expect(Math.tanh(0)).toEqual(0.0); expect(Math.tanh(1)).toEqual(0.7615941559557649); }) test('trunc', () => { expect(Math.trunc(13.37)).toEqual(13); expect(Math.trunc(42.84)).toEqual(42); expect(Math.trunc(0.123)).toEqual(0); }) test('round', () => { expect(Math.round(NaN)).toEqual(NaN); expect(Math.round(Math.E)).toEqual(3); expectNumber(Math.round(Number.MAX_VALUE)).toEqualDouble(1.7976931348623157e+308); expect(Math.round(Number.MIN_VALUE)).toEqual(0); expect(Math.round(Number.NEGATIVE_INFINITY)).toEqual(-Infinity); expect(Math.round(Number.POSITIVE_INFINITY)).toEqual(Infinity); expect(Math.round(0.9)).toEqual(1); expect(Math.round(5.95)).toEqual(6); expect(Math.round(-5.05)).toEqual(-5); expect(Math.round(37110233000.223)).toEqual(37110233000); expect(Math.round(-37110233000.223)).toEqual(-37110233000); }) }) }