-
Notifications
You must be signed in to change notification settings - Fork 0
/
init_test.ts
77 lines (53 loc) · 1.74 KB
/
init_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
// Copyright © 2023 Tomoki Miyauchi. All rights reserved. MIT license.
import { init } from "./init.ts";
import { Sliceable } from "./types.ts";
import {
assertEquals,
assertType,
describe,
IsExact,
it,
} from "./_dev_deps.ts";
describe("init", () => {
it("should return elements without last", () => {
const table: [Sliceable<unknown>, unknown][] = [
[[], []],
["", ""],
[[""], []],
["a", ""],
[["a", "b", "c"], ["a", "b"]],
["abc", "ab"],
];
table.forEach(([seq, expected]) => {
assertEquals(init(seq), expected);
});
});
it("should infer empty sequence if empty or single", () => {
const result = init([]);
assertType<IsExact<typeof result, never[]>>(true);
const result2 = init([""]);
assertType<IsExact<typeof result2, []>>(true);
const result3 = init("");
assertType<IsExact<typeof result3, "">>(true);
const result4 = init("a");
assertType<IsExact<typeof result4, "">>(true);
});
it("should infer elements without last if tuple", () => {
const result = init(["a", "b"]);
assertType<IsExact<typeof result, ["a"]>>(true);
const result2 = init(["a", "b", "c"]);
assertType<IsExact<typeof result2, ["a", "b"]>>(true);
});
it("should infer elements without last if template string literal", () => {
const result = init("ab");
assertType<IsExact<typeof result, "a">>(true);
const result2 = init("abc");
assertType<IsExact<typeof result2, "ab">>(true);
});
it("should infer as is if string or array", () => {
const result = init("" as string);
assertType<IsExact<typeof result, string>>(true);
const result2 = init([] as string[]);
assertType<IsExact<typeof result2, string[]>>(true);
});
});