/** * Tests increasing the sector count on large containers * * @return void */ public function testIncreaseSectorCount() { $generator = new FixedSizeIndexGenerator(); $oldReadLength = $generator->getIndex()->getKeyReader()->getReadLength(); $expectedFactor = 3; $generator->setIndexLength(100); $generator->setMinimumDataSize($oldReadLength * $expectedFactor); $index = $generator->getIndex(); $binarySearch = new index\BinarySearch($index); $this->assertNotEmpty($binarySearch->search(3)->getData()); $this->assertGreaterThanOrEqual($oldReadLength * $expectedFactor, $index->getKeyReader()->getReadLength()); }
/** * Tests finding all keys with different index configurations * * @dataProvider provideTestIndexConfiguration */ public function testIndexConfiguration($offset, $indexFieldLength, $length) { $generator = new FixedSizeIndexGenerator(); $generator->setIndexFieldOffset($offset); $generator->setIndexFieldLength($indexFieldLength); $generator->setIndexLength($length); $index = $generator->getIndex(); for ($key = 0; $key < $length; $key++) { $result = $index->search($key); $this->assertNotNull($result, "key: {$key}"); $this->assertRegExp('/data_' . $key . '_.*\\$/s', $result->getData(), "key: {$key}"); } }
/** * Test cases */ public function provideTestIteratorCases() { $cases = array(); // [0,9] -> [0] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(0)->getOffset(), index\Parser::HINT_RESULT_BOUNDARY); $iterator->setDirection(index\KeyReader::DIRECTION_BACKWARD); $cases[] = array($iterator, array(0)); // [0,9] -> [1,0] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(1)->getOffset(), index\Parser::HINT_RESULT_BOUNDARY); $iterator->setDirection(index\KeyReader::DIRECTION_BACKWARD); $cases[] = array($iterator, array(1, 0)); // [0,9] -> [0] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(1)->getOffset() - 1); $iterator->setDirection(index\KeyReader::DIRECTION_BACKWARD); $cases[] = array($iterator, array(0)); // [0,9] -> [9,0] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(9)->getOffset(), index\Parser::HINT_RESULT_BOUNDARY); $iterator->setDirection(index\KeyReader::DIRECTION_BACKWARD); $cases[] = array($iterator, array(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)); // [0,9] -> [9,0] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setDirection(index\KeyReader::DIRECTION_BACKWARD); $cases[] = array($iterator, array(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)); // [0,9] -> [9,0] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(9)->getOffset() - 1); $iterator->setDirection(index\KeyReader::DIRECTION_BACKWARD); $cases[] = array($iterator, array(8, 7, 6, 5, 4, 3, 2, 1, 0)); // [0,9] -> [8,9] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(8)->getOffset(), index\Parser::HINT_RESULT_BOUNDARY); $cases[] = array($iterator, array(8, 9)); // [0,9] -> [9] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(9)->getOffset(), index\Parser::HINT_RESULT_BOUNDARY); $cases[] = array($iterator, array(9)); // [0,9] -> [9] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(8)->getOffset() + 1); $cases[] = array($iterator, array(9)); // [0,9] -> [] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset($index->search(9)->getOffset() + 1); $cases[] = array($iterator, array()); // [0,9] -> [0,9] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $cases[] = array($iterator, array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)); // [0,9] -> [1,9] $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength(10); $index = $generator->getIndex(); $iterator = $index->getIterator(); $iterator->setOffset(1); $cases[] = array($iterator, array(1, 2, 3, 4, 5, 6, 7, 8, 9)); return $cases; }
/** * Test cases for testFailSearch() * * @return void */ public function provideTestFailSearch() { $cases = array(); // different sizes $lengths = array(0, 1, 10, IndexGenerator::getBlockSize() - 1, IndexGenerator::getBlockSize(), IndexGenerator::getBlockSize() + 1, IndexGenerator::getBlockSize() * 4); foreach ($lengths as $length) { // Fail searching for MIN(index) - 1 $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength($length); $generator->getIndex(); $cases[] = array($generator->getIndex(), $generator->getMinimum() - 1); // Fail searching for MAX(index) + 1 $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength($length); $generator->getIndex(); $cases[] = array($generator->getIndex(), $generator->getMaximum() + 1); // Fail searching for any missing key inside the index range $generator = new FixedSizeIndexGenerator(); $generator->setIndexLength($length); $generator->setStepSize(2); $generator->getIndex(); $cases[] = array($generator->getIndex(), $generator->getMaximum() / 2 + 0.1); } return $cases; }