/
index.test.ts
85 lines (79 loc) · 2.6 KB
/
index.test.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
76
77
78
79
80
81
82
83
84
85
import { it, describe, expect } from "vitest";
import { optionEitherAwareEq } from "./index.js";
import { either, option } from "fp-ts";
describe("optionEitherAwareEq", () => {
it("uses strict comparison for non-fp-ts values", () => {
expect(optionEitherAwareEq.equals(1, 2)).toBe(false);
expect(optionEitherAwareEq.equals(2, 2)).toBe(true);
expect(optionEitherAwareEq.equals("2", 2)).toBe(false);
expect(optionEitherAwareEq.equals({}, {})).toBe(false);
expect(optionEitherAwareEq.equals(true, false)).toBe(false);
expect(optionEitherAwareEq.equals(true, true)).toBe(true);
});
it("compares contents of Options", () => {
expect(optionEitherAwareEq.equals(option.some(1), option.some(1))).toBe(
true
);
expect(optionEitherAwareEq.equals(option.some(1), option.some(2))).toBe(
false
);
expect(optionEitherAwareEq.equals(option.some(1), option.none)).toBe(false);
});
it("compares contents of Eithers", () => {
expect(optionEitherAwareEq.equals(either.right(1), either.right(1))).toBe(
true
);
expect(optionEitherAwareEq.equals(either.right(1), either.right(2))).toBe(
false
);
expect(
optionEitherAwareEq.equals(either.right(1), either.left("1234"))
).toBe(false);
expect(optionEitherAwareEq.equals(either.right(1), either.left(1))).toBe(
false
);
});
it("compares contents of Eithers and Options nested in each other", () => {
expect(
optionEitherAwareEq.equals(
either.right(option.some(1)),
either.right(option.some(1))
)
).toBe(true);
expect(
optionEitherAwareEq.equals(
either.right(option.some(1)),
either.right(option.some(2))
)
).toBe(false);
expect(
optionEitherAwareEq.equals(
either.right(option.some(1)),
either.right(option.none)
)
).toBe(false);
expect(
optionEitherAwareEq.equals(either.right(option.some(1)), either.left("1"))
).toBe(false);
});
it("does not fail when x and y structure differs", () => {
expect(
optionEitherAwareEq.equals(either.right(1234), option.some(1234))
).toBe(false);
expect(
optionEitherAwareEq.equals(option.some(1234), either.right(1234))
).toBe(false);
});
it("does not fail for nullable values", () => {
expect(optionEitherAwareEq.equals(option.some(1234), null)).toBe(false);
expect(optionEitherAwareEq.equals(option.some(1234), undefined)).toBe(
false
);
expect(
optionEitherAwareEq.equals(
option.some(option.some(1234)),
option.some(null)
)
).toBe(false);
});
});