-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathqueue.spec.ts
60 lines (56 loc) · 1.76 KB
/
queue.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
import { Queue } from '../src/queue'
describe('Queue', () => {
it('should support push/shift', () => {
const queue = new Queue()
expect(queue.size()).toEqual(0)
expect(queue.front()).toEqual(undefined)
expect([...queue.values()]).toEqual([])
queue.push(1)
expect(queue.size()).toEqual(1)
expect(queue.front()).toEqual(1)
expect([...queue.values()]).toEqual([1])
queue.push(2)
expect(queue.size()).toEqual(2)
expect(queue.front()).toEqual(1)
expect([...queue.values()]).toEqual([1, 2])
queue.push(3)
expect(queue.size()).toEqual(3)
expect(queue.front()).toEqual(1)
expect([...queue.values()]).toEqual([1, 2, 3])
expect(queue.shift()).toEqual(1)
expect(queue.size()).toEqual(2)
expect(queue.front()).toEqual(2)
expect([...queue.values()]).toEqual([2, 3])
expect(queue.shift()).toEqual(2)
expect(queue.size()).toEqual(1)
expect(queue.front()).toEqual(3)
expect([...queue.values()]).toEqual([3])
expect(queue.shift()).toEqual(3)
expect(queue.size()).toEqual(0)
expect(queue.front()).toEqual(undefined)
expect([...queue.values()]).toEqual([])
})
it('shift on empty queue', () => {
const queue = new Queue()
expect(queue.front()).toEqual(undefined)
queue.shift()
expect(queue.front()).toEqual(undefined)
expect([...queue.values()]).toEqual([])
})
it('should work for large data', () => {
const queue = new Queue()
const arr = []
const data = Array(1e4).fill(0).map(() => Math.floor(1e9 * Math.random()))
for (const num of data) {
if (num % 2 === 0) {
queue.push(num)
arr.push(num)
}
if (num % 2 === 1) {
queue.shift()
arr.shift()
}
}
expect(arr).toEqual([...queue.values()])
})
})