Exemple #1
0
 /**
  * Asserts the complexity for an index
  *
  * The complexity is always O(log(n)).
  *
  * @param IndexGenerator $generator Index generator
  * @param SplitCounter   $counter   Split counter in binary search
  *
  * @return float
  */
 protected function assertComplexity(IndexGenerator $generator, SplitCounter $counter)
 {
     if (\count($counter) == 0) {
         return;
     }
     $this->assertLessThan(\log($generator->getIndexLength(), 2) * 2, \count($counter));
 }
 /**
  * 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);
     }
 }
Exemple #3
0
 /**
  * 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;
 }
 /**
  * @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()}]");
         }
     }
 }
Exemple #5
0
 /**
  * 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}");
     }
 }
 /**
  * Returns the characteristic properties of this index
  * 
  * This is used for the file name creation.
  *
  * @return array
  */
 protected function getIndexProperties()
 {
     return array_merge(parent::getIndexProperties(), array($this->indexFieldOffset, $this->getIndexFieldLength()));
 }