diff --git a/test/suite-corelib.janet b/test/suite-corelib.janet index 8f590658..213a33f4 100644 --- a/test/suite-corelib.janet +++ b/test/suite-corelib.janet @@ -46,8 +46,28 @@ (assert (<= 1.0 2.0 3.0 3.0 4.0 5.0 6.0) "less than or equal to reals") (assert (>= 6 5 4 4 3 2 1) "greater than or equal to integers") (assert (>= 6.0 5.0 4.0 4.0 3.0 2.0 1.0) "greater than or equal to reals") -(assert (= 7 (% 20 13)) "modulo 1") -(assert (= -7 (% -20 13)) "modulo 2") + +(assert (= 7 (% 20 13)) "rem 1") +(assert (= -7 (% -20 13)) "rem 2") +(assert (= 7 (% 20 -13)) "rem 3") +(assert (= -7 (% -20 -13)) "rem 4") +(assert (nan? (% 20 0)) "rem 5") + +(assert (= 7 (mod 20 13)) "mod 1") +(assert (= 6 (mod -20 13)) "mod 2") +(assert (= -6 (mod 20 -13)) "mod 3") +(assert (= -7 (mod -20 -13)) "mod 4") +(assert (= 20 (mod 20 0)) "mod 5") + +(assert (= 1 (div 20 13)) "div 1") +(assert (= -2 (div -20 13)) "div 2") +(assert (= -2 (div 20 -13)) "div 3") +(assert (= 1 (div -20 -13)) "div 4") +(assert (= math/inf (div 20 0)) "div 5") + +(assert (all = (seq [n :range [0 10]] (mod n 5 3)) + (seq [n :range [0 10]] (% n 5 3)) + [0 1 2 0 1 0 1 2 0 1]) "variadic mod") (assert (< 1.0 nil false true (fiber/new (fn [] 1)) diff --git a/test/suite-inttypes.janet b/test/suite-inttypes.janet index 554128b4..9a7b6d0f 100644 --- a/test/suite-inttypes.janet +++ b/test/suite-inttypes.janet @@ -171,22 +171,35 @@ (assert (not (even? (int/s64 "-1001"))) "even? 6") # integer type operations -(defn modcheck [x y] - (assert (= (string (mod x y)) (string (mod (int/s64 x) y))) - (string "int/s64 (mod " x " " y ") expected " (mod x y) ", got " - (mod (int/s64 x) y))) - (assert (= (string (% x y)) (string (% (int/s64 x) y))) - (string "int/s64 (% " x " " y ") expected " (% x y) ", got " - (% (int/s64 x) y)))) +(defn opcheck [int x y] + (each op [mod % div] + (assert (compare= (op x y) (op (int x) y)) + (string int " (" op " " x " " y ") expected " (op x y) + ", got " (op (int x) y))) + (assert (compare= (op x y) (op x (int y))) + (string int " (" op " " x " " y ") expected " (op x y) + ", got " (op x (int y)))) + (assert (compare= (op x y) (op (int x) (int y))) + (string int " (" op " " x " " y ") expected " (op x y) + ", got " (op (int x) (int y)))))) -(modcheck 1 2) -(modcheck 1 3) -(modcheck 4 2) -(modcheck 4 1) -(modcheck 10 3) -(modcheck 10 -3) -(modcheck -10 3) -(modcheck -10 -3) +(loop [x :in [-5 -3 0 3 5] + y :in [-4 -3 3 4]] + (opcheck int/s64 x y) + (if (and (>= x 0) (>= y 0)) + (opcheck int/u64 x y))) + +(each int [int/s64 int/u64] + (each op [% / div] + (assert-error "division by zero" (op (int 7) 0)) + (assert-error "division by zero" (op 7 (int 0))) + (assert-error "division by zero" (op (int 7) (int 0))))) + +(each int [int/s64 int/u64] + (loop [x :in [-5 -3 0 3 5]] + (assert (= (int x) (mod (int x) 0)) (string int " mod 0")) + (assert (= (int x) (mod x (int 0))) (string int " mod 0")) + (assert (= (int x) (mod (int x) (int 0))) (string int " mod 0")))) # Check for issue #1130 # 7e65c2bda @@ -253,6 +266,11 @@ (assert (= (compare (i64 -1) (u64 1)) -1) "compare 11") (assert (= (compare (i64 -1) (u64 -1)) -1) "compare 12") +# off by 1 error in inttypes +# a3e812b86 +(assert (= (int/s64 "-0x8000_0000_0000_0000") + (+ (int/s64 "0x7FFF_FFFF_FFFF_FFFF") 1)) "int types wrap around") +(assert (= (int/s64 "0x7FFF_FFFF_FFFF_FFFF") + (- (int/s64 "-0x8000_0000_0000_0000") 1)) "int types wrap around") (end-suite) - diff --git a/test/suite-peg.janet b/test/suite-peg.janet index 4e3603b3..44236900 100644 --- a/test/suite-peg.janet +++ b/test/suite-peg.janet @@ -307,12 +307,12 @@ (check-deep '(uint 2) "\xff\x7f" @[0x7fff]) (check-deep '(uint-be 2) "\x7f\xff" @[0x7fff]) (check-deep '(uint-be 2) "\x7f\xff" @[0x7fff]) -(check-deep '(uint 8) "\xff\x7f\x00\x00\x00\x00\x00\x00" - @[(int/u64 0x7fff)]) -(check-deep '(int 8) "\xff\x7f\x00\x00\x00\x00\x00\x00" - @[(int/s64 0x7fff)]) -(check-deep '(uint 7) "\xff\x7f\x00\x00\x00\x00\x00" @[(int/u64 0x7fff)]) -(check-deep '(int 7) "\xff\x7f\x00\x00\x00\x00\x00" @[(int/s64 0x7fff)]) +(when-let [u64 int/u64 + i64 int/s64] + (check-deep '(uint 8) "\xff\x7f\x00\x00\x00\x00\x00\x00" @[(u64 0x7fff)]) + (check-deep '(int 8) "\xff\x7f\x00\x00\x00\x00\x00\x00" @[(i64 0x7fff)]) + (check-deep '(uint 7) "\xff\x7f\x00\x00\x00\x00\x00" @[(u64 0x7fff)]) + (check-deep '(int 7) "\xff\x7f\x00\x00\x00\x00\x00" @[(i64 0x7fff)])) (check-deep '(* (int 2) -1) "123" nil) diff --git a/test/suite-strtod.janet b/test/suite-strtod.janet index f693b808..888123fe 100644 --- a/test/suite-strtod.janet +++ b/test/suite-strtod.janet @@ -35,10 +35,5 @@ # c876e63 0xf&1fffFFFF -# off by 1 error in inttypes -# a3e812b86 -(assert (= (int/s64 "-0x8000_0000_0000_0000") - (+ (int/s64 "0x7FFF_FFFF_FFFF_FFFF") 1)) "int types wrap around") - (end-suite)