which could avoid breaking usage like:
usort($a, function($a, $b) { return $a > $b; })
/* }}} */
static inline void zend_sort_2(void *a, void *b, compare_func_t cmp, swap_func_t swp) /* {{{ */ {
- if (cmp(a, b) <= 0) {
- return;
+ if (cmp(a, b) > 0) {
+ swp(a, b);
}
- swp(a, b);
}
/* }}} */
}
return;
}
- if (cmp(b, c) >= 0) {
+ if (cmp(c, b) <= 0) {
swp(a, c);
return;
}
}
if (j == start + siz) {
j -= siz;
- if (cmp(j, i) < 0) {
+ if (cmp(i, j) > 0) {
j += siz;
}
break;
i = pivot + siz;
j = end - siz;
while (1) {
- while (cmp(i, pivot) < 0) {
+ while (cmp(pivot, i) > 0) {
i += siz;
if (UNEXPECTED(i == j)) {
goto done;
if (UNEXPECTED(j == i)) {
goto done;
}
- while (cmp(pivot, j) < 0) {
+ while (cmp(j, pivot) > 0) {
j -= siz;
if (UNEXPECTED(j == i)) {
goto done;
--- /dev/null
+--TEST--
+Test usort() function : usage variations - binary return cmp
+--FILE--
+<?php
+
+function ucmp($a, $b) {
+ return $a > $b;
+}
+
+$range = array(2, 4, 8, 16, 32, 64, 128);
+
+foreach ($range as $r) {
+ $backup = $array = range(0, $r);
+ shuffle($array);
+ usort($array, "ucmp");
+ if ($array != $backup) {
+ var_dump($array);
+ var_dump($backup);
+ die("Whatever sorting algo you used, this test should never be broken");
+ }
+}
+echo "okey";
+?>
+--EXPECT--
+okey