1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
open Tests_defs
open Deriving_Dump
module Test (D : Dump) =
struct
let test v = D.from_string (D.to_string v) = v
end
let sum = begin
let module T = Test (Dump_sum) in
assert (T.test S0);
assert (T.test (S1 max_int));
assert (T.test (S2 (min_int, 1243.2)));
assert (T.test (S2 (min_int, 1243.2)));
assert (T.test (S3 (12, 0.0, true)));
assert (T.test (Sunit ()));
assert (T.test (Stup (1001, 10.01)));
end
let r1 = begin
let module T = Test (Dump_r1) in
assert (T.test {r1_l1 = max_int - 10; r1_l2 = min_int + 10});
end
let intseq = begin
let module T = Test (Dump_intseq) in
assert (T.test INil);
assert (T.test (ICons (10, ICons (20, ICons (30, INil)))));
end
let seq = begin
let module T = Test (Dump_seq (Dump_bool)) in
assert (T.test Nil);
assert (T.test (Cons (true, Cons (false, Cons (true, Nil)))));
end
let uses_seqs = begin
let module T = Test (Dump_uses_seqs) in
assert (T.test (INil, Nil));
assert (T.test (INil, Cons (0.0, Cons(10.0, Nil))));
assert (T.test (ICons (10, ICons(20, INil)), Nil));
assert (T.test (ICons (10, ICons(20, INil)),
Cons (0.0, Cons(10.0, Nil))));
end
let poly1 = begin
let module T = Test (Dump_poly1) in
assert (T.test `T0);
assert (T.test (`T1 (-1231)));
end
let poly2 = begin
let module T = Test (Dump_poly2) in
assert (T.test (P (10, `T1 11, 12.0)));
end
let poly3 = begin
let module T = Test (Dump_poly3) in
assert (T.test `Nil);
assert (T.test (`Cons (1, `Cons (2, `Cons (3, `Nil)))));
end
let poly3b = begin
let module T = Test (Dump_poly3b) in
assert (T.test (10, `Nil, `F));
assert (T.test (0, `Cons (10, `Cons (11, `Cons (12, `Nil))), `F));
end
let poly7 = begin
let module T = Test(Dump_poly7(Dump_bool)) in
let module T' = Test(Dump_poly8(Dump_int)) in
assert (T.test (Foo (`F true)));
assert (T.test (Foo (`F false)));
assert (T'.test {x = `G (`H (`I (Foo (`F (max_int - 1)))))});
assert (T'.test {x = `G (`H (`I (Foo (`F (min_int + 1)))))});
end
let poly10 = begin
let module T = Test (Dump_poly10) in
assert (T.test `F);
assert (T.test `Nil);
assert (T.test (`Cons (12, `Cons (14, `Nil))));
end
let mutrec = begin
let module A = Test (Dump_mutrec_a) in
let module B = Test (Dump_mutrec_b) in
let module C = Test (Dump_mutrec_c) in
let module D = Test (Dump_mutrec_d) in
let a = N in
let b = { l1 = S (3, a); l2 = a } in
let c = S (3, S (4, S (5, N))) in
let d = `T b in
assert (A.test a);
assert (B.test b);
assert (C.test c);
assert (D.test d);
end
let pmutrec = begin
(*
type ('a,'b) pmutrec_a = ('a,'b) pmutrec_c
and ('a,'b) pmutrec_b = { pl1 : ('a,'b) pmutrec_c ; pl2 : ('a,'b) pmutrec_a }
and ('a,'b) pmutrec_c = SS of 'a * ('a,'b) pmutrec_a * 'b
and ('a,'b) pmutrec_d = [`T of ('a,'b) pmutrec_b]
*)
end
let ff1 = begin
let module T = Test(Dump_ff1(Dump_bool)) in
assert (T.test (F (true,false)));
assert (T.test (G 435));
end
let ff2 = begin
let module T = Test(Dump_ff2(Dump_bool)(Dump_int)) in
assert (T.test (F1 (F2 (Nil, 10, None))));
assert (T.test (F1 (F2 (Cons (true, Cons (false, Nil)), 10, Some 14))));
end
let tup0 = begin
let module T = Test (Dump_tup0) in
assert (T.test ());
end
let tup2 = begin
let module T = Test (Dump_tup2) in
assert (T.test (10, 10.0));
assert (T.test (max_int, -10.0));
end
let tup3 = begin
let module T = Test (Dump_tup3) in
assert (T.test (0,12.3,true));
assert (T.test (min_int,-12.3,false));
end
let tup4 = begin
let module T = Test (Dump_tup4) in
assert (T.test (0,0,true,()));
assert (T.test (min_int,max_int,false,()));
end
let t = begin
let module T = Test (Dump_t) in
assert (T.test min_int);
assert (T.test max_int);
assert (T.test 10);
end
let ii =
begin
let module T = Test (Dump_ii) in
assert (T.test
{int32 = 1073741824l ; int64 = 10737418230L ; nativeint = 2n; });
end
let iii =
begin
let module T = Test (Dump_ii') in
assert (T.test
{int32' = 1073741824l ; int64' = 10737418230L ; });
end
|