function testPositionCompareTo()
 {
     $pos = new LogootPosition(array(LogootId::IdMin(), LogootId::IdMin()));
     $pos1 = new LogootPosition(array(LogootId::IdMax(), LogootId::IdMax()));
     $this->assertEquals('-1', $pos->compareTo($pos1));
     $this->assertEquals('1', $pos1->compareTo($pos));
     $this->assertEquals('0', $pos->compareTo($pos));
     $this->assertEquals('0', $pos1->compareTo($pos1));
     $id1 = new LogootId("10000", "10000");
     $id2 = new LogootId("1000000", "1000000");
     $id3 = new LogootId("2000000", "2000000");
     $position1 = new LogootPosition(array($id1, $id3));
     $position2 = new LogootPosition(array($id2));
     $this->assertEquals('0', $position1->compareTo($position1));
     $this->assertEquals('-1', $position1->compareTo($position2));
     $this->assertEquals('1', $position2->compareTo($position1));
 }
Example #2
0
 /**
  * adapted binary search
  * -> an array with both positions in the array surrounding $position
  * @param <Object> $position LogootPosition
  * @return <array or Integer>
  */
 protected function dichoSearch(LogootPosition $position)
 {
     wfDebugLog('p2p', $this->clock . ' - function logootEngine::dichoSearch ');
     $arr = $this->model->getPositionlist();
     //avec les fausses lignes de début et de fin, on est certain
     //qu'il y a au moins deux lignes dans le tableau !
     $gauche = 0;
     $droite = count($arr) - 1;
     $val = NULL;
     // pas trouvée !
     if (count($arr) > 2) {
         $centre = round(($droite + $gauche) / 2);
         while ($centre != $droite && $centre != $gauche && !isset($val)) {
             if ($position->compareTo($arr[$centre]) == -1) {
                 $droite = $centre;
                 $centre = floor(($droite + $gauche) / 2);
             }
             if ($position->compareTo($arr[$centre]) == 1) {
                 $gauche = $centre;
                 $centre = round(($droite + $gauche) / 2);
             }
             if ($position->compareTo($arr[$centre]) == 0) {
                 $val = $centre;
             }
         }
     } else {
         /* with an array=2 */
         if ($position->compareTo($arr[$gauche]) == 0) {
             $val = $gauche;
         } elseif ($position->compareTo($arr[$droite]) == 0) {
             $val = $droite;
         }
     }
     return array(0 => $gauche, 1 => $val, 2 => $droite);
 }
Example #3
0
 function testPosGeneration()
 {
     $int = "5";
     $int1 = "6";
     $sid = "1";
     if ($int < $int1) {
         $id = new LogootId($int, $sid);
         $id1 = new LogootId($int1, $sid);
     } else {
         $id1 = new LogootId($int, $sid);
         $id = new LogootId($int1, $sid);
     }
     $pos = array($id);
     $pos1 = array($id1);
     $start = new LogootPosition($pos);
     $end = new LogootPosition($pos1);
     $model = manager::loadModel(0);
     $model->setPositionlist(array(0 => LogootPosition::minPosition(), 1 => $start, 2 => $end, 3 => LogootPosition::maxPosition()));
     $model->setLinelist(array(0 => "", 1 => 'start', 2 => 'end', 3 => ""));
     //$logoot = new logootEngine($model);
     $logoot = manager::getNewEngine($model);
     //insert X
     $oldContent = "start\nend";
     $newContent = "start\nline1\nend";
     $listOp1 = $logoot->generate($oldContent, $newContent);
     //$this->assertGreaterThan($end, $listOp1[0]->getLogootPosition());
     //$this->assertLessThan($end, $listOp1[0]->getLogootPosition());
     $this->assertEquals(1, $end->compareTo($listOp1[0]->getLogootPosition()));
     //$this->assertGreaterThan($start, $listOp1[0]->getLogootPosition());
     $this->assertEquals(-1, $start->compareTo($listOp1[0]->getLogootPosition()));
 }