Skip to content

Commit 28a4824

Browse files
committed
Add partitionU and switch argument order
1 parent 563a18f commit 28a4824

File tree

5 files changed

+30
-21
lines changed

5 files changed

+30
-21
lines changed

jscomp/others/belt_Array.ml

+7-5
Original file line numberDiff line numberDiff line change
@@ -408,15 +408,15 @@ let cmpU a b p =
408408

409409
let cmp a b p = cmpU a b (fun[@bs] a b -> p a b)
410410

411-
let partition f a =
411+
let partitionU a f =
412412
let l = length a in
413413
let i = ref 0 in
414414
let j = ref 0 in
415415
let a1 = makeUninitializedUnsafe l in
416416
let a2 = makeUninitializedUnsafe l in
417417
for ii = 0 to l - 1 do
418418
let v = getUnsafe a ii in
419-
if f v then (
419+
if f v [@bs] then (
420420
setUnsafe a1 !i v;
421421
incr i
422422
)
@@ -429,13 +429,15 @@ let partition f a =
429429
let a2 = slice a2 ~offset:0 ~len:!j in
430430
(a1, a2)
431431

432+
let partition a f = partitionU a (fun [@bs] x -> f x)
433+
432434
let unzip a =
433435
let l = length a in
434-
let a1 = makeUninitializedUnsafe l in
435-
let a2 = makeUninitializedUnsafe l in
436+
let a1 = makeUninitializedUnsafe l in
437+
let a2 = makeUninitializedUnsafe l in
436438
for i = 0 to l - 1 do
437439
let (v1, v2) = getUnsafe a i in
438440
setUnsafe a1 i v1;
439-
setUnsafe a2 i v2
441+
setUnsafe a2 i v2
440442
done;
441443
(a1, a2)

jscomp/others/belt_Array.mli

+5-3
Original file line numberDiff line numberDiff line change
@@ -412,12 +412,14 @@ val mapWithIndex: 'a array -> (int -> 'a -> 'b ) -> 'b array
412412
]}
413413
*)
414414

415-
val partition : ('a -> bool) -> 'a array -> 'a array * 'a array
415+
416+
val partitionU : 'a array -> ('a -> bool [@bs]) -> 'a array * 'a array
417+
val partition : 'a array -> ('a -> bool) -> 'a array * 'a array
416418
(** [partition f a] split array into tuple of two arrays based on predicate f; first of tuple where predicate vause true, second where predicate cause false
417419
418420
@example {[
419-
predicate (fun x -> if x mod 2 = 0) [|1;2;3;4;5|] = ([|2;4|], [|1;2;3|]);;
420-
predicate (fun x -> if x mod 2 <> 0) [|1;2;3;4;5|] = ([|1;2;3|], [|2;4|]);;
421+
predicate [|1;2;3;4;5|] (fun x -> if x mod 2 = 0) = ([|2;4|], [|1;2;3|]);;
422+
predicate [|1;2;3;4;5|] (fun x -> if x mod 2 <> 0) = ([|1;2;3|], [|2;4|]);;
421423
]}
422424
*)
423425

jscomp/test/bs_array_test.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -568,9 +568,9 @@ var a$2 = /* array */[
568568
5
569569
];
570570

571-
var match = Belt_Array.partition((function (x) {
571+
var match = Belt_Array.partition(a$2, (function (x) {
572572
return x % 2 === 0;
573-
}), a$2);
573+
}));
574574

