seq-compiler 2.0.1

Compiler for the Seq programming language
Documentation
# 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
;