1 functor Test (I
: INTEGER
) =
3 fun foreach (l
, f
) = List.app f l
5 val m
= concat
["Int", Int.toString (valOf I
.precision
)]
7 val _
= print (concat
["Testing ", m
, "\n"])
11 I
.- (valOf I
.maxInt
, I
.fromInt
1)]
14 case SOME (I
.fromInt i
) handle Overflow
=> NONE
of
18 [100, 10, 5, 2, 1, 0, ~
1, ~
2, ~
5, ~
10, ~
100])
19 @
[I
.+ (I
.fromInt
1, valOf I
.minInt
),
22 fun err msg
= print (concat
[m
, ": ", concat msg
, "\n"])
24 datatype z
= datatype StringCvt.radix
29 ([("toString", I
.toString
, LargeInt
.toString
),
30 ("fmt BIN", I
.fmt BIN
, LargeInt
.fmt BIN
),
31 ("fmt OCT", I
.fmt OCT
, LargeInt
.fmt OCT
),
32 ("fmt DEC", I
.fmt DEC
, LargeInt
.fmt DEC
),
33 ("fmt HEX", I
.fmt HEX
, LargeInt
.fmt HEX
)],
37 val s
' = f
' (I
.toLarge i
) handle Overflow
=> "Overflow"
41 else err
[name
, " ", s
, " <> ", name
, " ", s
']
53 |
Int i
=> I
.toString i
54 | Overflow
=> "Overflow"
56 fun run (f
: unit
-> I
.int): t
=
58 handle General
.Div
=> Div
59 | General
.Overflow
=> Overflow
61 val equals
: t
* t
-> bool = op =
69 val a2
= Answer
.run (fn () => I
.fromLarge (I
.toLarge i
))
71 if Answer
.equals (a1
, a2
)
73 else err
["fromLarge (toLarge ", I
.toString i
, ") = ",
79 ([("abs", I
.abs
, LargeInt
.abs
),
80 ("~", I
.~
, LargeInt
.~
),
81 ("fromString o toString",
82 valOf
o I
.fromString
o I
.toString
,
83 valOf
o LargeInt
.fromString
o LargeInt
.toString
)],
88 val a
= Answer
.run (fn () => f i
)
89 val a
' = Answer
.run (fn () => I
.fromLarge (f
' (I
.toLarge i
)))
91 if Answer
.equals (a
, a
')
93 else err
[name
, " ", I
.toString i
,
94 " = ", Answer
.toString a
,
95 " <> ", Answer
.toString a
']
102 ([("BIN", BIN
), ("OCT", OCT
), ("DEC", DEC
), ("HEX", HEX
)],
105 val i
' = valOf (StringCvt.scanString (I
.scan r
) (I
.fmt r i
))
109 else err
["scan ", rName
, " ", I
.toString i
, " = ", I
.toString i
']
114 ([("sign", I
.sign
, LargeInt
.sign
),
115 ("toInt", I
.toInt
, LargeInt
.toInt
)],
120 val a
= Answer
.run (fn () => I
.fromInt (f i
))
121 val a
' = Answer
.run (fn () => I
.fromInt (f
' (I
.toLarge i
)))
123 if Answer
.equals (a
, a
')
125 else err
[name
, " ", I
.toString i
,
126 " = ", Answer
.toString a
,
127 " <> ", Answer
.toString a
']
132 ([("+", I
.+, LargeInt
.+),
133 ("-", I
.-, LargeInt
.-),
134 ("*", I
.*, LargeInt
.* ),
135 ("div", I
.div, LargeInt
.div),
136 ("max", I
.max
, LargeInt
.max
),
137 ("min", I
.min
, LargeInt
.min
),
138 ("mod", I
.mod, LargeInt
.mod),
139 ("quot", I
.quot
, LargeInt
.quot
),
140 ("rem", I
.rem
, LargeInt
.rem
)],
142 f
: I
.int * I
.int -> I
.int,
143 f
': LargeInt
.int * LargeInt
.int -> LargeInt
.int) =>
145 (nums
, fn i
: I
.int =>
147 (nums
, fn j
: I
.int =>
149 val a
= Answer
.run (fn () => f (i
, j
))
150 val a
' = Answer
.run (fn () =>
151 I
.fromLarge (f
' (I
.toLarge i
, I
.toLarge j
)))
153 if Answer
.equals (a
, a
')
155 else err
[I
.toString i
, " ", name
, " ", I
.toString j
,
156 " = ", Answer
.toString a
, " <> ", Answer
.toString a
']
161 ([(">", I
.>, LargeInt
.>),
162 (">=", I
.>=, LargeInt
.>=),
163 ("<", I
.<, LargeInt
.<),
164 ("<=", I
.<=, LargeInt
.<=),
165 ("sameSign", I
.sameSign
, LargeInt
.sameSign
)],
168 (nums
, fn i
: I
.int =>
170 (nums
, fn j
: I
.int =>
173 val b
' = f
' (I
.toLarge i
, I
.toLarge j
)
177 else err
[I
.toString i
, " ", name
, " ", I
.toString j
,
178 " = ", Bool.toString b
, " <> ", Bool.toString b
']
183 datatype t
= datatype order
185 val equals
: t
* t
-> bool = op =
189 | GREATER
=> "GREATER"
199 val ord
= I
.compare (i
, j
)
200 val ord
' = LargeInt
.compare (I
.toLarge i
, I
.toLarge j
)
202 if Order
.equals (ord
, ord
')
204 else err
["compare (", I
.toString i
, ", ",
205 I
.toString j
, ") = ",
213 structure S
= Test (Int2
)
214 structure S
= Test (Int3
)
215 structure S
= Test (Int4
)
216 structure S
= Test (Int7
)
217 structure S
= Test (Int8
)
218 structure S
= Test (Int9
)
219 structure S
= Test (Int13
)
220 structure S
= Test (Int16
)
221 structure S
= Test (Int17
)
222 structure S
= Test (Int20
)
223 structure S
= Test (Int25
)
224 structure S
= Test (Int30
)
225 structure S
= Test (Int31
)
226 structure S
= Test (Int32
)
227 structure S
= Test (Int64
)