73 lines
1.8 KiB
PHP
73 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace NoccyLabs\Dataset;
|
|
|
|
use ArrayIterator;
|
|
use Iterator;
|
|
|
|
class FilteringReaderIteratorTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
|
|
/**
|
|
* @covers FilteringReaderIterator
|
|
*/
|
|
public function testSimpleFiltering()
|
|
{
|
|
$arr = iterator_to_array(
|
|
new FilteringReaderIterator(
|
|
$this->getTestIterator(), [
|
|
"alpha" => 3
|
|
]));
|
|
|
|
$this->assertEquals(1, count($arr));
|
|
$this->assertEquals(3, $arr[2]['alpha']);
|
|
$this->assertEquals('red', $arr[2]['beta']);
|
|
$this->assertEquals(null, $arr[2]['gamma']);
|
|
|
|
}
|
|
|
|
/**
|
|
* @covers FilteringReaderIterator
|
|
*/
|
|
public function testFilteringOnRange()
|
|
{
|
|
$arr = iterator_to_array(
|
|
new FilteringReaderIterator(
|
|
$this->getTestIterator(), [
|
|
"alpha" => [ 'gt' => 2, 'lt' => 5 ]
|
|
]));
|
|
|
|
$this->assertEquals(2, count($arr));
|
|
}
|
|
|
|
/**
|
|
* @covers FilteringReaderIterator
|
|
*/
|
|
public function testFilteringOnRangeInclusive()
|
|
{
|
|
$arr = iterator_to_array(
|
|
new FilteringReaderIterator(
|
|
$this->getTestIterator(), [
|
|
"alpha" => [ 'gt' => 2, 'lte' => 5 ]
|
|
]));
|
|
|
|
$this->assertEquals(3, count($arr));
|
|
}
|
|
|
|
private function getTestData(): array
|
|
{
|
|
return [
|
|
[ 'alpha' => 1, 'beta' => 'green', 'gamma' => true ],
|
|
[ 'alpha' => 2, 'beta' => 'blue', 'gamma' => false ],
|
|
[ 'alpha' => 3, 'beta' => 'red', 'gamma' => null ],
|
|
[ 'alpha' => 4, 'beta' => 'yellow', 'gamma' => false ],
|
|
[ 'alpha' => 5, 'beta' => 'pink', 'gamma' => true ],
|
|
];
|
|
}
|
|
|
|
private function getTestIterator(): Iterator
|
|
{
|
|
return new ArrayIterator($this->getTestData());
|
|
}
|
|
}
|