/** * Tests searching * * @param IndexGenerator $generator Index generator * * @return void * @dataProvider provideTestSearch */ public function testSearch(IndexGenerator $generator) { $index = $generator->getIndex(); foreach ($generator->getKeys() as $key) { $result = $index->search($key); $this->assertNotNull($result, "key: {$key}, max: {$generator->getMaximum()}," . " step: {$generator->getStepSize()}" . " length: {$generator->getIndexLength()}"); $expected = preg_quote($generator->generateData($key)); $this->assertRegExp("/{$expected}/", $result->getData()); } }
/** * Test for the search complexity * * @dataProvider provideTestComplexity */ public function testComplexity(IndexGenerator $generator) { $index = $generator->getIndex(); foreach ($index as $result) { $counter = new SplitCounter(); $index->search($result->getKey()); $counter->stopCounting(); $this->assertComplexity($generator, $counter); } }
/** * @dataProvider provideTestAllValidRanges */ public function testAllValidRanges(IndexGenerator $generator) { $index = $generator->getIndex(); for ($length = 0; $length <= $generator->getIndexLength(); $length++) { for ($min = $generator->getMinimum(); $min + $length <= $generator->getMaximum(); $min++) { $range = new index\Range($min, $min + $length); $range->setInclusive(true); $foundKeys = index\IteratorUtil::toKeysArray($index->searchRange($range)); $expectedKeys = array(); for ($key = $range->getMin(); $key <= $range->getMax(); $key++) { $expectedKeys[] = $key; } $this->assertEquals($expectedKeys, $foundKeys, "failed range[{$range->getMin()}, {$range->getMax()}] for index[{$generator->getMinimum()}, {$generator->getMaximum()}]"); } } }
/** * Tests iterating with a different offset * * @dataProvider provideTestCases */ public function testOffset(IndexGenerator $generator) { $index = $generator->getIndex(); $expectedResults = array(); foreach ($index->getIterator() as $result) { $expectedResults[] = $result; } for ($offset = 0; $offset < $index->getFile()->getFileSize(); $offset++) { // shift $expectedResults after passing the first offset if (isset($expectedResults[0]) && $offset > $expectedResults[0]->getOffset()) { array_shift($expectedResults); } $iterator = $index->getIterator(); if (isset($expectedResults[0]) && $offset == $expectedResults[0]->getOffset()) { $iterator->setOffset($offset, index\Parser::HINT_RESULT_BOUNDARY); } else { $iterator->setOffset($offset); } $results = array(); foreach ($iterator as $result) { $results[] = $result; } $expectedArray = $this->toPrimitiveResultArray($expectedResults); $resultArray = $this->toPrimitiveResultArray($results); $this->assertEquals($expectedArray, $resultArray, "not equal at offset {$offset}"); } }