Skip to content

Commit

Permalink
!125 Add tests for integer multiply operation in (liii base)
Browse files Browse the repository at this point in the history
  • Loading branch information
Asa Hibari authored and da-liii committed Jan 23, 2025
1 parent d86612c commit 03b6336
Show file tree
Hide file tree
Showing 2 changed files with 318 additions and 1 deletion.
226 changes: 225 additions & 1 deletion GoldfishScheme.tmu
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<TMU|<tuple|1.1.0|2025.0.0>>
<TMU|<tuple|1.0.5|1.2.9.7>>

<style|<tuple|book|chinese|literate|goldfish|reduced-margins|guile|smart-ref|preview-ref|python|elvish>>

Expand Down Expand Up @@ -2219,6 +2219,230 @@
\;
</scm-chunk>

测试整数与0进行*运算,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* 0 0) =\<gtr\> 0)

(check (* 0 -1) =\<gtr\> 0)

(check (* 0 1) =\<gtr\> 0)

(check (* 0 2147483647) =\<gtr\> 0)

(check (* 0 -2147483648) =\<gtr\> 0)

(check (* 0 2147483648) =\<gtr\> 0)

(check (* 0 -2147483649) =\<gtr\> 0)

(check (* 0 9223372036854775807) =\<gtr\> 0)

(check (* 0 -9223372036854775808) =\<gtr\> 0)

(check (* 0 -9223372036854775809) =\<gtr\> 0)

\;
</scm-chunk>

测试整数与1进行*运算,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* 1 0) =\<gtr\> 0)

(check (* 1 -1) =\<gtr\> -1)

(check (* 1 1) =\<gtr\> 1)

(check (* 1 2147483647) =\<gtr\> 2147483647)

(check (* 1 -2147483648) =\<gtr\> -2147483648)

(check (* 1 2147483648) =\<gtr\> 2147483648)

(check (* 1 -2147483649) =\<gtr\> -2147483649)

(check (* 1 9223372036854775807) =\<gtr\> 9223372036854775807)

(check (* 1 -9223372036854775808) =\<gtr\> -9223372036854775808)

(check (* 1 9223372036854775807) =\<gtr\> 9223372036854775807)

\;
</scm-chunk>

测试整数与-1进行*运算,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* -1 0) =\<gtr\> 0)

(check (* -1 -1) =\<gtr\> 1)

(check (* -1 1) =\<gtr\> -1)

(check (* -1 2147483647) =\<gtr\> -2147483647)

(check (* -1 -2147483648) =\<gtr\> 2147483648)

(check (* -1 2147483648) =\<gtr\> -2147483648)

(check (* -1 -2147483649) =\<gtr\> 2147483649)

(check (* -1 9223372036854775807) =\<gtr\> -9223372036854775807)

(check (* -1 -9223372036854775808) =\<gtr\> -9223372036854775808)

(check (* -1 9223372036854775807) =\<gtr\> -9223372036854775807)

\;
</scm-chunk>

测试整数的正32位边界进行*运算的情况,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* 2147483647 0) =\<gtr\> 0)

(check (* 2147483647 -1) =\<gtr\> -2147483647)

(check (* 2147483647 1) =\<gtr\> 2147483647)

(check (* 2147483647 2147483647) =\<gtr\> 4611686014132420609)

(check (* 2147483647 -2147483648) =\<gtr\> -4611686016279904256)

(check (* 2147483647 2147483648) =\<gtr\> 4611686016279904256)

(check (* 2147483647 -2147483649) =\<gtr\> -4611686018427387903)

(check (* 2147483647 9223372036854775807) =\<gtr\> 9223372034707292161)

(check (* 2147483647 -9223372036854775808) =\<gtr\> -9223372036854775808)

\;
</scm-chunk>

测试整数的负32位边界进行*运算的情况,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* -2147483648 0) =\<gtr\> 0)

(check (* -2147483648 -1) =\<gtr\> 2147483648)

(check (* -2147483648 1) =\<gtr\> -2147483648)

(check (* -2147483648 2147483647) =\<gtr\> -4611686016279904256)

(check (* -2147483648 -2147483648) =\<gtr\> 4611686018427387904)

(check (* -2147483648 2147483648) =\<gtr\> -4611686018427387904)

(check (* -2147483648 -2147483649) =\<gtr\> 4611686020574871552)

(check (* -2147483648 9223372036854775807) =\<gtr\> 2147483648)

(check (* -2147483648 -9223372036854775808) =\<gtr\> 0)

