Bug #53710 [Com]: Data registered with equal priority not returned in expected order

From: Date: Mon, 17 Jan 2011 18:44:45 +0000
Subject: Bug #53710 [Com]: Data registered with equal priority not returned in expected order
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-157962@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=53710&edit=1

 ID:                 53710
 Comment by:         daniel at berste dot in
 Reported by:        weierophinney@php.net
 Summary:            Data registered with equal priority not returned in
                     expected order
 Status:             Assigned
 Type:               Bug
 Package:            SPL related
 Operating System:   Linux 32-bit
 PHP Version:        5.3.5
 Assigned To:        colder
 Block user comment: N
 Private report:     N

 New Comment:

Reproduced on OSX (PHP compiled from MacPorts):

$ php --version
PHP 5.3.5 (cli) (built: Jan  9 2011 20:15:19) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

$ cat test.php 
<?php
$queue = new SplPriorityQueue();
$queue->insert('foo', 100);
$queue->insert('bar', 100);
$queue->insert('baz', 100);
$queue->insert('bat', 100);

foreach ($queue as $data) {
    echo $data, "\n";
}

$ php test.php 
foo
bat
baz
bar


Previous Comments:
------------------------------------------------------------------------
[2011-01-10 22:23:46] weierophinney@php.net

Description:
------------
SplPriorityQueue does not behave as expected when data is registered
with equal 
priority. One would expect one of the following situations:

 * The data retain the same order as how they were registered
 * The data are ordered based on value

Neither of these are the case, however. From empirical analysis, it
appears that 
the following happens:

 * The first item registered at that priority will always be the first
returned
 * The remaining items are returned in the reverse order in which they
were 
enqueued.

Test script:
---------------
$queue = new SplPriorityQueue();
$queue->insert('foo', 100);
$queue->insert('bar', 100);
$queue->insert('baz', 100);
$queue->insert('bat', 100);

foreach ($queue as $data) {
    echo $data, "\n";
}

Expected result:
----------------
// IDEALLY order in which they are registered:
foo
bar
baz
bat

// OR following same rules as priority queue -- higher values == higher
priority
foo
baz
bat
bar



Actual result:
--------------
foo
bat
baz
bar


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=53710&edit=1


Thread (4 messages)

« previous php.bugs (#157962) next »