-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit_last_test.ts
More file actions
78 lines (54 loc) · 2 KB
/
init_last_test.ts
File metadata and controls
78 lines (54 loc) · 2 KB
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
// Copyright © 2023 Tomoki Miyauchi. All rights reserved. MIT license.
import { initLast } from "./init_last.ts";
import { Sequence } from "./types.ts";
import {
assertEquals,
assertType,
describe,
IsExact,
it,
} from "./_dev_deps.ts";
describe("initLast", () => {
it("should return elements without last", () => {
const table: [Sequence<unknown>, [unknown, unknown]][] = [
[[], [[], undefined]],
["", ["", undefined]],
[[, ,], [[,], undefined]],
[[""], [[], ""]],
["a", ["", "a"]],
[["a", "b", "c"], [["a", "b"], "c"]],
["abc", ["ab", "c"]],
];
table.forEach(([seq, expected]) => {
assertEquals(initLast(seq), expected);
});
});
it("should infer empty sequence if empty or single", () => {
const result = initLast([]);
assertType<IsExact<typeof result, [never[], undefined]>>(true);
const result2 = initLast([""]);
assertType<IsExact<typeof result2, [[], ""]>>(true);
const result3 = initLast("");
assertType<IsExact<typeof result3, ["", undefined]>>(true);
const result4 = initLast("a");
assertType<IsExact<typeof result4, ["", "a"]>>(true);
});
it("should infer elements without last if tuple", () => {
const result = initLast(["a", "b"]);
assertType<IsExact<typeof result, [["a"], "b"]>>(true);
const result2 = initLast(["a", "b", "c"]);
assertType<IsExact<typeof result2, [["a", "b"], "c"]>>(true);
});
it("should infer elements without last if template string literal", () => {
const result = initLast("ab");
assertType<IsExact<typeof result, ["a", "b"]>>(true);
const result2 = initLast("abc");
assertType<IsExact<typeof result2, ["ab", "c"]>>(true);
});
it("should infer as is if string or array", () => {
const result = initLast("" as string);
assertType<IsExact<typeof result, [string, string | undefined]>>(true);
const result2 = initLast([] as string[]);
assertType<IsExact<typeof result2, [string[], string | undefined]>>(true);
});
});