# Integration test for std:imath
#
# This test actually uses `include std:imath` to verify the module works.
# Unlike test_math.seq which redefines functions locally.
include std:imath
: assert-eq ( Int Int String -- )
rot rot = if
" PASS" string.concat io.write-line
else
" FAIL" string.concat io.write-line
then
;
: test-abs ( -- )
"Testing abs:" io.write-line
5 abs 5 " abs(5) = 5" assert-eq
-5 abs 5 " abs(-5) = 5" assert-eq
0 abs 0 " abs(0) = 0" assert-eq
-100 abs 100 " abs(-100) = 100" assert-eq
;
: test-max ( -- )
"Testing max:" io.write-line
3 7 max 7 " max(3, 7) = 7" assert-eq
7 3 max 7 " max(7, 3) = 7" assert-eq
5 5 max 5 " max(5, 5) = 5" assert-eq
-10 -5 max -5 " max(-10, -5) = -5" assert-eq
;
: test-min ( -- )
"Testing min:" io.write-line
3 7 min 3 " min(3, 7) = 3" assert-eq
7 3 min 3 " min(7, 3) = 3" assert-eq
5 5 min 5 " min(5, 5) = 5" assert-eq
-10 -5 min -10 " min(-10, -5) = -10" assert-eq
;
: test-mod ( -- )
"Testing mod:" io.write-line
10 3 mod 1 " 10 mod 3 = 1" assert-eq
15 5 mod 0 " 15 mod 5 = 0" assert-eq
17 4 mod 1 " 17 mod 4 = 1" assert-eq
100 7 mod 2 " 100 mod 7 = 2" assert-eq
;
: test-gcd ( -- )
"Testing gcd:" io.write-line
48 18 gcd 6 " gcd(48, 18) = 6" assert-eq
100 35 gcd 5 " gcd(100, 35) = 5" assert-eq
17 13 gcd 1 " gcd(17, 13) = 1" assert-eq
24 36 gcd 12 " gcd(24, 36) = 12" assert-eq
;
: test-pow ( -- )
"Testing pow:" io.write-line
2 0 pow 1 " pow(2, 0) = 1" assert-eq
2 1 pow 2 " pow(2, 1) = 2" assert-eq
2 3 pow 8 " pow(2, 3) = 8" assert-eq
2 10 pow 1024 " pow(2, 10) = 1024" assert-eq
5 2 pow 25 " pow(5, 2) = 25" assert-eq
3 4 pow 81 " pow(3, 4) = 81" assert-eq
;
: test-sign ( -- )
"Testing sign:" io.write-line
5 sign 1 " sign(5) = 1" assert-eq
-5 sign -1 " sign(-5) = -1" assert-eq
0 sign 0 " sign(0) = 0" assert-eq
100 sign 1 " sign(100) = 1" assert-eq
-100 sign -1 " sign(-100) = -1" assert-eq
;
: test-square ( -- )
"Testing square:" io.write-line
5 square 25 " square(5) = 25" assert-eq
-3 square 9 " square(-3) = 9" assert-eq
0 square 0 " square(0) = 0" assert-eq
10 square 100 " square(10) = 100" assert-eq
;
: test-clamp ( -- )
"Testing clamp:" io.write-line
50 0 100 clamp 50 " clamp(50, 0, 100) = 50" assert-eq
-10 0 100 clamp 0 " clamp(-10, 0, 100) = 0" assert-eq
150 0 100 clamp 100 " clamp(150, 0, 100) = 100" assert-eq
0 0 100 clamp 0 " clamp(0, 0, 100) = 0" assert-eq
100 0 100 clamp 100 " clamp(100, 0, 100) = 100" assert-eq
;
: main ( -- )
"=== std:imath Integration Tests ===" io.write-line
"" io.write-line
test-abs
test-max
test-min
test-mod
test-gcd
test-pow
test-sign
test-square
test-clamp
"" io.write-line
"All tests completed." io.write-line
;