/
min_with_test.ts
92 lines (82 loc) · 1.88 KB
/
min_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
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import { assertEquals } from "../testing/asserts.ts";
import { minWith } from "./min_with.ts";
function minWithTest<T>(
input: [T[], (a: T, b: T) => number],
expected: T | undefined,
message?: string,
) {
const actual = minWith(...input);
assertEquals(actual, expected, message);
}
Deno.test({
name: "[collections/minWith] no mutation",
fn() {
const input = [[1, 3], [6, 1, 3], [4]];
minWith(input, (a, b) => a.length - b.length);
assertEquals(input, [[1, 3], [6, 1, 3], [4]]);
},
});
Deno.test({
name: "[collections/minWith] empty input",
fn() {
minWithTest<string>([[], (a, b) => a.length - b.length], undefined);
},
});
Deno.test({
name: "[collections/minWith] array of arrays",
fn() {
minWithTest([[[1, 3], [6, 1, 3], [4]], (a, b) => a.length - b.length], [4]);
},
});
Deno.test({
name: "[collections/minWith] array of strings",
fn() {
minWithTest(
[["Kim", "Anna", "John"], (a, b) => a.length - b.length],
"Kim",
);
},
});
Deno.test({
name: "[collections/minWith] array of objects",
fn() {
minWithTest(
[
[
{ name: "Kim", age: 24 },
{ name: "Anna", age: 20 },
{ name: "John", age: 43 },
],
(a, b) => a.age - b.age,
],
{ name: "Anna", age: 20 },
);
},
});
Deno.test({
name: "[collections/minWith] duplicates",
fn() {
minWithTest([["John", "Kim", "Kim"], (a, b) => a.length - b.length], "Kim");
},
});
Deno.test({
name: "[collections/minWith] array containing undefined",
fn() {
minWithTest(
[
[undefined, undefined, 1],
(a, b) => {
if (a === undefined) {
return -1;
}
if (b === undefined) {
return 1;
}
return 0;
},
],
undefined,
);
},
});