Automated validation of the CalcDomain expression engine. Every test vector is run at build time — the counts below reflect actual test results, not hardcoded numbers.
Report generated: 2026-07-30 · Engine version: 1.0.0
All computations use IEEE 754 double precision (64-bit floating point) — the native JavaScript number type. No arbitrary-precision or symbolic arithmetic is claimed or performed.
The engine detects and reports exact values for: integers up to 10¹⁵, simple rationals with denominator ≤ 30, perfect square roots (√k for integer k), and perfect cube roots (∛k for integer k). Results outside this scope are shown in rounded decimal or scientific notation only.
The 169 test vectors cover: arithmetic basics, operator precedence and associativity, unary minus and exponentiation corner cases, implicit multiplication, trigonometry (DEG and RAD), trigonometric singularities, inverse trigonometry, hyperbolic functions, logarithms, roots and exponentials, absolute value/floor/ceil/round, factorials, combinations (nCr), permutations (nPr), constants (π, e), division by zero, scientific notation inputs, nested parentheses, the Ans variable, syntax errors, and number formatting edge cases.
| Expression | Mode | Expected | Actual | Result |
|---|---|---|---|---|
| 2+3 | DEG | 5 | 5 | ✓ pass |
| 10-4 | DEG | 6 | 6 | ✓ pass |
| 3*4 | DEG | 12 | 12 | ✓ pass |
| 10/4 | DEG | 2.5 | 2.5 | ✓ pass |
| 2^10 | DEG | 1024 | 1024 | ✓ pass |
| 7mod3 | DEG | 1 | 1 | ✓ pass |
| 50% | DEG | 0.5 | 0.5 | ✓ pass |
| 100% | DEG | 1 | 1 | ✓ pass |
| 0+0 | DEG | 0 | 0 | ✓ pass |
| 1000000*1000000 | DEG | 1000000000000 | 1000000000000 | ✓ pass |
| 2+3*4 | DEG | 14 | 14 | ✓ pass |
| (2+3)*4 | DEG | 20 | 20 | ✓ pass |
| 2*3+4*5 | DEG | 26 | 26 | ✓ pass |
| 2^3^2 | DEG | 512 | 512 | ✓ pass |
| (2^3)^2 | DEG | 64 | 64 | ✓ pass |
| 2^2^3 | DEG | 256 | 256 | ✓ pass |
| -2^2 | DEG | -4 | -4 | ✓ pass |
| (-2)^2 | DEG | 4 | 4 | ✓ pass |
| 2^-2 | DEG | 0.25 | 0.25 | ✓ pass |
| -2^-2 | DEG | -0.25 | -0.25 | ✓ pass |
| (-2)^-2 | DEG | 0.25 | 0.25 | ✓ pass |
| -3^0 | DEG | -1 | -1 | ✓ pass |
| (-1)^3 | DEG | -1 | -1 | ✓ pass |
| (-1)^4 | DEG | 1 | 1 | ✓ pass |
| +5 | DEG | 5 | 5 | ✓ pass |
| -0 | DEG | 0 | 0 | ✓ pass |
| 2π | DEG | 6.283185307179586 | 6.283185307179586 | ✓ pass |
| 2e | DEG | 5.43656365691809 | 5.43656365691809 | ✓ pass |
| 2(3+4) | DEG | 14 | 14 | ✓ pass |
| (2+3)(4+5) | DEG | 45 | 45 | ✓ pass |
| 3sin(30) | DEG | 1.5 | 1.4999999999999998 | ✓ pass |
| 2sqrt(9) | DEG | 6 | 6 | ✓ pass |
| 4abs(-3) | DEG | 12 | 12 | ✓ pass |
| 2(1+1)(1+1) | DEG | 8 | 8 | ✓ pass |
| sin(0) | DEG | 0 | 0 | ✓ pass |
| sin(30) | DEG | 0.5 | 0.49999999999999994 | ✓ pass |
| sin(45) | DEG | 0.7071067811865476 | 0.7071067811865475 | ✓ pass |
| sin(90) | DEG | 1 | 1 | ✓ pass |
| sin(180) | DEG | 0 | 1.2246467991473532e-16 | ✓ pass |
| sin(270) | DEG | -1 | -1 | ✓ pass |
| cos(0) | DEG | 1 | 1 | ✓ pass |
| cos(60) | DEG | 0.5 | 0.5000000000000001 | ✓ pass |
| cos(90) | DEG | 0 | 6.123233995736766e-17 | ✓ pass |
| cos(180) | DEG | -1 | -1 | ✓ pass |
| tan(0) | DEG | 0 | 0 | ✓ pass |
| tan(45) | DEG | 1 | 0.9999999999999999 | ✓ pass |
| tan(-45) | DEG | -1 | -0.9999999999999999 | ✓ pass |
| sin(0) | RAD | 0 | 0 | ✓ pass |
| sin(pi/6) | RAD | 0.5 | 0.49999999999999994 | ✓ pass |
| sin(pi/2) | RAD | 1 | 1 | ✓ pass |
| cos(pi) | RAD | -1 | -1 | ✓ pass |
| cos(pi/3) | RAD | 0.5 | 0.5000000000000001 | ✓ pass |
| tan(pi/4) | RAD | 1 | 0.9999999999999999 | ✓ pass |
| sin(pi) | RAD | 0 | 1.2246467991473532e-16 | ✓ pass |
| tan(90) | DEG | error:TRIG_SINGULARITY | error:TRIG_SINGULARITY | ✓ pass |
| tan(270) | DEG | error:TRIG_SINGULARITY | error:TRIG_SINGULARITY | ✓ pass |
| tan(-90) | DEG | error:TRIG_SINGULARITY | error:TRIG_SINGULARITY | ✓ pass |
| tan(pi/2) | RAD | error:TRIG_SINGULARITY | error:TRIG_SINGULARITY | ✓ pass |
| tan(3*pi/2) | RAD | error:TRIG_SINGULARITY | error:TRIG_SINGULARITY | ✓ pass |
| asin(0) | DEG | 0 | 0 | ✓ pass |
| asin(0.5) | DEG | 30 | 30.000000000000004 | ✓ pass |
| asin(1) | DEG | 90 | 90 | ✓ pass |
| acos(1) | DEG | 0 | 0 | ✓ pass |
| acos(0.5) | DEG | 60 | 60.00000000000001 | ✓ pass |
| acos(0) | DEG | 90 | 90 | ✓ pass |
| atan(0) | DEG | 0 | 0 | ✓ pass |
| atan(1) | DEG | 45 | 45 | ✓ pass |
| atan(-1) | DEG | -45 | -45 | ✓ pass |
| asin(0.5) | RAD | 0.5235987755982988 | 0.5235987755982989 | ✓ pass |
| acos(0.5) | RAD | 1.0471975511965976 | 1.0471975511965979 | ✓ pass |
| atan(1) | RAD | 0.7853981633974483 | 0.7853981633974483 | ✓ pass |
| asin(1.1) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| asin(-1.1) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| acos(2) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| sinh(0) | DEG | 0 | 0 | ✓ pass |
| cosh(0) | DEG | 1 | 1 | ✓ pass |
| tanh(0) | DEG | 0 | 0 | ✓ pass |
| sinh(1) | DEG | 1.1752011936438014 | 1.1752011936438014 | ✓ pass |
| cosh(1) | DEG | 1.5430806348152437 | 1.5430806348152437 | ✓ pass |
| tanh(1) | DEG | 0.7615941559557649 | 0.7615941559557649 | ✓ pass |
| sinh(-1) | DEG | -1.1752011936438014 | -1.1752011936438014 | ✓ pass |
| cosh(-1) | DEG | 1.5430806348152437 | 1.5430806348152437 | ✓ pass |
| log(1) | DEG | 0 | 0 | ✓ pass |
| log(10) | DEG | 1 | 1 | ✓ pass |
| log(100) | DEG | 2 | 2 | ✓ pass |
| log(1000) | DEG | 3 | 3 | ✓ pass |
| ln(1) | DEG | 0 | 0 | ✓ pass |
| ln(e) | DEG | 1 | 1 | ✓ pass |
| ln(e^2) | DEG | 2 | 2 | ✓ pass |
| log(0) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| ln(0) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| log(-1) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| ln(-5) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| sqrt(0) | DEG | 0 | 0 | ✓ pass |
| sqrt(4) | DEG | 2 | 2 | ✓ pass |
| sqrt(9) | DEG | 3 | 3 | ✓ pass |
| sqrt(2) | DEG | 1.4142135623730951 | 1.4142135623730951 | ✓ pass |
| sqrt(-1) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| cbrt(0) | DEG | 0 | 0 | ✓ pass |
| cbrt(8) | DEG | 2 | 2 | ✓ pass |
| cbrt(27) | DEG | 3 | 3 | ✓ pass |
| cbrt(-8) | DEG | -2 | -2 | ✓ pass |
| exp(0) | DEG | 1 | 1 | ✓ pass |
| exp(1) | DEG | 2.718281828459045 | 2.718281828459045 | ✓ pass |
| exp(2) | DEG | 7.3890560989306495 | 7.38905609893065 | ✓ pass |
| abs(0) | DEG | 0 | 0 | ✓ pass |
| abs(-5) | DEG | 5 | 5 | ✓ pass |
| abs(3.7) | DEG | 3.7 | 3.7 | ✓ pass |
| floor(3.7) | DEG | 3 | 3 | ✓ pass |
| floor(-3.2) | DEG | -4 | -4 | ✓ pass |
| ceil(3.2) | DEG | 4 | 4 | ✓ pass |
| ceil(-3.7) | DEG | -3 | -3 | ✓ pass |
| round(3.5) | DEG | 4 | 4 | ✓ pass |
| round(3.4) | DEG | 3 | 3 | ✓ pass |
| round(-3.5) | DEG | -3 | -3 | ✓ pass |
| 0! | DEG | 1 | 1 | ✓ pass |
| 1! | DEG | 1 | 1 | ✓ pass |
| 5! | DEG | 120 | 120 | ✓ pass |
| 10! | DEG | 3628800 | 3628800 | ✓ pass |
| (3+2)! | DEG | 120 | 120 | ✓ pass |
| 2^3! | DEG | 64 | 64 | ✓ pass |
| 3!! | DEG | 720 | 720 | ✓ pass |
| 3.5! | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| (-1)! | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| 171! | DEG | error:OVERFLOW | error:OVERFLOW | ✓ pass |
| nCr(5,0) | DEG | 1 | 1 | ✓ pass |
| nCr(5,5) | DEG | 1 | 1 | ✓ pass |
| nCr(5,2) | DEG | 10 | 10 | ✓ pass |
| nCr(10,3) | DEG | 120 | 120 | ✓ pass |
| nCr(10,7) | DEG | 120 | 120 | ✓ pass |
| nCr(0,0) | DEG | 1 | 1 | ✓ pass |
| nCr(10,11) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| nCr(5,2.5) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| nPr(5,0) | DEG | 1 | 1 | ✓ pass |
| nPr(5,1) | DEG | 5 | 5 | ✓ pass |
| nPr(10,3) | DEG | 720 | 720 | ✓ pass |
| nPr(5,5) | DEG | 120 | 120 | ✓ pass |
| nPr(10,11) | DEG | error:DOMAIN_ERROR | error:DOMAIN_ERROR | ✓ pass |
| pi | DEG | 3.141592653589793 | 3.141592653589793 | ✓ pass |
| π | DEG | 3.141592653589793 | 3.141592653589793 | ✓ pass |
| e | DEG | 2.718281828459045 | 2.718281828459045 | ✓ pass |
| 2*pi | DEG | 6.283185307179586 | 6.283185307179586 | ✓ pass |
| pi/2 | DEG | 1.5707963267948966 | 1.5707963267948966 | ✓ pass |
| 1/0 | DEG | error:DIVISION_BY_ZERO | error:DIVISION_BY_ZERO | ✓ pass |
| 0/0 | DEG | error:DIVISION_BY_ZERO | error:DIVISION_BY_ZERO | ✓ pass |
| 5mod0 | DEG | error:DIVISION_BY_ZERO | error:DIVISION_BY_ZERO | ✓ pass |
| 1e-13 | DEG | 1e-13 | 1e-13 | ✓ pass |
| 6.02e23 | DEG | 6.02e+23 | 6.02e+23 | ✓ pass |
| 1.5e10 | DEG | 15000000000 | 15000000000 | ✓ pass |
| 2.5e-5 | DEG | 0.000025 | 0.000025 | ✓ pass |
| ((2+3)*(4-1)) | DEG | 15 | 15 | ✓ pass |
| 2+3*(4-(1+1)) | DEG | 8 | 8 | ✓ pass |
| sqrt(2^2+3^2+4^2) | DEG | 5.385164807134504 | 5.385164807134504 | ✓ pass |
| Ans+1 | DEG | 6 | 6 | ✓ pass |
| Ans*2 | DEG | 10 | 10 | ✓ pass |
| Ans | DEG | 0 | 0 | ✓ pass |
| 2+ | DEG | error:SYNTAX_ERROR | error:SYNTAX_ERROR | ✓ pass |
| (2+3 | DEG | error:SYNTAX_ERROR | error:SYNTAX_ERROR | ✓ pass |
| 2*/3 | DEG | error:SYNTAX_ERROR | error:SYNTAX_ERROR | ✓ pass |
| foo(3) | DEG | error:UNKNOWN_FUNCTION | error:UNKNOWN_FUNCTION | ✓ pass |
| DEG | error:SYNTAX_ERROR | error:SYNTAX_ERROR | ✓ pass | |
| 1/3 | DEG | 0.333333333333 | 0.333333333333 | ✓ pass |
| 2/3 | DEG | 0.666666666667 | 0.666666666667 | ✓ pass |
| 1e-13 | DEG | 1e-13 | 1e-13 | ✓ pass |
| 1000000000000 | DEG | 1e+12 | 1e+12 | ✓ pass |
| 999999999999 | DEG | 999999999999 | 999999999999 | ✓ pass |
| 0.1+0.2 | DEG | 0.3 | 0.3 | ✓ pass |
| -0 | DEG | 0 | 0 | ✓ pass |
| 0.000000001 | DEG | 1e-9 | 1e-9 | ✓ pass |