-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathdeque.spec.ts
106 lines (99 loc) · 3.11 KB
/
deque.spec.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
100
101
102
103
104
105
106
import { Deque } from '../src/deque'
describe('Deque', () => {
it('should support push/pop', () => {
const deque = new Deque()
expect(deque.size()).toEqual(0)
expect(deque.front()).toEqual(undefined)
expect(deque.back()).toEqual(undefined)
expect([...deque.values()]).toEqual([])
deque.push(1)
expect(deque.size()).toEqual(1)
expect(deque.front()).toEqual(1)
expect(deque.back()).toEqual(1)
expect([...deque.values()]).toEqual([1])
deque.push(2)
expect(deque.size()).toEqual(2)
expect(deque.front()).toEqual(1)
expect(deque.back()).toEqual(2)
expect([...deque.values()]).toEqual([1, 2])
deque.push(3)
expect(deque.size()).toEqual(3)
expect(deque.front()).toEqual(1)
expect(deque.back()).toEqual(3)
expect([...deque.values()]).toEqual([1, 2, 3])
expect(deque.pop()).toEqual(3)
expect(deque.size()).toEqual(2)
expect(deque.front()).toEqual(1)
expect(deque.back()).toEqual(2)
expect([...deque.values()]).toEqual([1, 2])
expect(deque.pop()).toEqual(2)
expect(deque.size()).toEqual(1)
expect(deque.front()).toEqual(1)
expect(deque.back()).toEqual(1)
expect([...deque.values()]).toEqual([1])
expect(deque.pop()).toEqual(1)
expect(deque.size()).toEqual(0)
expect(deque.front()).toEqual(undefined)
expect(deque.back()).toEqual(undefined)
expect([...deque.values()]).toEqual([])
})
it('should support shift/unshift', () => {
const deque = new Deque()
expect(deque.size()).toEqual(0)
expect([...deque.values()]).toEqual([])
deque.unshift(1)
expect(deque.size()).toEqual(1)
expect([...deque.values()]).toEqual([1])
deque.unshift(2)
expect(deque.size()).toEqual(2)
expect([...deque.values()]).toEqual([2, 1])
deque.unshift(3)
expect(deque.size()).toEqual(3)
expect([...deque.values()]).toEqual([3, 2, 1])
expect(deque.shift()).toEqual(3)
expect(deque.size()).toEqual(2)
expect([...deque.values()]).toEqual([2, 1])
expect(deque.shift()).toEqual(2)
expect(deque.size()).toEqual(1)
expect([...deque.values()]).toEqual([1])
expect(deque.shift()).toEqual(1)
expect(deque.size()).toEqual(0)
expect([...deque.values()]).toEqual([])
})
it('pop/shift on empty deque', () => {
const deque = new Deque()
expect(deque.front()).toEqual(undefined)
expect(deque.back()).toEqual(undefined)
deque.shift()
expect(deque.front()).toEqual(undefined)
expect(deque.back()).toEqual(undefined)
deque.shift()
deque.pop()
deque.pop()
expect([...deque.values()]).toEqual([])
})
it('should work for large data', () => {
const deque = new Deque<number>()
const arr = []
for (let i = 0; i < 1e4; i++) {
const num = Math.floor(1e9 * Math.random())
if (num % 4 === 0) {
deque.push(num)
arr.push(num)
}
if (num % 4 === 1) {
deque.shift()
arr.shift()
}
if (num % 4 === 2) {
deque.unshift(num)
arr.unshift(num)
}
if (num % 4 === 3) {
deque.pop()
arr.pop()
}
}
expect(arr).toEqual([...deque.values()])
})
})