Commit | Line | Data |
---|---|---|
574b351d JB |
1 | const { expect } = require('expect') |
2 | const { Deque } = require('../lib/deque') | |
3 | ||
4 | describe('Deque test suite', () => { | |
5 | it('Verify push() behavior', () => { | |
6 | const deque = new Deque() | |
7 | let rtSize = deque.push(1) | |
8 | expect(deque.size).toBe(1) | |
9 | expect(deque.maxSize).toBe(1) | |
10 | expect(rtSize).toBe(deque.size) | |
11 | expect(deque.head).toMatchObject({ value: 1 }) | |
12 | expect(deque.tail).toMatchObject({ value: 1 }) | |
13 | rtSize = deque.push(2) | |
14 | expect(deque.size).toBe(2) | |
15 | expect(deque.maxSize).toBe(2) | |
16 | expect(rtSize).toBe(deque.size) | |
17 | expect(deque.head).toMatchObject({ value: 1 }) | |
18 | expect(deque.tail).toMatchObject({ value: 2 }) | |
19 | rtSize = deque.push(3) | |
20 | expect(deque.size).toBe(3) | |
21 | expect(deque.maxSize).toBe(3) | |
22 | expect(rtSize).toBe(deque.size) | |
23 | expect(deque.head).toMatchObject({ value: 1 }) | |
24 | expect(deque.tail).toMatchObject({ value: 3 }) | |
25 | }) | |
26 | ||
27 | it('Verify unshift() behavior', () => { | |
28 | const deque = new Deque() | |
29 | let rtSize = deque.unshift(1) | |
30 | expect(deque.size).toBe(1) | |
31 | expect(deque.maxSize).toBe(1) | |
32 | expect(rtSize).toBe(deque.size) | |
33 | expect(deque.head).toMatchObject({ value: 1 }) | |
34 | expect(deque.tail).toMatchObject({ value: 1 }) | |
35 | rtSize = deque.unshift(2) | |
36 | expect(deque.size).toBe(2) | |
37 | expect(deque.maxSize).toBe(2) | |
38 | expect(rtSize).toBe(deque.size) | |
39 | expect(deque.head).toMatchObject({ value: 2 }) | |
40 | expect(deque.tail).toMatchObject({ value: 1 }) | |
41 | rtSize = deque.unshift(3) | |
42 | expect(deque.size).toBe(3) | |
43 | expect(deque.maxSize).toBe(3) | |
44 | expect(rtSize).toBe(deque.size) | |
45 | expect(deque.head).toMatchObject({ value: 3 }) | |
46 | expect(deque.tail).toMatchObject({ value: 1 }) | |
47 | }) | |
48 | ||
49 | it('Verify pop() behavior', () => { | |
50 | const deque = new Deque() | |
51 | deque.push(1) | |
52 | deque.push(2) | |
53 | deque.push(3) | |
54 | let rtItem = deque.pop() | |
55 | expect(deque.size).toBe(2) | |
56 | expect(deque.maxSize).toBe(3) | |
57 | expect(rtItem).toBe(3) | |
58 | expect(deque.head).toMatchObject({ value: 1 }) | |
59 | expect(deque.tail).toMatchObject({ value: 2 }) | |
60 | rtItem = deque.pop() | |
61 | expect(deque.size).toBe(1) | |
62 | expect(deque.maxSize).toBe(3) | |
63 | expect(rtItem).toBe(2) | |
64 | expect(deque.head).toMatchObject({ value: 1 }) | |
65 | expect(deque.tail).toMatchObject({ value: 1 }) | |
66 | rtItem = deque.pop() | |
67 | expect(deque.size).toBe(0) | |
68 | expect(deque.maxSize).toBe(3) | |
69 | expect(rtItem).toBe(1) | |
70 | expect(deque.head).toBeUndefined() | |
71 | expect(deque.tail).toBeUndefined() | |
72 | }) | |
73 | ||
74 | it('Verify shift() behavior', () => { | |
75 | const deque = new Deque() | |
76 | deque.push(1) | |
77 | deque.push(2) | |
78 | deque.push(3) | |
79 | let rtItem = deque.shift() | |
80 | expect(deque.size).toBe(2) | |
81 | expect(deque.maxSize).toBe(3) | |
82 | expect(rtItem).toBe(1) | |
83 | expect(deque.head).toMatchObject({ value: 2 }) | |
84 | expect(deque.tail).toMatchObject({ value: 3 }) | |
85 | rtItem = deque.shift() | |
86 | expect(deque.size).toBe(1) | |
87 | expect(deque.maxSize).toBe(3) | |
88 | expect(rtItem).toBe(2) | |
89 | expect(deque.head).toMatchObject({ value: 3 }) | |
90 | expect(deque.tail).toMatchObject({ value: 3 }) | |
91 | rtItem = deque.shift() | |
92 | expect(deque.size).toBe(0) | |
93 | expect(deque.maxSize).toBe(3) | |
94 | expect(rtItem).toBe(3) | |
95 | expect(deque.head).toBeUndefined() | |
96 | expect(deque.tail).toBeUndefined() | |
97 | }) | |
98 | ||
99 | it('Verify clear() behavior', () => { | |
100 | const deque = new Deque() | |
101 | deque.push(1) | |
102 | deque.push(2) | |
103 | deque.push(3) | |
104 | expect(deque.size).toBe(3) | |
105 | expect(deque.maxSize).toBe(3) | |
106 | expect(deque.head).toMatchObject({ value: 1 }) | |
107 | expect(deque.tail).toMatchObject({ value: 3 }) | |
108 | deque.clear() | |
109 | expect(deque.size).toBe(0) | |
110 | expect(deque.maxSize).toBe(0) | |
111 | expect(deque.head).toBeUndefined() | |
112 | expect(deque.tail).toBeUndefined() | |
113 | }) | |
114 | ||
115 | it('Verify iterator behavior', () => { | |
116 | const deque = new Deque() | |
117 | deque.push(1) | |
118 | deque.push(2) | |
119 | deque.push(3) | |
120 | let i = 1 | |
121 | for (const value of deque) { | |
122 | expect(value).toBe(i) | |
123 | ++i | |
124 | } | |
125 | }) | |
31a7af93 JB |
126 | |
127 | it('Verify backward() iterator behavior', () => { | |
128 | const deque = new Deque() | |
129 | deque.push(1) | |
130 | deque.push(2) | |
131 | deque.push(3) | |
132 | let i = deque.size | |
133 | for (const value of deque.backward()) { | |
134 | expect(value).toBe(i) | |
135 | --i | |
136 | } | |
137 | }) | |
574b351d | 138 | }) |