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

StackTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 129
Duplicated Lines 73.64 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 2
dl 95
loc 129
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\Exceptions\FullException;
6
use DataStructures\Lists\Stack;
7
use PHPUnit\Framework\TestCase;
8
9
class StackTest extends TestCase {
10
    private $stack;
11
12
    public function testContructMaxSize() {
13
        $this->expectException(\InvalidArgumentException::class);
14
        $this->stack = new Stack(-1);
15
    }
16
    
17
    public function testPushWithMaxSize() {
18
        $this->stack = new Stack(5);
19
        $this->stack->push(1);
20
        $this->assertEquals($this->stack->peek(), 1);
21
        $this->stack->push(2);
22
        $this->assertEquals($this->stack->peek(), 2);
23
        $this->stack->push(3);
24
        $this->assertEquals($this->stack->peek(), 3);
25
        $this->stack->push(4);
26
        $this->stack->push(5);
27
        $this->expectException(FullException::class);
28
        $this->stack->push(6);
29
    }
30
    
31
    public function testPush() {
32
        $this->stack = new Stack();
33
        $this->stack->push(1);
34
        $this->stack->push(2);
35
        $this->stack->push(3);
36
        $this->stack->push(4);
37
        $this->stack->push(5);
38
        $this->assertEquals($this->stack->size(), 5);
39
        $this->assertEquals($this->stack->peek(), 5);
40
    }
41
    
42
    public function testPop() {
43
        $this->stack = new Stack();
44
        $this->assertNull($this->stack->pop());
45
        $this->stack->push(1);
46
        $this->stack->push(2);
47
        $this->stack->push(3);
48
        $this->stack->push(4);
49
        $this->stack->push(5);
50
        $this->assertEquals($this->stack->pop(), 5);
51
        $this->assertEquals($this->stack->pop(), 4);
52
        $this->assertEquals($this->stack->pop(), 3);
53
        $this->assertEquals($this->stack->pop(), 2);
54
        $this->assertEquals($this->stack->pop(), 1);
55
    }
56
    
57
    public function testDequeueWithMaxSize() {
58
        $this->stack = new Stack(4);
59
        $this->stack->push(1);
60
        $this->stack->push(2);
61
        $this->stack->push(3);
62
        $this->stack->push(5);
63
        $this->expectException(FullException::class);
64
        $this->stack->push(6);
65
    }
66
    
67
    public function testSize() {
68
        $this->stack = new Stack();
69
        $this->assertEquals($this->stack->size(), 0);
70
        $this->stack->push(1);
71
        $this->assertEquals($this->stack->size(), 1);
72
        $this->stack->push(2);
73
        $this->assertEquals($this->stack->size(), 2);
74
        $this->stack->push(3);
75
        $this->assertEquals($this->stack->size(), 3);
76
        $this->stack->push(4);
77
        $this->assertEquals($this->stack->size(), 4);
78
        $this->stack->push(5);
79
        $this->assertEquals($this->stack->size(), 5);
80
    }
81
82
    public function testEmpty() {
83
        $this->stack = new Stack();
84
        $this->assertTrue($this->stack->empty());
85
        $this->stack->push(true);
86
        $this->assertFalse($this->stack->empty());
87
        $this->stack->push("string");
88
        $this->stack->push(3.14);
89
        $this->stack->pop();
90
        $this->stack->pop();
91
        $this->stack->pop();
92
        $this->assertTrue($this->stack->empty());
93
    }
94
    
95
    public function testPeek() {
96
        $this->stack = new Stack();
97
        $this->assertNull($this->stack->peek());
98
        $this->stack->push(1000);
99
        $this->assertEquals($this->stack->peek(), 1000);
100
        $this->stack->push(false);
101
        $this->assertEquals($this->stack->peek(), false);
102
        $this->stack->push(3.14);
103
        $this->assertEquals($this->stack->peek(), 3.14);
104
        $this->stack->push(4);
105
        $this->assertEquals($this->stack->pop(), 4);
106
        $this->assertEquals($this->stack->peek(), 3.14);
107
        $this->assertEquals($this->stack->pop(), 3.14);
108
        $this->assertEquals($this->stack->peek(), false);
109
        $this->assertEquals($this->stack->pop(), false);
110
        $this->assertEquals($this->stack->peek(), 1000);
111
        $this->assertEquals($this->stack->pop(), 1000);
112
        $this->assertNull($this->stack->peek());
113
    }
114
    
115
    public function testIsFull() {
116
        $this->stack = new Stack();
117
        $this->assertFalse($this->stack->isFull());
118
        $this->stack->push(['hello']);
119
        $this->stack->push(false);
120
        $this->stack->push(['hello']);
121
        $this->stack->push(false);
122
        $this->stack->push(['hello']);
123
        $this->stack->push(false);
124
        $this->stack->push(['hello']);
125
        $this->stack->push(false);
126
        $this->assertFalse($this->stack->isFull());
127
    }
128
129
    public function testIsFullWithMaxSize() {
130
        $this->stack = new Stack(2);
131
        $this->stack->push(['hello']);
132
        $this->stack->push(false);
133
        $this->assertTrue($this->stack->isFull());
134
        $this->stack->pop();
135
        $this->assertFalse($this->stack->isFull());
136
    }
137
}