Exemple #1
0
 /**
  * Rotates a left-leaning link to the right
  *
  * Assumes $node->left is red.
  *
  * @param RedBlackNode $node The node
  *
  * @return RedBlackNode
  */
 protected function rotateRight(RedBlackNode $node) : RedBlackNode
 {
     $link = $node->left();
     $node->setLeft($link->right());
     $link->setRight($node);
     $link->setColor($node->color());
     $node->setColor(RedBlackNode::RED);
     $link->setSize($node->size());
     $node->setSize(1 + $this->nodeSize($node->left()) + $this->nodeSize($node->right()));
     return $link;
 }
Exemple #2
0
 public function test_that_clone_includes_linked_nodes()
 {
     $monday = WeekDay::MONDAY();
     $node = new RedBlackNode($monday, 'Monday', 1, RedBlackNode::RED);
     $sunday = WeekDay::SUNDAY();
     $left = new RedBlackNode($sunday, 'Sunday', 1, RedBlackNode::RED);
     $node->setLeft($left);
     $tuesday = WeekDay::TUESDAY();
     $right = new RedBlackNode($tuesday, 'Tuesday', 1, RedBlackNode::RED);
     $node->setRight($right);
     $copy = clone $node;
     $node->setLeft(null);
     $node->setRight(null);
     $this->assertTrue($copy->left()->key()->equals($sunday));
 }