QueueTest   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 177
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 13
lcom 1
cbo 2
dl 0
loc 177
rs 10
c 0
b 0
f 0

13 Methods

Rating   Name   Duplication   Size   Complexity  
A testQueuePushPop() 0 25 1
A testQueueShiftUnshift() 0 29 1
A testQueuePushAndUnshift() 0 11 1
A testQueuePopShiftPushAndUnshift() 0 15 1
A testQueuePushAll() 0 6 1
A testUnshiftAll() 0 6 1
A testQueueBottom() 0 5 1
A testQueueTop() 0 5 1
A testQueueIteration() 0 5 1
A testQueueOffsetGet() 0 8 1
A testQueueOffsetSet() 0 10 1
A testGetInvalidRange() 0 5 1
A testQueueOffsetUnset() 0 16 1
1
<?php
2
3
namespace itertools;
4
5
use PHPUnit_Framework_TestCase;
6
7
8
class QueueTest extends PHPUnit_Framework_TestCase
9
{
10
	/** @test */
11
	public function testQueuePushPop()
12
	{
13
		$queue = new Queue();
14
15
		$queue->push(1);
16
		$this->assertEquals(1, $queue->getMemoryUsageDataStructure(), 'Should have exponential memory growth');
17
18
		$queue->push(2);
19
		$this->assertEquals(2, $queue->getMemoryUsageDataStructure(), 'Should have exponential memory growth');
20
21
		$queue->push(3);
22
		$this->assertEquals(4, $queue->getMemoryUsageDataStructure(), 'Should have exponential memory growth');
23
24
		$this->assertEquals(3, $queue->count());
25
26
		$this->assertEquals(3, $queue->pop());
27
		$this->assertEquals(4, $queue->getMemoryUsageDataStructure(), 'Memory usage should never shrink');
28
29
		$this->assertEquals(2, $queue->count());
30
31
		$this->assertEquals(2, $queue->pop());
32
		$this->assertEquals(1, $queue->pop());
33
34
		$this->assertEquals(0, $queue->count());
35
	}
36
37
	/** @test */
38
	public function testQueueShiftUnshift()
39
	{
40
		$queue = new Queue();
41
42
		$queue->unshift(1);
43
		$this->assertEquals(1, $queue->offsetGet(0));
44
		$this->assertEquals(1, $queue->getMemoryUsageDataStructure(), 'Should have exponential memory growth');
45
46
		$queue->unshift(2);
47
		$this->assertEquals(2, $queue->offsetGet(0));
48
		$this->assertEquals(2, $queue->getMemoryUsageDataStructure(), 'Should have exponential memory growth');
49
50
		$queue->unshift(3);
51
		$this->assertEquals(3, $queue->offsetGet(0));
52
		$this->assertEquals(4, $queue->getMemoryUsageDataStructure(), 'Should have exponential memory growth');
53
54
		$this->assertEquals(3, $queue->count());
55
56
57
		$this->assertEquals(3, $queue->shift());
58
		$this->assertEquals(4, $queue->getMemoryUsageDataStructure(), 'Memory usage should never shrink');
59
60
		$this->assertEquals(2, $queue->count());
61
62
		$this->assertEquals(2, $queue->shift());
63
		$this->assertEquals(1, $queue->shift());
64
65
		$this->assertEquals(0, $queue->count());
66
	}
67
68
	/** @test */
69
	public function testQueuePushAndUnshift()
70
	{
71
		$queue = new Queue();
72
		$queue->push(4);
73
		$queue->unshift(3);
74
		$queue->push(5);
75
		$queue->unshift(2);
76
		$queue->push(6);
77
		$queue->unshift(1);
78
		$this->assertEquals(array(1, 2, 3, 4, 5, 6), $queue->asArray());
79
	}
80
81
	/** @test */
82
	public function testQueuePopShiftPushAndUnshift()
83
	{
84
		$queue = new Queue();
85
		$queue->push(4);
86
		$queue->unshift('a');
87
		$queue->push(5);
88
		$queue->shift();
89
		$queue->push('b');
90
		$queue->unshift(3);
91
		$queue->pop();
92
		$queue->unshift(2);
93
		$queue->push(6);
94
		$queue->unshift(1);
95
		$this->assertEquals(array(1, 2, 3, 4, 5, 6), $queue->asArray());
96
	}
97
98
	/** @test */
99
	public function testQueuePushAll()
100
	{
101
		$queue = new Queue();
102
		$queue->pushAll(array(1, 2, 3));
103
		$this->assertEquals(array(1, 2, 3), $queue->asArray());
104
	}
105
106
	/** @test */
107
	public function testUnshiftAll()
108
	{
109
		$queue = new Queue();
110
		$queue->unshiftAll(array(1, 2, 3));
111
		$this->assertEquals(array(3, 2, 1), $queue->asArray());
112
	}
113
114
	/** @test */
115
	public function testQueueBottom()
116
	{
117
		$queue = new Queue(array(1, 2, 3));
118
		$this->assertEquals(1, $queue->bottom());
119
	}
120
121
	/** @test */
122
	public function testQueueTop()
123
	{
124
		$queue = new Queue(array(1, 2, 3));
125
		$this->assertEquals(3, $queue->top());
126
	}
127
128
	/** @test */
129
	public function testQueueIteration()
130
	{
131
		$queue = new Queue(array(1, 2, 3));
132
		$this->assertEquals(array(1, 2, 3), $queue->asArray());
133
	}
134
135
	/** @test */
136
	public function testQueueOffsetGet()
137
	{
138
		$queue = new Queue(array(-1, 0, 1, 2, 3));
139
		$queue->shift();
140
		$queue->push(4);
141
		$this->assertEquals(1, $queue->get(1));
142
		$this->assertEquals(2, $queue->offsetGet(2));
143
	}
144
145
	/** @test */
146
	public function testQueueOffsetSet()
147
	{
148
		$queue = new Queue(array(-1, 0, 1, 2, 3));
149
		$queue->shift();
150
		$queue->push(4);
151
		$queue->set(0, 'a');
152
		$queue->offsetSet(1, 'b');
153
		$queue->offsetSet(5, 'f');
154
		$this->assertEquals(array('a', 'b', 2, 3, 4, 'f'), $queue->asArray());
155
	}
156
157
	/**
158
	 * @test
159
	 * @expectedException \OutOfBoundsException
160
	 */
161
	public function testGetInvalidRange()
162
	{
163
		$queue = new Queue(array(0, 1, 2, 3));
164
		$queue->get(4);
165
	}
166
167
	/** @test */
168
	public function testQueueOffsetUnset()
169
	{
170
		$queue = new Queue(array(0, 1, 2, 3, 4));
171
		$queue->offsetUnset(2);
172
		$this->assertEquals(array(0, 1, 3, 4), $queue->asArray());
173
		$queue->offsetUnset(0);
174
		$this->assertEquals(array(1, 3, 4), $queue->asArray());
175
		$queue->offsetUnset(2);
176
		$this->assertEquals(array(1, 3), $queue->asArray());
177
178
		$queue->shift();
179
		$queue->pushAll(array(4, 5, 6, 7, 8, 9));
180
		$this->assertEquals(range(3, 9), $queue->asArray());
181
		$queue->offsetUnset(1);
182
		$this->assertEquals(array(3, 5, 6, 7, 8, 9), $queue->asArray());
183
	}
184
}
185
186