\;
</scm-chunk>

测试整数的正32位边界+1进行*运算的情况,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* 2147483648 0) =\<gtr\> 0)

(check (* 2147483648 -1) =\<gtr\> -2147483648)

(check (* 2147483648 1) =\<gtr\> 2147483648)

(check (* 2147483648 2147483647) =\<gtr\> 4611686016279904256)

(check (* 2147483648 -2147483648) =\<gtr\> -4611686018427387904)

(check (* 2147483648 2147483648) =\<gtr\> 4611686018427387904)

(check (* 2147483648 -2147483649) =\<gtr\> -4611686020574871552)

(check (* 2147483648 9223372036854775807) =\<gtr\> -2147483648)

(check (* 2147483648 -9223372036854775808) =\<gtr\> 0)

\;
</scm-chunk>

测试整数的正32位边界-1进行*运算的情况,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* -2147483649 0) =\<gtr\> 0)

(check (* -2147483649 -1) =\<gtr\> 2147483649)

(check (* -2147483649 1) =\<gtr\> -2147483649)

(check (* -2147483649 2147483647) =\<gtr\> -4611686018427387903)

(check (* -2147483649 -2147483648) =\<gtr\> 4611686020574871552)

(check (* -2147483649 2147483648) =\<gtr\> -4611686020574871552)

(check (* -2147483649 -2147483649) =\<gtr\> 4611686022722355201)

(check (* -2147483649 9223372036854775807) =\<gtr\> -9223372034707292159)

(check (* -2147483649 -9223372036854775808) =\<gtr\> -9223372036854775808)

\;
</scm-chunk>

测试整数的正64位边界进行*运算的溢出情况,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* 9223372036854775807 0) =\<gtr\> 0)

(check (* 9223372036854775807 -1) =\<gtr\> -9223372036854775807)

(check (* 9223372036854775807 1) =\<gtr\> 9223372036854775807)

(check (* 9223372036854775807 2147483647) =\<gtr\> 9223372034707292161)

(check (* 9223372036854775807 -2147483648) =\<gtr\> 2147483648)

(check (* 9223372036854775807 2147483648) =\<gtr\> -2147483648)

(check (* 9223372036854775807 -2147483649) =\<gtr\> -9223372034707292159)

(check (* 9223372036854775807 9223372036854775807) =\<gtr\> 1)

(check (* 9223372036854775807 -9223372036854775808) =\<gtr\> -9223372036854775808)

\;
</scm-chunk>

测试整数的负64位边界进行*运算的溢出情况,乘数包括0,1,-1及32位边界与64位边界。

<\scm-chunk|tests/goldfish/liii/base-test.scm|true|true>
(check (* -9223372036854775808 0) =\<gtr\> 0)

(check (* -9223372036854775808 -1) =\<gtr\> -9223372036854775808)

(check (* -9223372036854775808 1) =\<gtr\> -9223372036854775808)

(check (* -9223372036854775808 2147483647) =\<gtr\> -9223372036854775808)

(check (* -9223372036854775808 -2147483648) =\<gtr\> 0)

(check (* -9223372036854775808 2147483648) =\<gtr\> 0)

(check (* -9223372036854775808 -2147483649) =\<gtr\> -9223372036854775808)

(check (* -9223372036854775808 9223372036854775807) =\<gtr\> -9223372036854775808)

(check (* -9223372036854775808 -9223372036854775808) =\<gtr\> 0)

\;
</scm-chunk>

\;

<value|r7rs><paragraph|floor><index|floor><scm|(x) =\<gtr\> integer>

