/**
  * Proxy setting properties to real objects.
  *
  * @param string $name  Property name.
  * @param mixed  $value Property value.
  *
  * @throws \UnexpectedValueException If property unknown.
  * @return float
  */
 public function __set($name, $value)
 {
     switch ($name) {
         case 'Diff_Timeout':
             $this->diff->setTimeout($value);
             break;
         case 'Diff_EditCost':
             $this->diff->setEditCost($value);
             break;
         case 'Match_Threshold':
             $this->match->setThreshold($value);
             break;
         case 'Match_Distance':
             $this->match->setDistance($value);
             break;
         case 'Match_MaxBits':
             $this->match->setMaxBits($value);
             break;
         case 'Patch_DeleteThreshold':
             $this->patch->setDeleteTreshold($value);
             break;
         case 'Patch_Margin':
             $this->patch->setMargin($value);
             break;
         default:
             throw new \UnexpectedValueException('Unknown property: ' . $name);
     }
 }
 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);
 }