-
Notifications
You must be signed in to change notification settings - Fork 63
/
findIndex.spec.ts
75 lines (67 loc) · 2.4 KB
/
findIndex.spec.ts
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
import { filter, findIndex, fx, map, pipe, toAsync } from "../src";
import { AsyncFunctionException } from "../src/_internal/error";
import type Arrow from "../src/types/Arrow";
describe("findIndex", function () {
describe("sync", function () {
it.each([
[(a: string) => a === "r", "marpple", 2],
[(a: number) => a === 2, [1, 2, 3, 4], 1],
[(a: number) => a === 5, [1, 2, 3, 4], -1],
])(
`should return result when passed arguments are synchronous function and 'Iterable'`,
(f, iterable, result) => {
expect(findIndex(f as Arrow, iterable)).toEqual(result);
},
);
it("should be able to be used as a curried function in the pipeline", function () {
const res1 = pipe(
[1, 2, 3, 4],
map((a) => a + 10),
filter((a) => a % 2 === 0),
findIndex((a) => a === 14),
);
expect(res1).toEqual(1);
});
it("should be able to be used as a chaining method in the `fx`", function () {
const res1 = fx([1, 2, 3, 4])
.map((a) => a + 10)
.filter((a) => a % 2 === 0)
.findIndex((a) => a === 14);
expect(res1).toEqual(1);
});
it("should throw an error when the callback is asynchronous", function () {
const res = () =>
pipe(
[1, 2, 3, 4],
map((a) => a + 10),
filter((a) => a % 2 === 0),
findIndex((a) => Promise.resolve(a === 14)),
);
expect(res).toThrowError(new AsyncFunctionException());
});
});
describe("async", function () {
it("should findIndex out the result by the callback to given 'AsyncIterable'", async function () {
const res1 = await findIndex((a) => a === 5, toAsync([1, 2, 3, 4, 5, 6]));
expect(res1).toEqual(4);
const res2 = await findIndex((a) => a === 7, toAsync([1, 2, 3, 4, 5, 6]));
expect(res2).toEqual(-1);
});
});
it("should be able to be used as a curried function in the pipeline", async function () {
const res1 = await pipe(
toAsync([1, 2, 3, 4]),
map((a) => a + 10),
filter((a) => a % 2 === 0),
findIndex((a) => a === 14),
);
expect(res1).toEqual(1);
});
it("should be able to be used as a chaining method in the `fx`", async function () {
const res1 = await fx(toAsync([1, 2, 3, 4]))
.map((a) => a + 10)
.filter((a) => a % 2 === 0)
.findIndex((a) => a === 14);
expect(res1).toEqual(1);
});
});