Fixed unsetting from loosely equal keys OrderedHashMap
This commit is contained in:
parent
e98033576a
commit
ba37cba6c2
|
@ -56,6 +56,15 @@ class OrderedHashMapTest extends TestCase
|
|||
$this->assertSame(array(0 => 1, 'foo' => 2, 1 => 3), iterator_to_array($map));
|
||||
}
|
||||
|
||||
public function testInsertLooselyEqualKeys()
|
||||
{
|
||||
$map = new OrderedHashMap();
|
||||
$map['1 as a string'] = '1 as a string';
|
||||
$map[1] = 1;
|
||||
|
||||
$this->assertSame(array('1 as a string' => '1 as a string', 1 => 1), iterator_to_array($map));
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates should not change the position of an element, otherwise we could
|
||||
* turn foreach loops into endless loops if they change the current
|
||||
|
@ -111,6 +120,17 @@ class OrderedHashMapTest extends TestCase
|
|||
$this->assertSame(array('second' => 2), iterator_to_array($map));
|
||||
}
|
||||
|
||||
public function testUnsetFromLooselyEqualKeysHashMap()
|
||||
{
|
||||
$map = new OrderedHashMap();
|
||||
$map['1 as a string'] = '1 as a string';
|
||||
$map[1] = 1;
|
||||
|
||||
unset($map[1]);
|
||||
|
||||
$this->assertSame(array('1 as a string' => '1 as a string'), iterator_to_array($map));
|
||||
}
|
||||
|
||||
public function testUnsetNonExistingSucceeds()
|
||||
{
|
||||
$map = new OrderedHashMap();
|
||||
|
|
|
@ -133,7 +133,7 @@ class OrderedHashMap implements \ArrayAccess, \IteratorAggregate, \Countable
|
|||
: 1 + (int) max($this->orderedKeys);
|
||||
}
|
||||
|
||||
$this->orderedKeys[] = $key;
|
||||
$this->orderedKeys[] = (string) $key;
|
||||
}
|
||||
|
||||
$this->elements[$key] = $value;
|
||||
|
@ -144,7 +144,7 @@ class OrderedHashMap implements \ArrayAccess, \IteratorAggregate, \Countable
|
|||
*/
|
||||
public function offsetUnset($key)
|
||||
{
|
||||
if (false !== ($position = array_search($key, $this->orderedKeys))) {
|
||||
if (false !== ($position = array_search((string) $key, $this->orderedKeys))) {
|
||||
array_splice($this->orderedKeys, $position, 1);
|
||||
unset($this->elements[$key]);
|
||||
|
||||
|
|
|
@ -118,7 +118,13 @@ class OrderedHashMapIterator implements \Iterator
|
|||
*/
|
||||
public function key()
|
||||
{
|
||||
return $this->key;
|
||||
if (null === $this->key) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$array = array($this->key => null);
|
||||
|
||||
return key($array);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Reference in New Issue