public function testCleanupEfficiency() { // Cleanup operationally trivial equalities. $this->d->setEditCost(4); // Null case. $this->d->setChanges(array()); $this->d->cleanupEfficiency(); $this->assertEquals(array(), $this->d->getChanges()); // No elimination. $this->d->setChanges(array(array(Diff::DELETE, "ab"), array(Diff::INSERT, "12"), array(Diff::EQUAL, "wxyz"), array(Diff::DELETE, "cd"), array(Diff::INSERT, "34"))); $this->d->cleanupEfficiency(); $this->assertEquals(array(array(Diff::DELETE, "ab"), array(Diff::INSERT, "12"), array(Diff::EQUAL, "wxyz"), array(Diff::DELETE, "cd"), array(Diff::INSERT, "34")), $this->d->getChanges()); // Four-edit elimination. $this->d->setChanges(array(array(Diff::DELETE, "ab"), array(Diff::INSERT, "12"), array(Diff::EQUAL, "xyz"), array(Diff::DELETE, "cd"), array(Diff::INSERT, "34"))); $this->d->cleanupEfficiency(); $this->assertEquals(array(array(Diff::DELETE, "abxyzcd"), array(Diff::INSERT, "12xyz34")), $this->d->getChanges()); // Three-edit elimination. $this->d->setChanges(array(array(Diff::INSERT, "12"), array(Diff::EQUAL, "x"), array(Diff::DELETE, "cd"), array(Diff::INSERT, "34"))); $this->d->cleanupEfficiency(); $this->assertEquals(array(array(Diff::DELETE, "xcd"), array(Diff::INSERT, "12x34")), $this->d->getChanges()); // Backpass elimination. $this->d->setChanges(array(array(Diff::DELETE, "ab"), array(Diff::INSERT, "12"), array(Diff::EQUAL, "xy"), array(Diff::INSERT, "34"), array(Diff::EQUAL, "z"), array(Diff::DELETE, "cd"), array(Diff::INSERT, "56"))); $this->d->cleanupEfficiency(); $this->assertEquals(array(array(Diff::DELETE, "abxyzcd"), array(Diff::INSERT, "12xy34z56")), $this->d->getChanges()); // High cost elimination. $this->d->setEditCost(5); $this->d->setChanges(array(array(Diff::DELETE, "ab"), array(Diff::INSERT, "12"), array(Diff::EQUAL, "wxyz"), array(Diff::DELETE, "cd"), array(Diff::INSERT, "34"))); $this->d->cleanupEfficiency(); $this->assertEquals(array(array(Diff::DELETE, "abwxyzcd"), array(Diff::INSERT, "12wxyz34")), $this->d->getChanges()); $this->d->setEditCost(4); }
/** * Reduce the number of edits by eliminating operationally trivial equalities. * Modifies $diffs. * * @param array $diffs Array of diff arrays. */ public function diff_cleanupEfficiency(&$diffs) { $this->diff->setChanges($diffs); $this->diff->cleanupEfficiency(); $diffs = $this->diff->getChanges(); }