575575
eq("File \"bs_array_test.ml\", line 153, characters 5-12", match[0], /* array */[
576576
2,
@@ -583,9 +583,9 @@ eq("File \"bs_array_test.ml\", line 154, characters 5-12", match[1], /* array */
583583
5
584584
]);
585585

586-
var match$1 = Belt_Array.partition((function (x) {
586+
var match$1 = Belt_Array.partition(a$2, (function (x) {
587587
return x === 2;
588-
}), a$2);
588+
}));
589589

590590
eq("File \"bs_array_test.ml\", line 156, characters 5-12", match$1[0], /* array */[2]);
591591

@@ -596,9 +596,9 @@ eq("File \"bs_array_test.ml\", line 157, characters 5-12", match$1[1], /* array
596596
5
597597
]);
598598

599-
var match$2 = Belt_Array.partition((function () {
599+
var match$2 = Belt_Array.partition(/* array */[], (function () {
600600
return false;
601-
}), /* array */[]);
601+
}));
602602

603603
eq("File \"bs_array_test.ml\", line 159, characters 5-12", match$2[0], /* array */[]);
604604

jscomp/test/bs_array_test.ml

+3-3
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,13 @@ let () =
149149

150150
let () =
151151
let a = [|1;2;3;4;5|] in
152-
let (v0, v1) = A.partition (fun x -> x mod 2 = 0) a in
152+
let (v0, v1) = A.partition a (fun x -> x mod 2 = 0) in
153153
eq __LOC__ v0 [|2;4|];
154154
eq __LOC__ v1 [|1;3;5|];
155-
let (v0, v1) = A.partition (fun x -> x = 2) a in
155+
let (v0, v1) = A.partition a (fun x -> x = 2) in
156156
eq __LOC__ v0 [|2|];
157157
eq __LOC__ v1 [|1;3;4;5|];
158-
let (v0, v1) = A.partition (fun x -> false) [||] in
158+
let (v0, v1) = A.partition [||] (fun x -> false) in
159159
eq __LOC__ v0 [||];
160160
eq __LOC__ v1 [||]
161161

lib/js/belt_Array.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ function get(arr, i) {
1414

1515
function getExn(arr, i) {
1616
if (!(i >= 0 && i < arr.length)) {
17-
throw new Error("File \"belt_Array.ml\", line 25, characters 6-12");
17+
throw new Error("File \"belt_Array.ml\", line 24, characters 4-10");
1818
}
1919
return arr[i];
2020
}
@@ -30,7 +30,7 @@ function set(arr, i, v) {
3030

3131
function setExn(arr, i, v) {
3232
if (!(i >= 0 && i < arr.length)) {
33-
throw new Error("File \"belt_Array.ml\", line 31, characters 4-10");
33+
throw new Error("File \"belt_Array.ml\", line 29, characters 24-30");
3434
}
3535
arr[i] = v;
3636
return /* () */0;
@@ -541,15 +541,15 @@ function cmp(a, b, p) {
541541
return cmpU(a, b, Curry.__2(p));
542542
}
543543

544-
function partition(f, a) {
544+
function partitionU(a, f) {
545545
var l = a.length;
546546
var i = 0;
547547
var j = 0;
548548
var a1 = new Array(l);
549549
var a2 = new Array(l);
550550
for(var ii = 0 ,ii_finish = l - 1 | 0; ii <= ii_finish; ++ii){
551551
var v = a[ii];
552-
if (Curry._1(f, v)) {
552+
if (f(v)) {
553553
a1[i] = v;
554554
i = i + 1 | 0;
555555
} else {
@@ -565,6 +565,10 @@ function partition(f, a) {
565565
];
566566
}
567567

568+
function partition(a, f) {
569+
return partitionU(a, Curry.__1(f));
570+
}
571+
568572
function unzip(a) {
569573
var l = a.length;
570574
var a1 = new Array(l);
@@ -617,6 +621,7 @@ exports.forEachWithIndexU = forEachWithIndexU;
617621
exports.forEachWithIndex = forEachWithIndex;
618622
exports.mapWithIndexU = mapWithIndexU;
619623
exports.mapWithIndex = mapWithIndex;
624+
exports.partitionU = partitionU;
620625
exports.partition = partition;
621626
exports.reduceU = reduceU;
622627
exports.reduce = reduce;

0 commit comments

Comments
 (0)