/
associate_with_test.ts
99 lines (92 loc) · 1.96 KB
/
associate_with_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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import { assertEquals } from "../testing/asserts.ts";
import { associateWith } from "./associate_with.ts";
function associateWithTest<T>(
input: [readonly string[], (el: string) => T],
expected: { [x: string]: T },
message?: string,
) {
const actual = associateWith(...input);
assertEquals(actual, expected, message);
}
Deno.test({
name: "[collections/associateWith] no mutation",
fn() {
const arrayA = ["Foo", "Bar"];
associateWith(arrayA, (it) => it.charAt(0));
assertEquals(arrayA, ["Foo", "Bar"]);
},
});
Deno.test({
name: "[collections/associateWith] empty input",
fn() {
associateWithTest([[], () => "abc"], {});
},
});
Deno.test({
name: "[collections/associateWith] associates",
fn() {
associateWithTest<number>(
[
[
"Kim",
"Lara",
"Jonathan",
],
(it) => it.length,
],
{
"Kim": 3,
"Lara": 4,
"Jonathan": 8,
},
);
associateWithTest(
[
[
"Kim@example.org",
"Lara@example.org",
"Jonathan@example.org",
],
(it) => it.replace("org", "com"),
],
{
"Kim@example.org": "Kim@example.com",
"Lara@example.org": "Lara@example.com",
"Jonathan@example.org": "Jonathan@example.com",
},
);
associateWithTest<boolean>(
[
[
"Kim",
"Lara",
"Jonathan",
],
(it) => /m/.test(it),
],
{
"Kim": true,
"Lara": false,
"Jonathan": false,
},
);
},
});
Deno.test({
name: "[collections/associateWith] duplicate keys",
fn() {
associateWithTest(
[
["Kim", "Marija", "Karl", "Jonathan", "Marija"],
(it) => it.charAt(0),
],
{
"Jonathan": "J",
"Karl": "K",
"Kim": "K",
"Marija": "M",
},
);
},
});