返回最大的不大于<math|x>的整数。如果<math|x>是准确值,那么返回值也是准确值,如果<math|x>不是准确值,那么返回值也不是准确值。
Expand Down
93 changes: 93 additions & 0 deletions tests/goldfish/liii/base-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,99 @@
(check (+ #x7fffffffffffffff 1) => #x8000000000000000)
(check (- #x8000000000000000 1) => #x7fffffffffffffff)

(check (* 0 0) => 0)
(check (* 0 -1) => 0)
(check (* 0 1) => 0)
(check (* 0 2147483647) => 0)
(check (* 0 -2147483648) => 0)
(check (* 0 2147483648) => 0)
(check (* 0 -2147483649) => 0)
(check (* 0 9223372036854775807) => 0)
(check (* 0 -9223372036854775808) => 0)
(check (* 0 -9223372036854775809) => 0)

(check (* 1 0) => 0)
(check (* 1 -1) => -1)
(check (* 1 1) => 1)
(check (* 1 2147483647) => 2147483647)
(check (* 1 -2147483648) => -2147483648)
(check (* 1 2147483648) => 2147483648)
(check (* 1 -2147483649) => -2147483649)
(check (* 1 9223372036854775807) => 9223372036854775807)
(check (* 1 -9223372036854775808) => -9223372036854775808)
(check (* 1 9223372036854775807) => 9223372036854775807)

(check (* -1 0) => 0)
(check (* -1 -1) => 1)
(check (* -1 1) => -1)
(check (* -1 2147483647) => -2147483647)
(check (* -1 -2147483648) => 2147483648)
(check (* -1 2147483648) => -2147483648)
(check (* -1 -2147483649) => 2147483649)
(check (* -1 9223372036854775807) => -9223372036854775807)
(check (* -1 -9223372036854775808) => -9223372036854775808)
(check (* -1 9223372036854775807) => -9223372036854775807)

(check (* 2147483647 0) => 0)
(check (* 2147483647 -1) => -2147483647)
(check (* 2147483647 1) => 2147483647)
(check (* 2147483647 2147483647) => 4611686014132420609)
(check (* 2147483647 -2147483648) => -4611686016279904256)
(check (* 2147483647 2147483648) => 4611686016279904256)
(check (* 2147483647 -2147483649) => -4611686018427387903)
(check (* 2147483647 9223372036854775807) => 9223372034707292161)
(check (* 2147483647 -9223372036854775808) => -9223372036854775808)

(check (* -2147483648 0) => 0)
(check (* -2147483648 -1) => 2147483648)
(check (* -2147483648 1) => -2147483648)
(check (* -2147483648 2147483647) => -4611686016279904256)
(check (* -2147483648 -2147483648) => 4611686018427387904)
(check (* -2147483648 2147483648) => -4611686018427387904)
(check (* -2147483648 -2147483649) => 4611686020574871552)
(check (* -2147483648 9223372036854775807) => 2147483648)
(check (* -2147483648 -9223372036854775808) => 0)

(check (* 2147483648 0) => 0)
(check (* 2147483648 -1) => -2147483648)
(check (* 2147483648 1) => 2147483648)
(check (* 2147483648 2147483647) => 4611686016279904256)
(check (* 2147483648 -2147483648) => -4611686018427387904)
(check (* 2147483648 2147483648) => 4611686018427387904)
(check (* 2147483648 -2147483649) => -4611686020574871552)
(check (* 2147483648 9223372036854775807) => -2147483648)
(check (* 2147483648 -9223372036854775808) => 0)

(check (* -2147483649 0) => 0)
(check (* -2147483649 -1) => 2147483649)
(check (* -2147483649 1) => -2147483649)
(check (* -2147483649 2147483647) => -4611686018427387903)
(check (* -2147483649 -2147483648) => 4611686020574871552)
(check (* -2147483649 2147483648) => -4611686020574871552)
(check (* -2147483649 -2147483649) => 4611686022722355201)
(check (* -2147483649 9223372036854775807) => -9223372034707292159)
(check (* -2147483649 -9223372036854775808) => -9223372036854775808)

(check (* 9223372036854775807 0) => 0)
(check (* 9223372036854775807 -1) => -9223372036854775807)
(check (* 9223372036854775807 1) => 9223372036854775807)
(check (* 9223372036854775807 2147483647) => 9223372034707292161)
(check (* 9223372036854775807 -2147483648) => 2147483648)
(check (* 9223372036854775807 2147483648) => -2147483648)
(check (* 9223372036854775807 -2147483649) => -9223372034707292159)
(check (* 9223372036854775807 9223372036854775807) => 1)
(check (* 9223372036854775807 -9223372036854775808) => -9223372036854775808)

(check (* -9223372036854775808 0) => 0)
(check (* -9223372036854775808 -1) => -9223372036854775808)
(check (* -9223372036854775808 1) => -9223372036854775808)
(check (* -9223372036854775808 2147483647) => -9223372036854775808)
(check (* -9223372036854775808 -2147483648) => 0)
(check (* -9223372036854775808 2147483648) => 0)
(check (* -9223372036854775808 -2147483649) => -9223372036854775808)
(check (* -9223372036854775808 9223372036854775807) => -9223372036854775808)
(check (* -9223372036854775808 -9223372036854775808) => 0)

(check (floor 1.1) => 1.0)
(check (floor 1) => 1)
(check (floor 1/2) => 0)
Expand Down

0 comments on commit 03b6336

Please sign in to comment.