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)); }
/** * 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); }
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())); }