@@ -2,7 +2,7 @@ import LinkedList from '../LinkedList';
2
2
3
3
describe ( 'LinkedList' , ( ) => {
4
4
it ( 'should create empty linked list' , ( ) => {
5
- const linkedList = new LinkedList ( ) ;
5
+ const linkedList = new LinkedList < string > ( ) ;
6
6
expect ( linkedList . toString ( ) ) . toBe ( '' ) ;
7
7
} ) ;
8
8
@@ -16,15 +16,15 @@ describe('LinkedList', () => {
16
16
linkedList . append ( 2 ) ;
17
17
18
18
expect ( linkedList . toString ( ) ) . toBe ( '1,2' ) ;
19
- expect ( linkedList . tail . next ) . toBeNull ( ) ;
19
+ expect ( linkedList . tail ? .next ) . toBeNull ( ) ;
20
20
} ) ;
21
21
22
22
it ( 'should prepend node to linked list' , ( ) => {
23
23
const linkedList = new LinkedList ( ) ;
24
24
25
25
linkedList . prepend ( 2 ) ;
26
- expect ( linkedList . head . toString ( ) ) . toBe ( '2' ) ;
27
- expect ( linkedList . tail . toString ( ) ) . toBe ( '2' ) ;
26
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '2' ) ;
27
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '2' ) ;
28
28
29
29
linkedList . append ( 1 ) ;
30
30
linkedList . prepend ( 3 ) ;
@@ -46,11 +46,11 @@ describe('LinkedList', () => {
46
46
linkedList . append ( 4 ) ;
47
47
linkedList . append ( 5 ) ;
48
48
49
- expect ( linkedList . head . toString ( ) ) . toBe ( '1' ) ;
50
- expect ( linkedList . tail . toString ( ) ) . toBe ( '5' ) ;
49
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '1' ) ;
50
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '5' ) ;
51
51
52
52
const deletedNode = linkedList . delete ( 3 ) ;
53
- expect ( deletedNode . value ) . toBe ( 3 ) ;
53
+ expect ( deletedNode ? .value ) . toBe ( 3 ) ;
54
54
expect ( linkedList . toString ( ) ) . toBe ( '1,1,2,4,5' ) ;
55
55
56
56
linkedList . delete ( 3 ) ;
@@ -59,20 +59,20 @@ describe('LinkedList', () => {
59
59
linkedList . delete ( 1 ) ;
60
60
expect ( linkedList . toString ( ) ) . toBe ( '2,4,5' ) ;
61
61
62
- expect ( linkedList . head . toString ( ) ) . toBe ( '2' ) ;
63
- expect ( linkedList . tail . toString ( ) ) . toBe ( '5' ) ;
62
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '2' ) ;
63
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '5' ) ;
64
64
65
65
linkedList . delete ( 5 ) ;
66
66
expect ( linkedList . toString ( ) ) . toBe ( '2,4' ) ;
67
67
68
- expect ( linkedList . head . toString ( ) ) . toBe ( '2' ) ;
69
- expect ( linkedList . tail . toString ( ) ) . toBe ( '4' ) ;
68
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '2' ) ;
69
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '4' ) ;
70
70
71
71
linkedList . delete ( 4 ) ;
72
72
expect ( linkedList . toString ( ) ) . toBe ( '2' ) ;
73
73
74
- expect ( linkedList . head . toString ( ) ) . toBe ( '2' ) ;
75
- expect ( linkedList . tail . toString ( ) ) . toBe ( '2' ) ;
74
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '2' ) ;
75
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '2' ) ;
76
76
77
77
linkedList . delete ( 2 ) ;
78
78
expect ( linkedList . toString ( ) ) . toBe ( '' ) ;
@@ -85,26 +85,26 @@ describe('LinkedList', () => {
85
85
linkedList . append ( 2 ) ;
86
86
linkedList . append ( 3 ) ;
87
87
88
- expect ( linkedList . head . toString ( ) ) . toBe ( '1' ) ;
89
- expect ( linkedList . tail . toString ( ) ) . toBe ( '3' ) ;
88
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '1' ) ;
89
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '3' ) ;
90
90
91
91
const deletedNode1 = linkedList . deleteTail ( ) ;
92
92
93
- expect ( deletedNode1 . value ) . toBe ( 3 ) ;
93
+ expect ( deletedNode1 ? .value ) . toBe ( 3 ) ;
94
94
expect ( linkedList . toString ( ) ) . toBe ( '1,2' ) ;
95
- expect ( linkedList . head . toString ( ) ) . toBe ( '1' ) ;
96
- expect ( linkedList . tail . toString ( ) ) . toBe ( '2' ) ;
95
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '1' ) ;
96
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '2' ) ;
97
97
98
98
const deletedNode2 = linkedList . deleteTail ( ) ;
99
99
100
- expect ( deletedNode2 . value ) . toBe ( 2 ) ;
100
+ expect ( deletedNode2 ? .value ) . toBe ( 2 ) ;
101
101
expect ( linkedList . toString ( ) ) . toBe ( '1' ) ;
102
- expect ( linkedList . head . toString ( ) ) . toBe ( '1' ) ;
103
- expect ( linkedList . tail . toString ( ) ) . toBe ( '1' ) ;
102
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '1' ) ;
103
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '1' ) ;
104
104
105
105
const deletedNode3 = linkedList . deleteTail ( ) ;
106
106
107
- expect ( deletedNode3 . value ) . toBe ( 1 ) ;
107
+ expect ( deletedNode3 ? .value ) . toBe ( 1 ) ;
108
108
expect ( linkedList . toString ( ) ) . toBe ( '' ) ;
109
109
expect ( linkedList . head ) . toBeNull ( ) ;
110
110
expect ( linkedList . tail ) . toBeNull ( ) ;
@@ -118,41 +118,43 @@ describe('LinkedList', () => {
118
118
linkedList . append ( 1 ) ;
119
119
linkedList . append ( 2 ) ;
120
120
121
- expect ( linkedList . head . toString ( ) ) . toBe ( '1' ) ;
122
- expect ( linkedList . tail . toString ( ) ) . toBe ( '2' ) ;
121
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '1' ) ;
122
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '2' ) ;
123
123
124
124
const deletedNode1 = linkedList . deleteHead ( ) ;
125
125
126
- expect ( deletedNode1 . value ) . toBe ( 1 ) ;
126
+ expect ( deletedNode1 ? .value ) . toBe ( 1 ) ;
127
127
expect ( linkedList . toString ( ) ) . toBe ( '2' ) ;
128
- expect ( linkedList . head . toString ( ) ) . toBe ( '2' ) ;
129
- expect ( linkedList . tail . toString ( ) ) . toBe ( '2' ) ;
128
+ expect ( linkedList . head ? .toString ( ) ) . toBe ( '2' ) ;
129
+ expect ( linkedList . tail ? .toString ( ) ) . toBe ( '2' ) ;
130
130
131
131
const deletedNode2 = linkedList . deleteHead ( ) ;
132
132
133
- expect ( deletedNode2 . value ) . toBe ( 2 ) ;
133
+ expect ( deletedNode2 ? .value ) . toBe ( 2 ) ;
134
134
expect ( linkedList . toString ( ) ) . toBe ( '' ) ;
135
135
expect ( linkedList . head ) . toBeNull ( ) ;
136
136
expect ( linkedList . tail ) . toBeNull ( ) ;
137
137
} ) ;
138
138
139
139
it ( 'should be possible to store objects in the list and to print them out' , ( ) => {
140
- const linkedList = new LinkedList ( ) ;
141
-
140
+
142
141
const nodeValue1 = { value : 1 , key : 'key1' } ;
143
142
const nodeValue2 = { value : 2 , key : 'key2' } ;
144
-
143
+ type NodeType = typeof nodeValue1 ;
144
+
145
+ const linkedList = new LinkedList < NodeType > ( ) ;
145
146
linkedList
146
147
. append ( nodeValue1 )
147
148
. prepend ( nodeValue2 ) ;
148
149
149
- const nodeStringifier = ( value ) => `${ value . key } :${ value . value } ` ;
150
+ const nodeStringifier = ( value : NodeType ) => `${ value . key } :${ value . value } ` ;
150
151
151
152
expect ( linkedList . toString ( nodeStringifier ) ) . toBe ( 'key2:2,key1:1' ) ;
152
153
} ) ;
153
154
154
155
it ( 'should find node by value' , ( ) => {
155
- const linkedList = new LinkedList ( ) ;
156
+
157
+ const linkedList = new LinkedList < number > ( ) ;
156
158
157
159
expect ( linkedList . find ( { value : 5 } ) ) . toBeNull ( ) ;
158
160
@@ -165,12 +167,13 @@ describe('LinkedList', () => {
165
167
166
168
const node = linkedList . find ( { value : 2 } ) ;
167
169
168
- expect ( node . value ) . toBe ( 2 ) ;
170
+ expect ( node ? .value ) . toBe ( 2 ) ;
169
171
expect ( linkedList . find ( { value : 5 } ) ) . toBeNull ( ) ;
170
172
} ) ;
171
173
172
174
it ( 'should find node by callback' , ( ) => {
173
- const linkedList = new LinkedList ( ) ;
175
+ type NodeType = { value : number , key : string } ;
176
+ const linkedList = new LinkedList < NodeType > ( ) ;
174
177
175
178
linkedList
176
179
. append ( { value : 1 , key : 'test1' } )
@@ -180,8 +183,8 @@ describe('LinkedList', () => {
180
183
const node = linkedList . find ( { callback : ( value ) => value . key === 'test2' } ) ;
181
184
182
185
expect ( node ) . toBeDefined ( ) ;
183
- expect ( node . value . value ) . toBe ( 2 ) ;
184
- expect ( node . value . key ) . toBe ( 'test2' ) ;
186
+ expect ( node ? .value . value ) . toBe ( 2 ) ;
187
+ expect ( node ? .value . key ) . toBe ( 'test2' ) ;
185
188
expect ( linkedList . find ( { callback : ( value ) => value . key === 'test5' } ) ) . toBeNull ( ) ;
186
189
} ) ;
187
190
@@ -193,7 +196,8 @@ describe('LinkedList', () => {
193
196
} ) ;
194
197
195
198
it ( 'should find node by means of custom compare function' , ( ) => {
196
- const comparatorFunction = ( a , b ) => {
199
+ type NodeType = { customValue : string , value : number } ;
200
+ const comparatorFunction = ( a : NodeType , b : NodeType ) => {
197
201
if ( a . customValue === b . customValue ) {
198
202
return 0 ;
199
203
}
@@ -213,22 +217,22 @@ describe('LinkedList', () => {
213
217
} ) ;
214
218
215
219
expect ( node ) . toBeDefined ( ) ;
216
- expect ( node . value . value ) . toBe ( 2 ) ;
217
- expect ( node . value . customValue ) . toBe ( 'test2' ) ;
218
- expect ( linkedList . find ( { value : 2 , customValue : 'test5' } ) ) . toBeNull ( ) ;
220
+ expect ( node ? .value . value ) . toBe ( 2 ) ;
221
+ expect ( node ? .value . customValue ) . toBe ( 'test2' ) ;
222
+ expect ( linkedList . find ( { value : { value : 2 , customValue : 'test5' } } ) ) . toBeNull ( ) ;
219
223
} ) ;
220
224
221
225
it ( 'should find preferring callback over compare function' , ( ) => {
222
- const greaterThan = ( value , compareTo ) => ( value > compareTo ? 0 : 1 ) ;
226
+ const greaterThan = ( value : number , compareTo : number ) => ( value > compareTo ? 0 : 1 ) ;
223
227
224
228
const linkedList = new LinkedList ( greaterThan ) ;
225
229
linkedList . fromArray ( [ 1 , 2 , 3 , 4 , 5 ] ) ;
226
230
227
231
let node = linkedList . find ( { value : 3 } ) ;
228
- expect ( node . value ) . toBe ( 4 ) ;
232
+ expect ( node ? .value ) . toBe ( 4 ) ;
229
233
230
234
node = linkedList . find ( { callback : ( value ) => value < 3 } ) ;
231
- expect ( node . value ) . toBe ( 1 ) ;
235
+ expect ( node ? .value ) . toBe ( 1 ) ;
232
236
} ) ;
233
237
234
238
it ( 'should convert to array' , ( ) => {
@@ -249,19 +253,19 @@ describe('LinkedList', () => {
249
253
. append ( 3 ) ;
250
254
251
255
expect ( linkedList . toString ( ) ) . toBe ( '1,2,3' ) ;
252
- expect ( linkedList . head . value ) . toBe ( 1 ) ;
253
- expect ( linkedList . tail . value ) . toBe ( 3 ) ;
256
+ expect ( linkedList . head ? .value ) . toBe ( 1 ) ;
257
+ expect ( linkedList . tail ? .value ) . toBe ( 3 ) ;
254
258
255
259
// Reverse linked list.
256
260
linkedList . reverse ( ) ;
257
261
expect ( linkedList . toString ( ) ) . toBe ( '3,2,1' ) ;
258
- expect ( linkedList . head . value ) . toBe ( 3 ) ;
259
- expect ( linkedList . tail . value ) . toBe ( 1 ) ;
262
+ expect ( linkedList . head ? .value ) . toBe ( 3 ) ;
263
+ expect ( linkedList . tail ? .value ) . toBe ( 1 ) ;
260
264
261
265
// Reverse linked list back to initial state.
262
266
linkedList . reverse ( ) ;
263
267
expect ( linkedList . toString ( ) ) . toBe ( '1,2,3' ) ;
264
- expect ( linkedList . head . value ) . toBe ( 1 ) ;
265
- expect ( linkedList . tail . value ) . toBe ( 3 ) ;
268
+ expect ( linkedList . head ? .value ) . toBe ( 1 ) ;
269
+ expect ( linkedList . tail ? .value ) . toBe ( 3 ) ;
266
270
} ) ;
267
271
} ) ;
0 commit comments