Skip to content

Commit e1f1afe

Browse files
committed
Fixed Queue/Stack classes
1 parent a047f0f commit e1f1afe

File tree

6 files changed

+200
-5
lines changed

6 files changed

+200
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
/**
3+
* MIT License
4+
*
5+
* Copyright (c) 2018 Dogan Ucar
6+
*
7+
* Permission is hereby granted, free of charge, to any person obtaining a copy
8+
* of this software and associated documentation files (the "Software"), to deal
9+
* in the Software without restriction, including without limitation the rights
10+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
* copies of the Software, and to permit persons to whom the Software is
12+
* furnished to do so, subject to the following conditions:
13+
*
14+
* The above copyright notice and this permission notice shall be included in all
15+
* copies or substantial portions of the Software.
16+
*
17+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
* SOFTWARE.
24+
*/
25+
26+
namespace doganoo\PHPAlgorithms\Datastructure\Stackqueue;
27+
28+
/**
29+
* Class FixedQueue extends Queue
30+
*
31+
* @package doganoo\PHPAlgorithms\Datastructure\Stackqueue
32+
*/
33+
class FixedQueue extends Queue {
34+
/** @var int $maxSize the maximum number of elements which is capable by the queue */
35+
private $maxSize = 0;
36+
37+
/**
38+
* FixedQueue constructor.
39+
*
40+
* @param int $maxSize
41+
*/
42+
public function __construct(int $maxSize) {
43+
$this->maxSize = $maxSize;
44+
}
45+
46+
/**
47+
* returns whether the element is valid or not.
48+
* Checks among other things also the number of elements
49+
*
50+
* @return bool
51+
*/
52+
protected function isValid(): bool {
53+
$parent = parent::isValid();
54+
$maxSize = parent::queueSize() < $this->maxSize;
55+
return $parent && $maxSize;
56+
}
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
/**
3+
* MIT License
4+
*
5+
* Copyright (c) 2018 Dogan Ucar
6+
*
7+
* Permission is hereby granted, free of charge, to any person obtaining a copy
8+
* of this software and associated documentation files (the "Software"), to deal
9+
* in the Software without restriction, including without limitation the rights
10+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
* copies of the Software, and to permit persons to whom the Software is
12+
* furnished to do so, subject to the following conditions:
13+
*
14+
* The above copyright notice and this permission notice shall be included in all
15+
* copies or substantial portions of the Software.
16+
*
17+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
* SOFTWARE.
24+
*/
25+
26+
namespace doganoo\PHPAlgorithms\Datastructure\Stackqueue;
27+
28+
/**
29+
* Class FixedStack extends Stack
30+
*
31+
* @package doganoo\PHPAlgorithms\Datastructure\Stackqueue
32+
*/
33+
class FixedStack extends Stack {
34+
/** @var int $maxSize the maximum number of elements which is capable by the stack */
35+
private $maxSize = 0;
36+
37+
/**
38+
* FixedStack constructor.
39+
*
40+
* @param int $maxSize
41+
*/
42+
public function __construct(int $maxSize) {
43+
$this->maxSize = $maxSize;
44+
}
45+
46+
/**
47+
* returns whether the element is valid or not.
48+
* Checks among other things also the number of elements
49+
*
50+
* @return bool
51+
*/
52+
protected function isValid(): bool {
53+
$parent = parent::isValid();
54+
$maxSize = parent::stackSize() < $this->maxSize;
55+
//echo parent::stackSize();
56+
//echo "\n";
57+
//echo $this->maxSize;
58+
//echo "\n";
59+
return $parent && $maxSize;
60+
}
61+
62+
}

src/Datastructure/Stackqueue/Queue.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public function enqueue($item): bool {
6868
*
6969
* @return bool
7070
*/
71-
private function isValid(): bool {
71+
protected function isValid(): bool {
7272
return $this->queue !== null;
7373
}
7474

src/Datastructure/Stackqueue/Stack.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public function push($item): bool {
8181
*
8282
* @return bool
8383
*/
84-
private function isValid(): bool {
84+
protected function isValid(): bool {
8585
return $this->stack !== null;
8686
}
8787

@@ -90,7 +90,7 @@ private function isValid(): bool {
9090
*
9191
*/
9292
public function peek() {
93-
if (!$this->isValid()) {
93+
if ($this->stack === null) {
9494
return null;
9595
}
9696
if ($this->stackSize() == 0) {
@@ -118,7 +118,7 @@ public function stackSize(): int {
118118
* @return bool
119119
*/
120120
public function pop(): bool {
121-
if (!$this->isValid()) {
121+
if ($this->stack === null) {
122122
return false;
123123
}
124124
if ($this->isEmpty()) {

tests/StackQueue/FixedStackTest.php

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
/**
3+
* MIT License
4+
*
5+
* Copyright (c) 2018 Dogan Ucar, <dogan@dogan-ucar.de>
6+
*
7+
* Permission is hereby granted, free of charge, to any person obtaining a copy
8+
* of this software and associated documentation files (the "Software"), to deal
9+
* in the Software without restriction, including without limitation the rights
10+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
* copies of the Software, and to permit persons to whom the Software is
12+
* furnished to do so, subject to the following conditions:
13+
*
14+
* The above copyright notice and this permission notice shall be included in all
15+
* copies or substantial portions of the Software.
16+
*
17+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
* SOFTWARE.
24+
*/
25+
26+
use doganoo\PHPAlgorithms\Datastructure\Stackqueue\FixedQueue;
27+
use doganoo\PHPAlgorithms\Datastructure\Stackqueue\FixedStack;
28+
29+
/**
30+
* Class StackQueueTest class testing Stacks and Queues
31+
*/
32+
class FixedStackTest extends \PHPUnit\Framework\TestCase {
33+
/**
34+
* Stack class test
35+
*/
36+
public function testStack() {
37+
$stack = new FixedStack(2);
38+
$added = $stack->push(new stdClass());
39+
$this->assertTrue($added === true);
40+
$stack->push(new Exception());
41+
$this->assertTrue($stack->isEmpty() == false);
42+
$this->assertTrue($stack->stackSize() === 2);
43+
$added = $stack->push(new stdClass());
44+
$this->assertTrue($added === false);
45+
$this->assertTrue($stack->stackSize() === 2);
46+
47+
$class = $stack->peek();
48+
$this->assertTrue($class instanceof Exception);
49+
$this->assertTrue($stack->isEmpty() == false);
50+
51+
$class = $stack->peek();
52+
$this->assertTrue($class instanceof stdClass);
53+
$this->assertTrue($stack->isEmpty() == true);
54+
}
55+
56+
/**
57+
* Queue class test
58+
*/
59+
public function testQueue() {
60+
$queue = new FixedQueue(2);
61+
$queue->enqueue(new stdClass());
62+
$queue->enqueue(new Exception());
63+
$this->assertTrue($queue->isEmpty() == false);
64+
$added = $queue->enqueue(new Exception());
65+
$this->assertTrue($added === false);
66+
$this->assertTrue($queue->queueSize() === 2);
67+
68+
$class = $queue->dequeue();
69+
$this->assertTrue($class instanceof Exception);
70+
$this->assertTrue($queue->isEmpty() == false);
71+
72+
$class = $queue->dequeue();
73+
$this->assertTrue($class instanceof stdClass);
74+
$this->assertTrue($queue->isEmpty() == true);
75+
}
76+
}

tests/StackQueue/StackTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
/**
3030
* Class StackQueueTest class testing Stacks and Queues
3131
*/
32-
class StackQueueTest extends \PHPUnit\Framework\TestCase {
32+
class StackTest extends \PHPUnit\Framework\TestCase {
3333
/**
3434
* Stack class test
3535
*/

0 commit comments

Comments
 (0)