9
testing_function "add_num";;
12
eq_num (add_num (Int 1) (Int 3), Int 4);;
14
eq_num (add_num (Int 1) (Big_int (big_int_of_int 3)), Int 4);;
16
eq_num (add_num (Int 1) (Ratio (ratio_of_string "3/4")),
17
Ratio (ratio_of_string "7/4"));;
19
eq_num (add_num (Big_int (big_int_of_int 1)) (Ratio (ratio_of_string "3/4")),
20
Ratio (ratio_of_string "7/4"));;
22
eq_num (add_num (Big_int (big_int_of_int 1)) (Big_int (big_int_of_int 3)),
25
eq_num (add_num (Big_int (big_int_of_int 1)) (Ratio (ratio_of_string "3/4")),
26
Ratio (ratio_of_string "7/4"));;
28
eq_num (add_num (Ratio (ratio_of_string "2/3")) (Ratio (ratio_of_string "3/4")),
29
Ratio (ratio_of_string "17/12"));;
31
eq_num (add_num (Int least_int) (Int 1),
32
Int (- (pred biggest_int)));;
34
eq_num (add_num (Int biggest_int) (Int 1),
35
Big_int (minus_big_int (pred_big_int (big_int_of_int least_int))));;
37
testing_function "sub_num";;
40
eq_num (sub_num (Int 1) (Int 3), Int (-2));;
42
eq_num (sub_num (Int 1) (Big_int (big_int_of_int 3)), Int (-2));;
44
eq_num (sub_num (Int 1) (Ratio (ratio_of_string "3/4")),
45
Ratio (ratio_of_string "1/4"));;
47
eq_num (sub_num (Big_int (big_int_of_int 1)) (Ratio (ratio_of_string "3/4")),
48
Ratio (ratio_of_string "1/4"));;
50
eq_num (sub_num (Big_int (big_int_of_int 1)) (Big_int (big_int_of_int 3)),
53
eq_num (sub_num (Big_int (big_int_of_int 1)) (Ratio (ratio_of_string "3/4")),
54
Ratio (ratio_of_string "1/4"));;
56
eq_num (sub_num (Ratio (ratio_of_string "2/3")) (Ratio (ratio_of_string "3/4")),
57
Ratio (ratio_of_string "-1/12"));;
59
eq_num (sub_num (Int least_int) (Int (-1)),
60
Int (- (pred biggest_int)));;
62
eq_num (sub_num (Int (-1)) (Int biggest_int), pred_num (Int least_int));;
64
testing_function "mult_num";;
67
eq_num (mult_num (Int 2) (Int 3), Int 6);;
69
eq_num (mult_num (Int 127) (Int (int_of_string "257")),
70
Int (int_of_string "32639"));;
72
eq_num (mult_num (Int 257) (Int (int_of_string "260")),
73
Big_int (big_int_of_string "66820"));;
75
eq_num (mult_num (Int 2) (Big_int (big_int_of_int 3)), Int 6);;
77
eq_num (mult_num (Int 10) (Ratio (ratio_of_string "3/4")),
78
Ratio (ratio_of_string "15/2"));;
80
eq_num (mult_num (Big_int (big_int_of_int 10)) (Ratio (ratio_of_string "3/4")),
81
Ratio (ratio_of_string "15/2"));;
83
eq_num (mult_num (Big_int (big_int_of_int 2)) (Big_int (big_int_of_int 3)),
86
eq_num (mult_num (Big_int (big_int_of_int 10)) (Ratio (ratio_of_string "3/4")),
87
Ratio (ratio_of_string "15/2"));;
89
eq_num (mult_num (Ratio (ratio_of_string "2/3")) (Ratio (ratio_of_string "3/4"))
90
, Ratio (ratio_of_string "1/2"));;
92
testing_function "div_num";;
95
eq_num (div_num (Int 6) (Int 3), Int 2);;
97
eq_num (div_num (Int (int_of_string "32639"))
98
(Int (int_of_string "257")), Int 127);;
100
eq_num (div_num (Big_int (big_int_of_string "66820"))
101
(Int (int_of_string "257")),
104
eq_num (div_num (Int 6) (Big_int (big_int_of_int 3)), Int 2);;
106
eq_num (div_num (Ratio (ratio_of_string "15/2"))
108
Ratio (ratio_of_string "3/4"));;
110
eq_num (div_num (Big_int (big_int_of_int 6)) (Big_int (big_int_of_int 3)),
113
eq_num (div_num (Ratio (ratio_of_string "15/2"))
114
(Big_int (big_int_of_int 10)),
115
Ratio (ratio_of_string "3/4"));;
117
eq_num (div_num (Ratio (ratio_of_string "15/2"))
118
(Ratio (ratio_of_string "3/4")),
119
Big_int (big_int_of_int 10));;
121
eq_num (div_num (Ratio (ratio_of_string "1/2"))
122
(Ratio (ratio_of_string "3/4")),
123
Ratio (ratio_of_string "2/3"));;
125
testing_function "is_integer_num";;
128
eq (is_integer_num (Int 3),true);;
130
eq (is_integer_num (Big_int (big_int_of_string "1234567890")),true);;
132
eq (not (is_integer_num (Ratio (ratio_of_string "1/2"))),true);;
134
eq (is_integer_num (Ratio (ratio_of_string "1073774590/32770")),true);;
136
testing_function "num_of_ratio";;
139
eq_num (num_of_ratio (ratio_of_string "4/2"), Int 2);;
141
eq_num (num_of_ratio (ratio_of_string "11811160075/11"),
142
Big_int (big_int_of_string "1073741825"));;
144
eq_num (num_of_ratio (ratio_of_string "123456789012/1234"),
145
Ratio (ratio_of_string "61728394506/617"));;
147
testing_function "num_of_string";;
150
eq_num (num_of_string "123/3456", Ratio (ratio_of_string "123/3456"));;
153
eq_num (num_of_string "12.3/34.56", Ratio (ratio_of_string "1230/3456"));;
155
eq_num (num_of_string "1.23/325.6", Ratio (ratio_of_string "123/32560"));;
157
eq_num (num_of_string "12.3/345.6", Ratio (ratio_of_string "123/3456"));;
158
set_error_when_null_denominator false;;
160
eq_num (num_of_string "12.3/0.0", Ratio (ratio_of_string "123/0"));;
162
eq_num (num_of_string "0/0", Ratio (ratio_of_string "0/0"));;
163
set_error_when_null_denominator true;;
166
eq_num (num_of_string "1234567890",
167
Big_int (big_int_of_string "1234567890"));;
169
eq_num (num_of_string "12345", Int (int_of_string "12345"));;
172
eq_num (num_of_string "0.23", Ratio (ratio_of_string "23/100"));;
174
eq_num (num_of_string "0.23", Ratio (ratio_of_string "0.23/1"));;
178
num_of_string ("frlshjkurty") (Failure "num_of_string");;
182
testing_function "immediate numbers";;
184
standard arith false;;
187
test 0 eq_string (string_of_num x, "1/2");;
189
let y = 12345678901 in
190
test 1 eq_string (string_of_num y, "12345678901");;
191
testing_function "immediate numbers";;
194
test 0 eq_string (string_of_num x, "1/2");;
196
let y = 12345678901 in
197
test 1 eq_string (string_of_num y, "12345678901");;
199
testing_function "pattern_matching on nums";;
201
let f1 = function 0 -> true | _ -> false;;
203
test 1 eq (f1 0, true);;
205
test 2 eq (f1 1, false);;
207
test 3 eq (f1 (0/1), true);;
209
test 4 eq (f1 (let n = num_of_string "2000000000000000000000000" in n-n) ,
212
test 5 eq (f1 (let n = num_of_string "2000000000000000000000000" in n/n-1) ,
215
test 6 eq (f1 (let n = num_of_string "2000000000000000000000000" in n+1) ,
218
test 7 eq (f1 (1/2), false);;