-
Notifications
You must be signed in to change notification settings - Fork 3
/
uniques.test.ts
75 lines (52 loc) · 1.78 KB
/
uniques.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
import { expect, test } from 'vitest';
import Sqids, { defaultOptions } from '../../src/index.ts';
// @NOTE: "uniques, with blocked words" is auto-tested since a lot of these big ids
// will match some words on the blocklist and will be re-generated anyway
const upTo = 6_000_000;
test('uniques', () => {
const sqids = new Sqids();
const idSet = new Set<string>();
const numbersSet = new Set<string>();
for (let i = 0; i != upTo; i++) {
const numbers = [i];
const id = sqids.encode(numbers);
const decodedNumbers = sqids.decode(id);
expect.soft(decodedNumbers).toEqual(numbers);
idSet.add(id);
numbersSet.add(decodedNumbers.join(','));
}
expect.soft(idSet.size).toBe(upTo);
expect.soft(numbersSet.size).toBe(upTo);
});
test('uniques, with padding', () => {
const sqids = new Sqids({
minLength: defaultOptions.alphabet.length
});
const idSet = new Set<string>();
const numbersSet = new Set<string>();
for (let i = 0; i != upTo; i++) {
const numbers = [i];
const id = sqids.encode(numbers);
const decodedNumbers = sqids.decode(id);
expect.soft(decodedNumbers).toEqual(numbers);
idSet.add(id);
numbersSet.add(decodedNumbers.join(','));
}
expect.soft(idSet.size).toBe(upTo);
expect.soft(numbersSet.size).toBe(upTo);
});
test('uniques, with multiple/random numbers', () => {
const sqids = new Sqids();
const idSet = new Set<string>();
const numbersSet = new Set<string>();
for (let i = 0; i != upTo; i++) {
const numbers = [0, i, i + 1, Math.floor(Math.random() * 1_000), 999999999];
const id = sqids.encode(numbers);
const decodedNumbers = sqids.decode(id);
expect.soft(decodedNumbers).toEqual(numbers);
idSet.add(id);
numbersSet.add(decodedNumbers.join(','));
}
expect.soft(idSet.size).toBe(upTo);
expect.soft(numbersSet.size).toBe(upTo);
});