Skip to content

Commit 4ba07b3

Browse files
committed
add a functional array test
1 parent 09369f2 commit 4ba07b3

File tree

6 files changed

+624
-1
lines changed

6 files changed

+624
-1
lines changed

jscomp/test/.depend

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ ffi_js_test.cmj : ../stdlib/obj.cmj mt.cmj ../others/js_obj.cmj \
150150
ffi_splice_test.cmj : mt.cmj
151151
ffi_test.cmj : ../runtime/js.cmj
152152
fib.cmj :
153+
flexible_array_test.cmj : ../stdlib/format.cmj ../stdlib/array.cmj
153154
float_array.cmj :
154155
float_of_bits_test.cmj : ../stdlib/printf.cmj mt.cmj ../stdlib/list.cmj \
155156
../stdlib/int64.cmj ../stdlib/int32.cmj ../stdlib/array.cmj
@@ -184,6 +185,7 @@ gpr_858_test.cmj : ../stdlib/list.cmj
184185
gpr_858_unit2_test.cmj :
185186
gpr_904_test.cmj : mt.cmj
186187
gpr_974_test.cmj : ../runtime/js.cmj
188+
gray_code_test.cmj : ../stdlib/bytes.cmj
187189
guide_for_ext.cmj :
188190
hamming_test.cmj : ../stdlib/printf.cmj mt.cmj ../stdlib/lazy.cmj \
189191
../stdlib/int64.cmj ../stdlib/buffer.cmj

jscomp/test/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ OTHERS := literals a test_ari test_export2 test_internalOO test_obj_simple_ffi t
7373
set_gen bal_tree string_set string_set_test \
7474
math_test bal_set_mini gpr_974_test test_cpp\
7575
global_module_alias_test class_fib_open_recursion_test\
76-
topsort_test
76+
topsort_test flexible_array_test\
77+
gray_code_test
7778

7879

7980

jscomp/test/flexible_array_test.js

