public function testCopyAndMergeWithPriorities()
{
$this->setUpPriorities();
$map1 = new TPriorityMap();
$map1->add('key1', $this->item1);
$map1->add('keyc', 'valuec');
$map1->copyFrom($this->map);
$this->assertEquals(5, $map1->getCount());
$array = $map1->toArray();
$ordered_keys = array_keys($array);
$this->assertEquals('key3', $ordered_keys[0]);
$this->assertEquals('key5', $ordered_keys[1]);
$this->assertEquals('key1', $ordered_keys[2]);
$this->assertEquals('key2', $ordered_keys[3]);
$this->assertEquals('key4', $ordered_keys[4]);
$ordered_values = array_values($array);
$this->assertEquals($this->item3, $ordered_values[0]);
$this->assertEquals($this->item5, $ordered_values[1]);
$this->assertEquals($this->item1, $ordered_values[2]);
$this->assertEquals($this->item2, $ordered_values[3]);
$this->assertEquals($this->item4, $ordered_values[4]);
$map2 = new TPriorityMap();
$map2->add('startkey', 'startvalue', -1000);
$map2->add('key5', 'value5', 40);
$map2->add('endkey', 'endvalue', 1000);
$map2->mergeWith($this->map);
$this->assertEquals(7, $map2->getCount());
$array = $map2->toArray();
$ordered_keys = array_keys($array);
$this->assertEquals('startkey', $ordered_keys[0]);
$this->assertEquals('key3', $ordered_keys[1]);
$this->assertEquals('key5', $ordered_keys[2]);
$this->assertEquals('key1', $ordered_keys[3]);
$this->assertEquals('key2', $ordered_keys[4]);
$this->assertEquals('key4', $ordered_keys[5]);
$this->assertEquals('endkey', $ordered_keys[6]);
$ordered_values = array_values($array);
$this->assertEquals('startvalue', $ordered_values[0]);
$this->assertEquals($this->item3, $ordered_values[1]);
$this->assertEquals($this->item5, $ordered_values[2]);
$this->assertEquals($this->item1, $ordered_values[3]);
$this->assertEquals($this->item2, $ordered_values[4]);
$this->assertEquals($this->item4, $ordered_values[5]);
$this->assertEquals('endvalue', $ordered_values[6]);
$this->assertEquals(1, $map2->priorityAt('key5'));
$this->assertEquals(1, $map2->priorityOf($this->item5));
}