Carp/test/safe_arithmetic.carp

97 lines
2.9 KiB
Plaintext
Raw Normal View History

(load "Test.carp")
(load "SafeInt.carp")
2017-12-12 17:08:33 +03:00
(use-all Bool Int Long Test)
2017-11-16 23:19:39 +03:00
(def i 1)
(def l 1l)
(defn return-res-int [f a b]
(let [c 0
_ false]
(do
(set! _ (f a b &c))
2017-11-16 23:19:39 +03:00
c)))
(defn return-res-long [f a b]
(let [c 0l
_ false]
(do
(set! _ (f a b &c))
2017-11-16 23:19:39 +03:00
c)))
(defn main []
(with-test test
(assert-equal test
false
(safe-add 1 2 &i)
2017-11-25 21:19:15 +03:00
"safe-add is false without overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
3
(return-res-int safe-add 1 2)
2017-11-25 21:19:15 +03:00
"safe-add really adds")
2017-11-16 23:19:39 +03:00
(assert-equal test
true
(safe-add 1000000000 2000000000 &i)
2017-11-25 21:19:15 +03:00
"safe-add is true with overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
false
(safe-sub 1 2 &i)
2017-11-25 21:19:15 +03:00
"safe-sub is false without overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
-1
(return-res-int safe-sub 1 2)
2017-11-25 21:19:15 +03:00
"safe-sub really subs")
2017-11-16 23:19:39 +03:00
(assert-equal test
true
(safe-sub -1000000000 2000000000 &i)
2017-11-25 21:19:15 +03:00
"safe-sub is true with overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
false
(safe-mul 1 2 &i)
2017-11-25 21:19:15 +03:00
"safe-mul is false without overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
4
(return-res-int safe-mul 2 2)
2017-11-25 21:19:15 +03:00
"safe-mul really muls")
2017-11-16 23:19:39 +03:00
(assert-equal test
true
(safe-mul 1000000000 2000000000 &i)
2017-11-25 21:19:15 +03:00
"safe-mul is true with overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
false
(safe-add 1l 2l &l)
2017-11-25 21:19:15 +03:00
"safe-add is false without overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
3l
(return-res-long safe-add 1l 2l)
2017-11-25 21:19:15 +03:00
"safe-add really adds")
2017-11-16 23:19:39 +03:00
(assert-equal test
true
(safe-add 9000000000000000000l 2000000000000000000l &l)
2017-11-25 21:19:15 +03:00
"safe-add is true with overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
false
(safe-sub 1l 2l &l)
2017-11-25 21:19:15 +03:00
"safe-sub is false without overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
-1l
(return-res-long safe-sub 1l 2l)
2017-11-25 21:19:15 +03:00
"safe-sub really subs")
2017-11-16 23:19:39 +03:00
(assert-equal test
true
(safe-sub 9000000000000000000l -2000000000000000000l &l)
2017-11-25 21:19:15 +03:00
"safe-sub is true with overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
false
(safe-mul 1l 2l &l)
2017-11-25 21:19:15 +03:00
"safe-mul is false without overflow")
2017-11-16 23:19:39 +03:00
(assert-equal test
4l
(return-res-long safe-mul 2l 2l)
2017-11-25 21:19:15 +03:00
"safe-mul really muls")
2017-11-16 23:19:39 +03:00
(assert-equal test
true
(safe-mul 9000000000000000000l 2000000000000000000l &l)
2018-09-13 02:10:17 +03:00
"safe-mul is true with overflow")))