Skip to content

Commit aa926b0

Browse files
committed
Add test coverage
1 parent 8ea8727 commit aa926b0

File tree

8 files changed

+228
-5
lines changed

8 files changed

+228
-5
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ vendor
22
.idea
33
composer.lock
44
/phpunit.xml
5-
.phpunit.result.cache
5+
.phpunit.cache

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
}
1717
},
1818
"require": {
19-
"php": ">=7.3"
19+
"php": ">=7.3",
20+
"phpunit/php-code-coverage": "^9.2"
2021
},
2122
"require-dev": {
2223
"phpunit/phpunit": "^9",

tests/Interval/DateTimeIntervalTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
use InvalidArgumentException;
99
use PHPUnit\Framework\TestCase;
1010

11-
class DateTimeIntervalTest extends TestCase
11+
/**
12+
* @covers \Danon\IntervalTree\Interval\DateTimeInterval
13+
*/
14+
final class DateTimeIntervalTest extends TestCase
1215
{
1316
public function testConstruct(): void
1417
{
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
use PHPUnit\Framework\TestCase;
88
use Danon\IntervalTree\Interval\NumericInterval;
99

10-
final class IntegerIntervalTest extends TestCase
10+
/**
11+
* @covers \Danon\IntervalTree\Interval\NumericInterval
12+
*/
13+
final class NumericIntervalTest extends TestCase
1114
{
1215
public function testConstruct(): void
1316
{

tests/IntervalTreeTest.php

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use Danon\IntervalTree\IntervalTree;
88
use PHPUnit\Framework\TestCase;
99

10+
/**
11+
* @covers \Danon\IntervalTree\IntervalTree
12+
*/
1013
final class IntervalTreeTest extends TestCase
1114
{
1215
/** @var IntervalTree */
@@ -28,7 +31,13 @@ public function setUp(): void
2831
parent::setUp();
2932
}
3033

31-
public function testFindAllIntersections(): void
34+
/**
35+
* @uses \Danon\IntervalTree\Interval\NumericInterval
36+
* @uses \Danon\IntervalTree\Node
37+
* @uses \Danon\IntervalTree\NodeColor
38+
* @uses \Danon\IntervalTree\Pair
39+
*/
40+
public function testFindIntersections(): void
3241
{
3342
$checkInterval = [2, 3];
3443
$overlappingIntervals = [[0, 2], [0, 2], [0, 3], [1, 4], [2, 3], [3, 4]];
@@ -44,6 +53,12 @@ public function testFindAllIntersections(): void
4453
}
4554
}
4655

56+
/**
57+
* @uses \Danon\IntervalTree\Interval\NumericInterval
58+
* @uses \Danon\IntervalTree\Node
59+
* @uses \Danon\IntervalTree\NodeColor
60+
* @uses \Danon\IntervalTree\Pair
61+
*/
4762
public function testFindAnyIntersection(): void
4863
{
4964
self::assertTrue($this->tree->hasIntersection(NumericInterval::fromArray([2, 3])));
@@ -59,6 +74,12 @@ public function testFindAnyIntersection(): void
5974
self::assertFalse($this->tree->hasIntersection(NumericInterval::fromArray([6, 6])));
6075
}
6176

77+
/**
78+
* @uses \Danon\IntervalTree\Interval\NumericInterval
79+
* @uses \Danon\IntervalTree\Node
80+
* @uses \Danon\IntervalTree\NodeColor
81+
* @uses \Danon\IntervalTree\Pair
82+
*/
6283
public function testRemove(): void
6384
{
6485
$initialSize = $this->tree->getSize();
@@ -83,6 +104,12 @@ public function testRemove(): void
83104
self::assertEquals($this->tree->getSize(), $initialSize);
84105
}
85106

107+
/**
108+
* @uses \Danon\IntervalTree\Interval\NumericInterval
109+
* @uses \Danon\IntervalTree\Node
110+
* @uses \Danon\IntervalTree\NodeColor
111+
* @uses \Danon\IntervalTree\Pair
112+
*/
86113
public function testIsEmpty(): void
87114
{
88115
self::assertTrue((new IntervalTree())->isEmpty());

tests/NodeColorTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace Danon\IntervalTree\Tests;
4+
5+
use Danon\IntervalTree\NodeColor;
6+
use PHPUnit\Framework\TestCase;
7+
8+
/**
9+
* @covers \Danon\IntervalTree\NodeColor
10+
*/
11+
final class NodeColorTest extends TestCase
12+
{
13+
public function testBlack(): void
14+
{
15+
$nodeColor = NodeColor::black();
16+
self::assertTrue($nodeColor->isBlack());
17+
}
18+
19+
public function testRed(): void
20+
{
21+
$nodeColor = NodeColor::red();
22+
self::assertTrue($nodeColor->isRed());
23+
}
24+
}

tests/NodeTest.php

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
<?php
2+
3+
namespace Danon\IntervalTree\Tests;
4+
5+
use Danon\IntervalTree\Interval\NumericInterval;
6+
use Danon\IntervalTree\Node;
7+
use Danon\IntervalTree\NodeColor;
8+
use Danon\IntervalTree\Pair;
9+
use PHPUnit\Framework\TestCase;
10+
11+
/**
12+
* @covers \Danon\IntervalTree\Node
13+
*/
14+
class NodeTest extends TestCase
15+
{
16+
/**
17+
* @uses \Danon\IntervalTree\Pair
18+
* @uses \Danon\IntervalTree\Interval\NumericInterval
19+
*/
20+
public function testWithPair(): void
21+
{
22+
$node = Node::withPair(new Pair(NumericInterval::fromArray([1, 5]), 'val'));
23+
self::assertEquals(1, $node->getPair()->getInterval()->getLow());
24+
self::assertEquals(5, $node->getPair()->getInterval()->getHigh());
25+
self::assertEquals('val', $node->getPair()->getValue());
26+
}
27+
28+
/**
29+
* @uses \Danon\IntervalTree\NodeColor
30+
*/
31+
public function testNil(): void
32+
{
33+
$node = Node::nil();
34+
self::assertTrue($node->getColor()->isBlack());
35+
self::assertNull($node->getParent());
36+
}
37+
38+
/**
39+
* @uses \Danon\IntervalTree\Pair
40+
* @uses \Danon\IntervalTree\Interval\NumericInterval
41+
*/
42+
public function testGetParent(): void
43+
{
44+
$node = Node::withPair(new Pair(NumericInterval::fromArray([1, 5])));
45+
$parentNode = Node::withPair(new Pair(NumericInterval::fromArray([1, 2])));
46+
$node->setParent($parentNode);
47+
self::assertSame($node->getParent(), $parentNode);
48+
}
49+
50+
/**
51+
* @uses \Danon\IntervalTree\Pair
52+
* @uses \Danon\IntervalTree\Interval\NumericInterval
53+
*/
54+
public function testCopyPairFrom(): void
55+
{
56+
$node = Node::withPair(new Pair(NumericInterval::fromArray([1, 5])));
57+
$otherNode = Node::withPair(new Pair(NumericInterval::fromArray([0, 3])));
58+
$node->copyPairFrom($otherNode);
59+
self::assertTrue($node->equalTo($otherNode));
60+
}
61+
62+
/**
63+
* @uses \Danon\IntervalTree\Pair
64+
* @uses \Danon\IntervalTree\Interval\NumericInterval
65+
* @uses \Danon\IntervalTree\NodeColor
66+
*/
67+
public function testGetColor(): void
68+
{
69+
$node = Node::withPair(new Pair(NumericInterval::fromArray([1, 5])));
70+
$node->setColor(NodeColor::red());
71+
self::assertTrue($node->getColor()->isRed());
72+
$node->setColor(NodeColor::black());
73+
self::assertTrue($node->getColor()->isBlack());
74+
}
75+
76+
/**
77+
* @uses \Danon\IntervalTree\Pair
78+
* @uses \Danon\IntervalTree\Interval\NumericInterval
79+
*/
80+
public function testEqualTo(): void
81+
{
82+
$node = Node::withPair(new Pair(NumericInterval::fromArray([1, 5]), 'foo'));
83+
$sameNode = Node::withPair(new Pair(NumericInterval::fromArray([1, 5]), 'foo'));
84+
$otherNode = Node::withPair(new Pair(NumericInterval::fromArray([3, 4]), 'bar'));
85+
self::assertTrue($node->equalTo($sameNode));
86+
self::assertFalse($node->equalTo($otherNode));
87+
}
88+
89+
/**
90+
* @uses \Danon\IntervalTree\Pair
91+
* @uses \Danon\IntervalTree\Interval\NumericInterval
92+
* @covers \Danon\IntervalTree\Node::getRight
93+
*/
94+
public function testSetRight(): void
95+
{
96+
$node = Node::withPair(new Pair(NumericInterval::fromArray([1, 5])));
97+
$rightNode = Node::withPair(new Pair(NumericInterval::fromArray([1, 6])));
98+
$node->setRight($rightNode);
99+
self::assertSame($node->getRight(), $rightNode);
100+
}
101+
102+
/**
103+
* @uses \Danon\IntervalTree\Pair
104+
* @uses \Danon\IntervalTree\Interval\NumericInterval
105+
* @covers \Danon\IntervalTree\Node::getLeft
106+
*/
107+
public function testSetLeft(): void
108+
{
109+
$node = Node::withPair(new Pair(NumericInterval::fromArray([1, 5])));
110+
$leftNode = Node::withPair(new Pair(NumericInterval::fromArray([1, 6])));
111+
$node->setLeft($leftNode);
112+
self::assertSame($node->getLeft(), $leftNode);
113+
}
114+
}

tests/PairTest.php

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace Danon\IntervalTree\Tests;
4+
5+
use Danon\IntervalTree\Interval\NumericInterval;
6+
use Danon\IntervalTree\Pair;
7+
use PHPUnit\Framework\TestCase;
8+
9+
/**
10+
* @covers \Danon\IntervalTree\Pair
11+
*/
12+
final class PairTest extends TestCase
13+
{
14+
private const EXAMPLE_INTERVAL = [1, 5];
15+
private const EXAMPLE_VALUE = '1_5';
16+
17+
/**
18+
* @var Pair
19+
*/
20+
protected $pair;
21+
22+
public function setUp(): void
23+
{
24+
$this->pair = new Pair(
25+
NumericInterval::fromArray(self::EXAMPLE_INTERVAL),
26+
self::EXAMPLE_VALUE
27+
);
28+
29+
parent::setUp();
30+
}
31+
32+
/**
33+
* @uses \Danon\IntervalTree\Interval\NumericInterval
34+
*/
35+
public function testGetInterval(): void
36+
{
37+
self::assertTrue(
38+
$this->pair->getInterval()->equalTo(
39+
NumericInterval::fromArray(self::EXAMPLE_INTERVAL)
40+
)
41+
);
42+
}
43+
44+
/**
45+
* @uses \Danon\IntervalTree\Interval\NumericInterval
46+
*/
47+
public function testGetValue(): void
48+
{
49+
self::assertSame(self::EXAMPLE_VALUE, $this->pair->getValue());
50+
}
51+
}

0 commit comments

Comments
 (0)