Lines changed: 361 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,361 @@
1+
'use strict';
2+
3+
var Caml_builtin_exceptions = require("../../lib/js/caml_builtin_exceptions");
4+
var Caml_obj = require("../../lib/js/caml_obj");
5+
var Block = require("../../lib/js/block");
6+
var Curry = require("../../lib/js/curry");
7+
var $$Array = require("../../lib/js/array");
8+
var Format = require("../../lib/js/format");
9+
10+
function sub(_tr, _k) {
11+
while(true) {
12+
var k = _k;
13+
var tr = _tr;
14+
if (tr) {
15+
if (k === 1) {
16+
return tr[0];
17+
}
18+
else {
19+
_k = k / 2 | 0;
20+
if (k % 2) {
21+
_tr = tr[2];
22+
continue ;
23+
24+
}
25+
else {
26+
_tr = tr[1];
27+
continue ;
28+
29+
}
30+
}
31+
}
32+
else {
33+
throw Caml_builtin_exceptions.not_found;
34+
}
35+
};
36+
}
37+
38+
function update(tr, k, w) {
39+
if (tr) {
40+
var r = tr[2];
41+
var l = tr[1];
42+
var v = tr[0];
43+
if (k === 1) {
44+
return /* Br */[
45+
w,
46+
l,
47+
r
48+
];
49+
}
50+
else if (k % 2) {
51+
return /* Br */[
52+
v,
53+
l,
54+
update(r, k / 2 | 0, w)
55+
];
56+
}
57+
else {
58+
return /* Br */[
59+
v,
60+
update(l, k / 2 | 0, w),
61+
r
62+
];
63+
}
64+
}
65+
else if (k === 1) {
66+
return /* Br */[
67+
w,
68+
/* Lf */0,
69+
/* Lf */0
70+
];
71+
}
72+
else {
73+
throw Caml_builtin_exceptions.not_found;
74+
}
75+
}
76+
77+
function $$delete(tr, n) {
78+
if (tr) {
79+
var r = tr[2];
80+
var l = tr[1];
81+
var v = tr[0];
82+
if (n === 1) {
83+
return /* Lf */0;
84+
}
85+
else if (n % 2) {
86+
return /* Br */[
87+
v,
88+
l,
89+
$$delete(r, n / 2 | 0)
90+
];
91+
}
92+
else {
93+
return /* Br */[
94+
v,
95+
$$delete(l, n / 2 | 0),
96+
r
97+
];
98+
}
99+
}
100+
else {
101+
throw Caml_builtin_exceptions.not_found;
102+
}
103+
}
104+
105+
function loext(tr, w) {
106+
if (tr) {
107+
return /* Br */[
108+
w,
109+
loext(tr[2], tr[0]),
110+
tr[1]
111+
];
112+
}
113+
else {
114+
return /* Br */[
115+
w,
116+
/* Lf */0,
117+
/* Lf */0
118+
];
119+
}
120+
}
121+
122+
function lorem(tr) {
123+
if (tr) {
124+
var l = tr[1];
125+
if (l) {
126+
return /* Br */[
127+
l[0],
128+
tr[2],
129+
lorem(l)
130+
];
131+
}
132+
else if (tr[2]) {
133+
throw [
134+
Caml_builtin_exceptions.assert_failure,
135+
[
136+
"flexible_array_test.ml",
137+
66,
138+
9
139+
]
140+
];
141+
}
142+
else {
143+
return /* Lf */0;
144+
}
145+
}
146+
else {
147+
throw Caml_builtin_exceptions.not_found;
148+
}
149+
}
150+
151+
var empty = /* tuple */[
152+
/* Lf */0,
153+
0
154+
];
155+
156+
function length(param) {
157+
return param[1];
158+
}
159+
160+
function get(param, i) {
161+
if (i >= 0 && i < param[1]) {
162+
return sub(param[0], i + 1 | 0);
163+
}
164+
else {
165+
throw [
166+
Caml_builtin_exceptions.invalid_argument,
167+
"Array.get"
168+
];
169+
}
170+
}
171+
172+
function set(param, i, v) {
173+
var k = param[1];
174+
if (i >= 0 && i < k) {
175+
return /* tuple */[
176+
update(param[0], i + 1 | 0, v),
177+
k
178+
];
179+
}
180+
else {
181+
throw [
182+
Caml_builtin_exceptions.invalid_argument,
183+
"Array.set"
184+
];
185+
}
186+
}
187+
188+
function push_front(param, v) {
189+
return /* tuple */[
190+
loext(param[0], v),
191+
param[1] + 1 | 0
192+
];
193+
}
194+
195+
function pop_front(param) {
196+
var k = param[1];
197+
if (k > 0) {
198+
return /* tuple */[
199+
lorem(param[0]),
200+
k - 1 | 0
201+
];
202+
}
203+
else {
204+
throw [
205+
Caml_builtin_exceptions.invalid_argument,
206+
"Array.pop_front"
207+
];
208+
}
209+
}
210+
211+
function push_back(param, v) {
212+
var k = param[1];
213+
return /* tuple */[
214+
update(param[0], k + 1 | 0, v),
215+
k + 1 | 0
216+
];
217+
}
218+
219+
function pop_back(param) {
220+
var k = param[1];
221+
if (k > 0) {
222+
return /* tuple */[
223+
$$delete(param[0], k),
224+
k - 1 | 0
225+
];
226+
}
227+
else {
228+
throw [
229+
Caml_builtin_exceptions.invalid_argument,
230+
"Array.pop_back"
231+
];
232+
}
233+
}
234+
235+
function pp(fmt, s) {
236+
var v = "[ ";
237+
for(var i = 0 ,i_finish = length(s) - 1 | 0; i <= i_finish; ++i){
238+
v = v + (", " + get(s, i));
239+
}
240+
v = v + "]";
241+
return Curry._1(Format.fprintf(fmt, /* Format */[
242+
/* String */Block.__(2, [
243+
/* No_padding */0,
244+
/* End_of_format */0
245+
]),
246+
"%s"
247+
]), v);
248+
}
249+
250+
function filter_from(i, p, s) {
251+
var u = empty;
252+
for(var i$1 = i ,i_finish = length(s) - 1 | 0; i$1 <= i_finish; ++i$1){
253+
var ele = get(s, i$1);
254+
if (Curry._1(p, ele)) {
255+
u = push_back(u, ele);
256+
}
257+
258+
}
259+
return u;
260+
}
261+
262+
function append(a, b) {
263+
var empty$1 = empty;
264+
for(var i = 0 ,i_finish = length(a) - 1 | 0; i <= i_finish; ++i){
265+
empty$1 = push_back(empty$1, get(a, i));
266+
}
267+
for(var i$1 = 0 ,i_finish$1 = length(b) - 1 | 0; i$1 <= i_finish$1; ++i$1){
268+
empty$1 = push_back(empty$1, get(b, i$1));
269+
}
270+
return empty$1;
271+
}
272+
273+
function sort(s) {
274+
var size = length(s);
275+
if (size <= 1) {
276+
return s;
277+
}
278+
else {
279+
var head = get(s, 0);
280+
var larger = sort(filter_from(1, function (x) {
281+
return Caml_obj.caml_greaterthan(x, head);
282+
}, s));
283+
var smaller = sort(filter_from(1, function (x) {
284+
return Caml_obj.caml_lessequal(x, head);
285+
}, s));
286+
return append(smaller, push_front(larger, head));
287+
}
288+
}
289+
290+
function of_array(arr) {
291+
var v = empty;
292+
for(var i = 0 ,i_finish = arr.length - 1 | 0; i <= i_finish; ++i){
293+
v = push_back(v, arr[i]);
294+
}
295+
return v;
296+
}
297+
298+
var equal = Caml_obj.caml_equal;
299+
300+
var Int_array = /* module */[
301+
/* empty */empty,
302+
/* get */get,
303+
/* set */set,
304+
/* push_front */push_front,
305+
/* pop_front */pop_front,
306+
/* push_back */push_back,
307+
/* pop_back */pop_back,
308+
/* pp */pp,
309+
/* append */append,
310+
/* sort */sort,
311+
/* of_array */of_array,
312+
/* equal */equal
313+
];
314+
315+
function $eq$tilde(x, y) {
316+
return Caml_obj.caml_equal(x, of_array(y));
317+
}
318+
319+
var u = of_array(/* array */[
320+
1,
321+
2,
322+
2,
323+
5,
324+
3,
325+
6
326+
]);
327+
328+
if (!$eq$tilde(sort(u), /* array */[
329+
1,
330+
2,
331+
2,
332+
3,
333+
5,
334+
6
335+
])) {
336+
throw [
337+
Caml_builtin_exceptions.assert_failure,
338+
[
339+
"flexible_array_test.ml",
340+
166,
341+
4
342+
]
343+
];
344+
}
345+
346+
var v = $$Array.init(500, function (i) {
347+
return 500 - i | 0;
348+
});
349+
350+
$eq$tilde(sort(of_array(v)), $$Array.init(500, function (i) {
351+
return i + 1 | 0;
352+
}));
353+
354+
exports.sub = sub;
355+
exports.update = update;
356+
exports.$$delete = $$delete;
357+
exports.loext = loext;
358+
exports.lorem = lorem;
359+
exports.Int_array = Int_array;
360+
exports.$eq$tilde = $eq$tilde;
361+
/* u Not a pure module */

0 commit comments

Comments
 (0)