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

QueueTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 119
Duplicated Lines 47.9 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

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