@@ -59,4 +59,96 @@ let%expect_test _ =
59
59
[% expect {|
60
60
found
61
61
found
62
- | }]
62
+ | }]
63
+
64
+ let copy_eq a b =
65
+ if a == b
66
+ then false
67
+ else
68
+ let a = Obj. repr a in
69
+ let b = Obj. repr b in
70
+ if Obj. size a <> Obj. size b || Obj. tag a <> Obj. tag b
71
+ then false
72
+ else
73
+ let exception False in
74
+ try
75
+ for i = 0 to Obj. size a - 1 do
76
+ if Obj. field a i != Obj. field b i then raise False
77
+ done;
78
+ true
79
+ with False -> false
80
+
81
+ let bool x = Printf. printf " %b" x
82
+
83
+ let % expect_test _ =
84
+ let module E = Obj. Ephemeron in
85
+ let ki = Obj. repr None in
86
+ let k1 = Obj. repr (Some 2 ) in
87
+ let k2 = Obj. repr (Some 43 ) in
88
+ let e = E. create 10 in
89
+ let e2 = E. create 3 in
90
+ Printf. printf " %d\n " (E. length e);
91
+ [% expect {| 10 | }];
92
+ E. set_key e 1 ki;
93
+ E. set_key e 2 k1;
94
+ E. set_key e 3 k2;
95
+ bool (Option. get (E. get_key e 2 ) == k1);
96
+ [% expect {| true | }];
97
+ bool (Option. get (E. get_key_copy e 2 ) == k1);
98
+ [% expect {| false | }];
99
+ bool (copy_eq (Option. get (E. get_key_copy e 2 )) k1);
100
+ [% expect {| true | }];
101
+ bool (Option. get (E. get_key e 1 ) == ki);
102
+ [% expect {| true | }];
103
+ bool (Option. get (E. get_key_copy e 1 ) == ki);
104
+ [% expect {| true | }];
105
+ bool (copy_eq (Option. get (E. get_key_copy e 1 )) ki);
106
+ [% expect {| false | }];
107
+ bool (E. check_key e 0 );
108
+ [% expect {| false | }];
109
+ bool (E. check_key e 2 );
110
+ [% expect {| true | }];
111
+ bool (E. check_key e 3 );
112
+ [% expect {| true | }];
113
+ E. unset_key e 3 ;
114
+ bool (E. check_key e 3 );
115
+ [% expect {| false | }];
116
+
117
+ bool (E. check_data e);
118
+ [% expect {| false | }];
119
+ E. set_data e k1;
120
+ bool (E. check_data e);
121
+ [% expect {| true | }];
122
+
123
+ bool (Option. get (E. get_data e) == k1);
124
+ [% expect {| true | }];
125
+ bool (Option. get (E. get_data_copy e) == k1);
126
+ [% expect {| false | }];
127
+ bool (copy_eq (Option. get (E. get_data_copy e)) k1);
128
+ [% expect {| true | }];
129
+
130
+ E. set_data e ki;
131
+ bool (Option. get (E. get_data e) == ki);
132
+ [% expect {| true | }];
133
+ bool (Option. get (E. get_data_copy e) == ki);
134
+ [% expect {| true | }];
135
+ bool (copy_eq (Option. get (E. get_data_copy e)) ki);
136
+ [% expect {| false | }];
137
+
138
+ bool (E. check_data e2);
139
+ [% expect {| false | }];
140
+ E. blit_data e e2;
141
+ bool (E. check_data e2);
142
+ [% expect {| true | }];
143
+
144
+ E. blit_key e 1 e2 0 3 ;
145
+ bool (E. check_key e2 0 );
146
+ [% expect {| true | }];
147
+ bool (E. check_key e2 1 );
148
+ [% expect {| true | }];
149
+ bool (E. check_key e2 2 );
150
+ [% expect {| false | }];
151
+
152
+ E. unset_data e;
153
+ bool (E. check_data e);
154
+ [% expect {| false | }]
0 commit comments