1
+ import { describe , expect , test , beforeEach } from '@jest/globals' ;
2
+ import DoublyLinkedList from '../doubly-linked-list' ;
3
+
4
+ describe ( 'DoublyLinkedList' , ( ) => {
5
+ let doublyLinkedList : DoublyLinkedList < number > ;
6
+
7
+ beforeEach ( ( ) => {
8
+ doublyLinkedList = new DoublyLinkedList < number > ( ) ;
9
+ } ) ;
10
+
11
+ test ( 'should create an empty doubly linked list' , ( ) => {
12
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '' ) ;
13
+ } ) ;
14
+
15
+ test ( 'should append node to doubly linked list' , ( ) => {
16
+ doublyLinkedList . append ( 1 ) ;
17
+ doublyLinkedList . append ( 2 ) ;
18
+ doublyLinkedList . append ( 3 ) ;
19
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1, 2, 3' ) ;
20
+ } ) ;
21
+
22
+ test ( 'should prepend node to doubly linked list' , ( ) => {
23
+ doublyLinkedList . prepend ( 2 ) ;
24
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '2' ) ;
25
+ doublyLinkedList . append ( 1 ) ;
26
+ doublyLinkedList . prepend ( 3 ) ;
27
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '3, 2, 1' ) ;
28
+ } ) ;
29
+
30
+ test ( 'should insert node at position 0' , ( ) => {
31
+ doublyLinkedList . append ( 1 ) ;
32
+ doublyLinkedList . insert ( 0 , 2 ) ;
33
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '2, 1' ) ;
34
+ } ) ;
35
+
36
+ test ( 'should insert node at given position' , ( ) => {
37
+ doublyLinkedList . append ( 1 ) ;
38
+ doublyLinkedList . append ( 3 ) ;
39
+ doublyLinkedList . insert ( 1 , 2 ) ;
40
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1, 2, 3' ) ;
41
+ } ) ;
42
+
43
+ test ( 'should insert node at invalid position' , ( ) => {
44
+ doublyLinkedList . append ( 1 ) ;
45
+ doublyLinkedList . append ( 3 ) ;
46
+ expect ( doublyLinkedList . insert ( 3 , 2 ) ) . toBe ( false ) ;
47
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1, 3' ) ;
48
+ } ) ;
49
+
50
+ test ( 'should remove node from doubly linked list' , ( ) => {
51
+ doublyLinkedList . append ( 1 ) ;
52
+ doublyLinkedList . append ( 2 ) ;
53
+ doublyLinkedList . append ( 3 ) ;
54
+ doublyLinkedList . removeAt ( 1 ) ;
55
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1, 3' ) ;
56
+ } ) ;
57
+
58
+ test ( 'should remove node at position 0' , ( ) => {
59
+ doublyLinkedList . append ( 1 ) ;
60
+ doublyLinkedList . append ( 2 ) ;
61
+ doublyLinkedList . removeAt ( 0 ) ;
62
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '2' ) ;
63
+ } ) ;
64
+
65
+ test ( 'should remove node at invalid position' , ( ) => {
66
+ doublyLinkedList . append ( 1 ) ;
67
+ doublyLinkedList . append ( 3 ) ;
68
+ expect ( doublyLinkedList . removeAt ( 3 ) ) . toBe ( false ) ;
69
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1, 3' ) ;
70
+ } ) ;
71
+
72
+ test ( 'should remove element from doubly linked list' , ( ) => {
73
+ doublyLinkedList . append ( 1 ) ;
74
+ doublyLinkedList . append ( 2 ) ;
75
+ doublyLinkedList . append ( 3 ) ;
76
+ doublyLinkedList . remove ( 3 ) ;
77
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1, 2' ) ;
78
+ doublyLinkedList . remove ( 1 ) ;
79
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '2' ) ;
80
+ doublyLinkedList . remove ( 2 ) ;
81
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '' ) ;
82
+ } ) ;
83
+
84
+ test ( 'should remove element that is not in doubly linked list' , ( ) => {
85
+ doublyLinkedList . append ( 1 ) ;
86
+ doublyLinkedList . append ( 2 ) ;
87
+ expect ( doublyLinkedList . remove ( 3 ) ) . toBe ( false ) ;
88
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1, 2' ) ;
89
+ } ) ;
90
+
91
+ test ( 'should find element in doubly linked list' , ( ) => {
92
+ doublyLinkedList . append ( 1 ) ;
93
+ doublyLinkedList . append ( 2 ) ;
94
+ doublyLinkedList . append ( 3 ) ;
95
+ expect ( doublyLinkedList . indexOf ( 1 ) ) . toBe ( 0 ) ;
96
+ expect ( doublyLinkedList . indexOf ( 2 ) ) . toBe ( 1 ) ;
97
+ expect ( doublyLinkedList . indexOf ( 3 ) ) . toBe ( 2 ) ;
98
+ expect ( doublyLinkedList . indexOf ( 4 ) ) . toBe ( - 1 ) ;
99
+ } ) ;
100
+
101
+ test ( 'should check if doubly linked list is empty' , ( ) => {
102
+ expect ( doublyLinkedList . isEmpty ( ) ) . toBe ( true ) ;
103
+ doublyLinkedList . append ( 1 ) ;
104
+ expect ( doublyLinkedList . isEmpty ( ) ) . toBe ( false ) ;
105
+ } ) ;
106
+
107
+ test ( 'should return the size of the doubly linked list' , ( ) => {
108
+ expect ( doublyLinkedList . getSize ( ) ) . toBe ( 0 ) ;
109
+ doublyLinkedList . append ( 1 ) ;
110
+ expect ( doublyLinkedList . getSize ( ) ) . toBe ( 1 ) ;
111
+ doublyLinkedList . append ( 2 ) ;
112
+ expect ( doublyLinkedList . getSize ( ) ) . toBe ( 2 ) ;
113
+ } ) ;
114
+
115
+ test ( 'should convert doubly linked list to string' , ( ) => {
116
+ doublyLinkedList . append ( 1 ) ;
117
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1' ) ;
118
+ doublyLinkedList . append ( 2 ) ;
119
+ expect ( doublyLinkedList . toString ( ) ) . toBe ( '1, 2' ) ;
120
+ } ) ;
121
+
122
+ } ) ;
0 commit comments