Completed
Push — master ( 4b3449...8131a6 )
by Siro Díaz
01:20
created

ArrayListTest   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 224
Duplicated Lines 54.46 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 20
lcom 1
cbo 2
dl 122
loc 224
rs 10
c 0
b 0
f 0

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace DataStructures\Tests\Lists;
4
5
use DataStructures\Lists\ArrayList;
6
use PHPUnit\Framework\TestCase;
7
8
class ArrayListTest extends TestCase {
9
    private $list;
10
11
    public function setUp() {
12
        $this->list = new ArrayList();
13
    }
14
15
    public function testSize() {
16
        $this->assertEquals($this->list->size(), 0);
17
        $this->list->push(true);
18
        $this->list->push(2);
19
        $this->assertEquals($this->list->size(), 2);
20
    }
21
22
    public function testEmpty() {
23
        $this->assertTrue($this->list->empty());
24
    }
25
26
    public function testPush() {
27
        $this->list->push(20);
28
        $this->assertEquals(1, $this->list->size());
29
        $this->assertEquals(20, $this->list->get(0));
30
        $this->list->push(true);
31
        
32
        $this->assertEquals(2, $this->list->size());
33
        
34
        $this->assertTrue($this->list->get(1));
35
        
36
        $this->list->push(30);
37
        $this->assertEquals(20, $this->list->get(0));
38
        $this->assertEquals(30, $this->list->get(1));
39
        $this->assertEquals(true, $this->list->get(2));
40
    }
41
42
    public function testGetLast() {
43
        $this->assertNull($this->list->getLast());
44
        $this->list->push(true);
45
        $this->list->push(50);
46
        $this->list->push("string");
47
        $this->assertEquals("string", $this->list->getLast());
48
    }
49
50
    public function testInsert() {
51
        $this->list->insert(0, 100);
52
        $this->assertEquals(100, $this->list->get(0));
53
        $this->assertEquals(1, $this->list->size());
54
        
55
        $this->list->insert(0, 200);
56
        $this->assertEquals(2, $this->list->size());
57
        $this->assertEquals(200, $this->list->get(0));
58
        $this->assertEquals(100, $this->list->get(1));
59
        $this->assertEquals(100, $this->list->getLast());
60
        
61
        $this->list->insert(1, 300);
62
        $this->assertEquals(3, $this->list->size());
63
        $this->assertEquals(200, $this->list->get(0));
64
        $this->assertEquals(300, $this->list->get(1));
65
        $this->assertEquals(100, $this->list->get(2));
66
        $this->list->insert(2, 1000);
67
        $this->assertEquals(1000, $this->list->get(2));
68
        $this->assertEquals(100, $this->list->get(3));
69
        $this->list->insert(6, true);
70
        $this->assertTrue($this->list->get(4));
71
        $this->assertEquals(5, $this->list->size());
72
    }
73
    
74
    public function testDeleteException() {
75
        $this->expectException(\OutOfBoundsException::class);
76
        $this->list->delete(10);
77
    }
78
    
79
    public function testDelete() {
80
        $this->list->push(20);
81
        $this->list->push(true);
82
        $this->list->push(15);
83
        $this->list->push(3.14);
84
        $this->list->push("string");
85
        
86
        $this->assertEquals($this->list->delete(4), "string");
87
        $this->assertEquals(3.14, $this->list->delete(3));
88
        
89
        $this->assertEquals(3, $this->list->size());
90
        $this->assertEquals(true, $this->list->delete(1));
91
        $this->assertEquals(false, $this->list->empty());
92
        $this->assertEquals(20, $this->list->delete(0));
93
    }
94
    
95
    public function testShift() {
96
        $this->list->push(20);
97
        $this->list->push(true);
98
        $this->assertEquals(20, $this->list->shift());
99
        $this->assertEquals(1, $this->list->size());
100
        $this->assertEquals(true, $this->list->shift());
101
        $this->assertEquals(true, $this->list->empty());
102
    }
103
    
104
    public function testPop() {
105
        $this->list->push(20);
106
        $this->list->push(true);
107
        $this->list->push(15);
108
        $this->list->push(3.14);
109
        $this->list->push("string");
110
        
111
        $this->assertEquals($this->list->pop(), "string");
112
        $this->assertEquals(3.14, $this->list->pop());
113
        $this->list->insert(1, ['hello']);
114
        $this->assertEquals(15, $this->list->pop());
115
        $this->assertTrue($this->list->pop());
116
        $this->assertSame($this->list->pop(), 'hello');
117
        $this->assertSame($this->list->pop(), 20);
118
        $this->assertTrue($this->list->empty());
119
    }
120
    
121
    public function testPopException() {
122
        $this->expectException(\OutOfBoundsException::class);
123
        $this->list->pop();
124
    }
125
    
126
    public function testUnshift() {
127
        $this->list->unshift(999);
128
        $this->assertEquals(1, $this->list->size());
129
        $this->assertEquals(999, $this->list->get(0));
130
        $this->assertEquals($this->list->getLast(), 999);
131
        $this->list->unshift(888);
132
        $this->assertEquals(2, $this->list->size());
133
        $this->assertEquals(888, $this->list->get(0));
134
        $this->assertEquals(999, $this->list->get(1));
135
        $this->assertEquals($this->list->getLast(), 999);
136
        $this->list->unshift(777);
137
        $this->assertEquals(3, $this->list->size());
138
        $this->assertEquals(777, $this->list->get(0));
139
        $this->assertEquals(888, $this->list->get(1));
140
        $this->assertEquals(999, $this->list->get(2));
141
        $this->assertEquals($this->list->getLast(), 999);
142
    }
143
    
144
    public function testGet() {
145
        $this->list->push(20);
146
        $this->list->push(true);
147
        $this->list->push(15);
148
        $this->list->push(3.14);
149
        $this->list->push("string");
150
        $this->assertEquals($this->list->get(0), 20);
151
        $this->assertTrue($this->list->get(1));
152
        $this->assertEquals($this->list->get(2), 15);
153
        $this->assertEquals($this->list->get(3), 3.14);
154
        $this->assertEquals($this->list->get(4), "string");
155
    }
156
    
157
    public function testGetWithException() {
158
        $this->expectException(\OutOfBoundsException::class);
159
        $this->list->get(5);
160
    }
161
162
    public function testGetOutOfBound() {
163
        $this->expectException(\OutOfBoundsException::class);
164
        $this->list->get(-1);
165
    }
166
    
167
    public function testGetAll() {
168
        foreach($this->list->getAll() as $node) {
169
            $this->assertNull($node);
170
        }
171
        
172
        $this->list->push(20);
173
        $this->list->push(true);
174
        $this->list->push(15);
175
        $this->list->push(3.14);
176
        $this->list->push("string");
177
        $data = [];
178
        foreach($this->list->getAll() as $node) {
179
            $data[] = $node;
180
        }
181
        $this->assertCount(5, $data);
182
        $this->assertSame([20, true, 15, 3.14, "string"], $data);
183
    }
184
    
185
    public function testToArray() {
186
        $this->list->push(20);
187
        $this->list->push(true);
188
        $this->list->push(15);
189
        $this->list->push(3.14);
190
        $this->list->push("string");
191
        $this->list->pop();
192
        $nodes = $this->list->toArray();
193
        $this->assertSame([20, true, 15, 3.14], $nodes);
194
    }
195
    
196
    public function testClear() {
197
        $this->list->push(20);
198
        $this->list->push(true);
199
        $this->list->push(15);
200
        $this->list->push(3.14);
201
        $this->list->push("string");
202
        $this->list->clear();
203
        $this->assertEmpty($this->list->toArray());
204
        $this->assertEquals($this->list->size(), 0);
205
    }
206
207
    /*
208
    public function testIterator() {
209
        $this->list->push(20);
210
        $this->list->push(true);
211
        $this->list->push(15);
212
        $this->list->push(3.14);
213
        $this->list->push("string");
214
215
        $this->list->shift();
216
        $this->assertEquals(4, count($this->list));
217
        $expectedResult = [];
218
        $result = [];
219
        foreach($this->list->getAll() as $node) {
220
            $expectedResult[] = $node;
221
        }
222
        
223
        foreach($this->list as $index => $val) {
224
            echo $index ." ----- ". $val . PHP_EOL;
225
            $result[] = $val;
226
        }
227
228
        $this->assertSame($expectedResult, $result);
229
    }
230
    */
231
}