diff options
Diffstat (limited to 'ext/standard/tests/array')
19 files changed, 706 insertions, 16 deletions
diff --git a/ext/standard/tests/array/array_diff_key.phpt b/ext/standard/tests/array/array_diff_key.phpt index 91664a871..765431f12 100644 --- a/ext/standard/tests/array/array_diff_key.phpt +++ b/ext/standard/tests/array/array_diff_key.phpt @@ -66,13 +66,13 @@ function comp_func($a, $b) { ------ Test 1 -------- array(4) { [1]=> - &int(2) + int(2) [6]=> - &int(12) + int(12) [15]=> - &int(30) + int(30) [1200]=> - &int(2400) + int(2400) } array(4) { [1]=> @@ -188,11 +188,11 @@ array(3) { ------ Test 7 -------- array(3) { [7]=> - &int(14) + int(14) [11]=> - &int(22) + int(22) [1100]=> - &int(2200) + int(2200) } array(3) { [7]=> diff --git a/ext/standard/tests/array/array_flip.phpt b/ext/standard/tests/array/array_flip.phpt index 27b14fdd9..af26fd80c 100644 --- a/ext/standard/tests/array/array_flip.phpt +++ b/ext/standard/tests/array/array_flip.phpt @@ -14,6 +14,13 @@ $trans = array("a" => 1, 2 => "i");
$trans = array_flip($trans);
var_dump($trans);
+
+var_dump(array_flip());
+var_dump(array_flip(array()));
+var_dump(array_flip(array(1)));
+var_dump(array_flip(array(array())));
+
+echo "Done\n";
?>
--EXPECTF--
Warning: array_flip(): Can only flip STRING and INTEGER values! in %s on line %d
@@ -35,3 +42,17 @@ array(6) { ["i"]=>
int(2)
}
+
+Warning: Wrong parameter count for array_flip() in %s on line %d
+NULL
+array(0) {
+}
+array(1) {
+ [1]=>
+ int(0)
+}
+
+Warning: array_flip(): Can only flip STRING and INTEGER values! in %s on line %d
+array(0) {
+}
+Done
diff --git a/ext/standard/tests/array/array_intersect_key.phpt b/ext/standard/tests/array/array_intersect_key.phpt index 6a5965ba7..6d2783940 100644 --- a/ext/standard/tests/array/array_intersect_key.phpt +++ b/ext/standard/tests/array/array_intersect_key.phpt @@ -62,9 +62,9 @@ function comp_func($a, $b) { --EXPECTF-- array(3) { [2]=> - &int(4) + int(4) [-20]=> - &int(-40) + int(-40) [-2500]=> &int(-5000) } @@ -138,11 +138,11 @@ array(1) { } array(4) { [0]=> - &int(0) + int(0) [2]=> - &int(4) + int(4) [-20]=> - &int(-40) + int(-40) [-2500]=> &int(-5000) } diff --git a/ext/standard/tests/array/array_key_exists.phpt b/ext/standard/tests/array/array_key_exists.phpt new file mode 100644 index 000000000..e7b6c0677 --- /dev/null +++ b/ext/standard/tests/array/array_key_exists.phpt @@ -0,0 +1,40 @@ +--TEST-- +array_key_exists() tests +--FILE-- +<?php + +var_dump(array_key_exists()); +var_dump(array_key_exists(array(), array())); +var_dump(array_key_exists("", "")); +var_dump(array_key_exists("", array())); +var_dump(array_key_exists(1, array())); + +var_dump(array_key_exists(1, array(1,2,3))); +var_dump(array_key_exists("a", array(3,2,1,"a"=>1))); +var_dump(array_key_exists("a", array(3,2,1))); +var_dump(array_key_exists(NULL, array(5,6,7,""=>"value", 3,2,1))); +var_dump(array_key_exists(NULL, array(5,6,7,3,2,1))); +var_dump(array_key_exists(false, array(5,6,7,""=>"value", 3,2,1))); + +echo "Done\n"; +?> +--EXPECTF-- +Warning: Wrong parameter count for array_key_exists() in %s on line %d +NULL + +Warning: array_key_exists(): The first argument should be either a string or an integer in %s on line %d +bool(false) + +Warning: array_key_exists(): The second argument should be either an array or an object in %s on line %d +bool(false) +bool(false) +bool(false) +bool(true) +bool(true) +bool(false) +bool(true) +bool(false) + +Warning: array_key_exists(): The first argument should be either a string or an integer in %s on line %d +bool(false) +Done diff --git a/ext/standard/tests/array/array_pad.phpt b/ext/standard/tests/array/array_pad.phpt new file mode 100644 index 000000000..e6c4590c1 --- /dev/null +++ b/ext/standard/tests/array/array_pad.phpt @@ -0,0 +1,101 @@ +--TEST-- +array_pad() tests +--FILE-- +<?php + +var_dump(array_pad()); +var_dump(array_pad(array())); +var_dump(array_pad(array(), 1)); +var_dump(array_pad(array(), 1, 0)); + +var_dump(array_pad(array(), 0, 0)); +var_dump(array_pad(array(), -1, 0)); +var_dump(array_pad(array("", -1, 2.0), 5, 0)); +var_dump(array_pad(array("", -1, 2.0), 5, array())); +var_dump(array_pad(array("", -1, 2.0), 2, array())); +var_dump(array_pad(array("", -1, 2.0), -3, array())); +var_dump(array_pad(array("", -1, 2.0), -4, array())); +var_dump(array_pad(array("", -1, 2.0), 2000000, 0)); +var_dump(array_pad("", 2000000, 0)); + +echo "Done\n"; +?> +--EXPECTF-- +Warning: Wrong parameter count for array_pad() in %s on line %d +NULL + +Warning: Wrong parameter count for array_pad() in %s on line %d +NULL + +Warning: Wrong parameter count for array_pad() in %s on line %d +NULL +array(1) { + [0]=> + int(0) +} +array(0) { +} +array(1) { + [0]=> + int(0) +} +array(5) { + [0]=> + string(0) "" + [1]=> + int(-1) + [2]=> + float(2) + [3]=> + int(0) + [4]=> + int(0) +} +array(5) { + [0]=> + string(0) "" + [1]=> + int(-1) + [2]=> + float(2) + [3]=> + array(0) { + } + [4]=> + array(0) { + } +} +array(3) { + [0]=> + string(0) "" + [1]=> + int(-1) + [2]=> + float(2) +} +array(3) { + [0]=> + string(0) "" + [1]=> + int(-1) + [2]=> + float(2) +} +array(4) { + [0]=> + array(0) { + } + [1]=> + string(0) "" + [2]=> + int(-1) + [3]=> + float(2) +} + +Warning: array_pad(): You may only pad up to 1048576 elements at a time in %s on line %d +bool(false) + +Warning: array_pad(): The argument should be an array in %s on line %d +NULL +Done diff --git a/ext/standard/tests/array/array_rand.phpt b/ext/standard/tests/array/array_rand.phpt new file mode 100644 index 000000000..22424465a --- /dev/null +++ b/ext/standard/tests/array/array_rand.phpt @@ -0,0 +1,51 @@ +--TEST-- +array_rand() tests +--FILE-- +<?php + +var_dump(array_rand()); +var_dump(array_rand(array())); +var_dump(array_rand(array(), 0)); +var_dump(array_rand(0, 0)); +var_dump(array_rand(array(1,2,3), 0)); +var_dump(array_rand(array(1,2,3), -1)); +var_dump(array_rand(array(1,2,3), 10)); +var_dump(array_rand(array(1,2,3), 3)); +var_dump(array_rand(array(1,2,3), 2)); + +echo "Done\n"; +?> +--EXPECTF-- +Warning: Wrong parameter count for array_rand() in %s on line %d +NULL +NULL + +Warning: array_rand(): Second argument has to be between 1 and the number of elements in the array in %s on line %d +NULL + +Warning: array_rand(): First argument has to be an array in %s on line %d +NULL + +Warning: array_rand(): Second argument has to be between 1 and the number of elements in the array in %s on line %d +NULL + +Warning: array_rand(): Second argument has to be between 1 and the number of elements in the array in %s on line %d +NULL + +Warning: array_rand(): Second argument has to be between 1 and the number of elements in the array in %s on line %d +NULL +array(3) { + [0]=> + int(%d) + [1]=> + int(%d) + [2]=> + int(%d) +} +array(2) { + [0]=> + int(%d) + [1]=> + int(%d) +} +Done diff --git a/ext/standard/tests/array/array_sum.phpt b/ext/standard/tests/array/array_sum.phpt index f1868cb2e..08aec2155 100644 --- a/ext/standard/tests/array/array_sum.phpt +++ b/ext/standard/tests/array/array_sum.phpt @@ -1,7 +1,8 @@ --TEST-- Test array_sum() --INI-- -memory_limit=64M +precision=14 +memory_limit=128M --FILE-- <?php $i = 0; diff --git a/ext/standard/tests/array/array_unshift.phpt b/ext/standard/tests/array/array_unshift.phpt new file mode 100644 index 000000000..0e8dae919 --- /dev/null +++ b/ext/standard/tests/array/array_unshift.phpt @@ -0,0 +1,40 @@ +--TEST-- +array_unshift() tests +--FILE-- +<?php + +$a = array(); +$s = ""; +var_dump(array_unshift($a, $s)); +var_dump($a); +var_dump(array_unshift($s, $a)); +var_dump($a); +var_dump(array_unshift($a, $a)); +var_dump($a); + +echo "Done\n"; +?> +--EXPECTF-- +int(1) +array(1) { + [0]=> + string(0) "" +} + +Warning: array_unshift(): The first argument should be an array in %s on line %d +bool(false) +array(1) { + [0]=> + string(0) "" +} +int(2) +array(2) { + [0]=> + array(1) { + [0]=> + string(0) "" + } + [1]=> + string(0) "" +} +Done diff --git a/ext/standard/tests/array/array_user_key_compare.phpt b/ext/standard/tests/array/array_user_key_compare.phpt new file mode 100644 index 000000000..7f82f71ca --- /dev/null +++ b/ext/standard/tests/array/array_user_key_compare.phpt @@ -0,0 +1,19 @@ +--TEST-- +Fix UMR in array_user_key_compare (MOPB24) +--FILE-- +<?php +$arr = array("A" => 1, "B" => 1); + +function array_compare(&$key1, &$key2) + { + $GLOBALS['a'] = &$key2; + unset($key2); + return 1; + } + +uksort($arr, "array_compare"); +var_dump($a); + +?> +--EXPECTF-- +string(1) "A" diff --git a/ext/standard/tests/array/array_values.phpt b/ext/standard/tests/array/array_values.phpt new file mode 100644 index 000000000..42e252ac8 --- /dev/null +++ b/ext/standard/tests/array/array_values.phpt @@ -0,0 +1,47 @@ +--TEST-- +array_values() tests +--FILE-- +<?php + +var_dump(array_values()); +var_dump(array_values(array())); +var_dump(array_values("")); +var_dump(array_values(new stdclass)); + +$a = array(1, 2, 2.0, "asdasd", array(1,2,3)); + +var_dump(array_values($a)); + +echo "Done\n"; +?> +--EXPECTF-- +Warning: Wrong parameter count for array_values() in %s on line %d +NULL +array(0) { +} + +Warning: array_values(): The argument should be an array in %s on line %d +NULL + +Warning: array_values(): The argument should be an array in %s on line %d +NULL +array(5) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + float(2) + [3]=> + string(6) "asdasd" + [4]=> + array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) + } +} +Done diff --git a/ext/standard/tests/array/bug30074.phpt b/ext/standard/tests/array/bug30074.phpt new file mode 100644 index 000000000..7720fe000 --- /dev/null +++ b/ext/standard/tests/array/bug30074.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #30074 (EG(uninitialized_zval_ptr) gets set to reference using EXTR_REFS, affecting later values) +--FILE-- +<?php +error_reporting(E_ALL & ~E_NOTICE); // We don't want the notice for $undefined +$result = extract(array('a'=>$undefined), EXTR_REFS); +var_dump(array($a)); +echo "Done\n"; +?> +--EXPECT-- +array(1) { + [0]=> + NULL +} +Done diff --git a/ext/standard/tests/array/bug33382.phpt b/ext/standard/tests/array/bug33382.phpt index 407b5846f..376227f1f 100644 --- a/ext/standard/tests/array/bug33382.phpt +++ b/ext/standard/tests/array/bug33382.phpt @@ -1,5 +1,5 @@ --TEST-- -bug #33382 ( array_reverse() fails after *sort() ) +Bug #33382 ( array_reverse() fails after *sort() ) --FILE-- <?php diff --git a/ext/standard/tests/array/bug36975.phpt b/ext/standard/tests/array/bug36975.phpt new file mode 100644 index 000000000..f37c933e3 --- /dev/null +++ b/ext/standard/tests/array/bug36975.phpt @@ -0,0 +1,62 @@ +--TEST-- +Bug #36975 (natcasesort() causes array_pop() to misbehave) +--FILE-- +<?php +$a = array('aa', 'aa', 'bb', 'bb', 'cc', 'cc'); +$test = natcasesort($a); +if ($test) { + echo "natcasesort success!\n"; +} +$val = array_pop($a); +$a[] = $val; +var_dump($a); + +$b = array(1 => 'foo', 0 => 'baz'); +array_pop($b); +$b[] = 'bar'; +array_push($b, 'bar'); +print_r($b); + +$c = array(0, 0, 0, 0, 0); +asort($c); +array_pop($c); +$c[] = 'foo'; +$c[] = 'bar'; +var_dump($c); +?> +--EXPECT-- +natcasesort success! +array(6) { + [0]=> + string(2) "aa" + [1]=> + string(2) "aa" + [3]=> + string(2) "bb" + [2]=> + string(2) "bb" + [5]=> + string(2) "cc" + [6]=> + string(2) "cc" +} +Array +( + [1] => foo + [2] => bar + [3] => bar +) +array(6) { + [4]=> + int(0) + [3]=> + int(0) + [2]=> + int(0) + [1]=> + int(0) + [5]=> + string(3) "foo" + [6]=> + string(3) "bar" +} diff --git a/ext/standard/tests/array/bug39576.phpt b/ext/standard/tests/array/bug39576.phpt new file mode 100644 index 000000000..7c8aeef17 --- /dev/null +++ b/ext/standard/tests/array/bug39576.phpt @@ -0,0 +1,52 @@ +--TEST-- +Bug #39576 (array_walk() doesn't separate userdata zval) +--FILE-- +<?php + +class Test { + + public $_table = ''; + public $_columns = array (); + public $_primary = array (); + +} + +$test = new Test (); +$test->name = 'test'; +$test->_columns['name'] = new stdClass; + +function test ($value, $column, &$columns) {} + +array_walk ( + get_object_vars ($test), + 'test', + $test->_columns +); + +var_dump($test); + +array_intersect_key ( + get_object_vars ($test), + $test->_primary +); + +echo "Done\n"; +?> +--EXPECTF-- +Strict Standards: Only variables should be passed by reference in %s on line %d +object(Test)#%d (4) { + ["_table"]=> + string(0) "" + ["_columns"]=> + array(1) { + ["name"]=> + object(stdClass)#%d (0) { + } + } + ["_primary"]=> + array(0) { + } + ["name"]=> + string(4) "test" +} +Done diff --git a/ext/standard/tests/array/bug40191.phpt b/ext/standard/tests/array/bug40191.phpt new file mode 100644 index 000000000..038104b57 --- /dev/null +++ b/ext/standard/tests/array/bug40191.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #40191 (use of array_unique() with objects triggers segfault) +--SKIPIF-- +<?php if (!extension_loaded('spl')) die("skip SPL is not available"); ?> +--FILE-- +<?php + +$arrObj = new ArrayObject(); +$arrObj->append('foo'); +$arrObj->append('bar'); +$arrObj->append('foo'); + +$arr = array_unique($arrObj); +var_dump($arr); + +echo "Done\n"; +?> +--EXPECTF-- +array(2) { + [0]=> + string(3) "foo" + [1]=> + string(3) "bar" +} +Done diff --git a/ext/standard/tests/array/bug40709.phpt b/ext/standard/tests/array/bug40709.phpt new file mode 100644 index 000000000..6ab6bbd41 --- /dev/null +++ b/ext/standard/tests/array/bug40709.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #40709 (array_reduce() behaves strange with one item stored arrays) +--SKIPIF-- +--FILE-- +<?php +function CommaSeperatedList($a, $b) { + if($a == null) + return $b; + else + return $a.','.$b; +} + +$arr1 = array(1,2,3); +$arr2 = array(1); + +echo "result for arr1: ".array_reduce($arr1,'CommaSeperatedList')."\n"; +echo "result for arr2: ".array_reduce($arr2,'CommaSeperatedList')."\n"; +echo "result for arr1: ".array_reduce($arr1,'CommaSeperatedList')."\n"; +echo "result for arr2: ".array_reduce($arr2,'CommaSeperatedList')."\n"; + +echo "Done\n"; +?> +--EXPECT-- +result for arr1: 1,2,3 +result for arr2: 1 +result for arr1: 1,2,3 +result for arr2: 1 +Done diff --git a/ext/standard/tests/array/bug41121.phpt b/ext/standard/tests/array/bug41121.phpt new file mode 100644 index 000000000..a03bdaf4c --- /dev/null +++ b/ext/standard/tests/array/bug41121.phpt @@ -0,0 +1,128 @@ +--TEST-- +Bug #41121 (range() overflow handling for large numbers on 32bit machines) +--INI-- +precision=14 +--SKIPIF-- +<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?> +--FILE-- +<?php + +// posotive steps +var_dump(range(2147483400, 2147483600, 100)); +var_dump( range(2147483646, 2147483648, 1 ) ); +var_dump( range(2147483646, 2147483657, 1 ) ); +var_dump( range(2147483630, 2147483646, 5 ) ); + +// negative steps +var_dump( range(-2147483645, -2147483648, 1 ) ); +var_dump( range(-2147483645, -2147483649, 1 ) ); +var_dump( range(-2147483630, -2147483646, 5 ) ); + +// low > high +var_dump(range(2147483647, 2147483645, 1 )); +var_dump(range(2147483648, 2147483645, 1 )); + +?> +--EXPECT-- +array(3) { + [0]=> + int(2147483400) + [1]=> + int(2147483500) + [2]=> + int(2147483600) +} +array(3) { + [0]=> + float(2147483646) + [1]=> + float(2147483647) + [2]=> + float(2147483648) +} +array(12) { + [0]=> + float(2147483646) + [1]=> + float(2147483647) + [2]=> + float(2147483648) + [3]=> + float(2147483649) + [4]=> + float(2147483650) + [5]=> + float(2147483651) + [6]=> + float(2147483652) + [7]=> + float(2147483653) + [8]=> + float(2147483654) + [9]=> + float(2147483655) + [10]=> + float(2147483656) + [11]=> + float(2147483657) +} +array(4) { + [0]=> + int(2147483630) + [1]=> + int(2147483635) + [2]=> + int(2147483640) + [3]=> + int(2147483645) +} +array(4) { + [0]=> + float(-2147483645) + [1]=> + float(-2147483646) + [2]=> + float(-2147483647) + [3]=> + float(-2147483648) +} +array(5) { + [0]=> + float(-2147483645) + [1]=> + float(-2147483646) + [2]=> + float(-2147483647) + [3]=> + float(-2147483648) + [4]=> + float(-2147483649) +} +array(4) { + [0]=> + int(-2147483630) + [1]=> + int(-2147483635) + [2]=> + int(-2147483640) + [3]=> + int(-2147483645) +} +array(3) { + [0]=> + int(2147483647) + [1]=> + int(2147483646) + [2]=> + int(2147483645) +} +array(4) { + [0]=> + float(2147483648) + [1]=> + float(2147483647) + [2]=> + float(2147483646) + [3]=> + float(2147483645) +} diff --git a/ext/standard/tests/array/compact.phpt b/ext/standard/tests/array/compact.phpt new file mode 100644 index 000000000..b70e55846 --- /dev/null +++ b/ext/standard/tests/array/compact.phpt @@ -0,0 +1,60 @@ +--TEST-- +compact() tests +--FILE-- +<?php + +$var1 = "test"; +$var2 = "one more"; +$var3 = "and the last one"; +$_ = "a"; + +var_dump(compact("var1", "var2", "var3")); +var_dump(compact("")); +var_dump(compact("-1")); +var_dump(compact(".")); +var_dump(compact("_")); +var_dump(compact("var3", "var4")); +var_dump(compact(array("var2", "var3"))); +var_dump(compact(array(array("var1"), array("var1")))); + +$a = array(2.0, -5); +var_dump(compact($a)); + +echo "Done\n"; +?> +--EXPECTF-- +array(3) { + ["var1"]=> + string(4) "test" + ["var2"]=> + string(8) "one more" + ["var3"]=> + string(16) "and the last one" +} +array(0) { +} +array(0) { +} +array(0) { +} +array(1) { + ["_"]=> + string(1) "a" +} +array(1) { + ["var3"]=> + string(16) "and the last one" +} +array(2) { + ["var2"]=> + string(8) "one more" + ["var3"]=> + string(16) "and the last one" +} +array(1) { + ["var1"]=> + string(4) "test" +} +array(0) { +} +Done diff --git a/ext/standard/tests/array/locale_sort.phpt b/ext/standard/tests/array/locale_sort.phpt index b4e15fa52..4b7068fa8 100644 --- a/ext/standard/tests/array/locale_sort.phpt +++ b/ext/standard/tests/array/locale_sort.phpt @@ -2,13 +2,13 @@ Sort with SORT_LOCALE_STRING --SKIPIF-- <?php -if ("fr_FR" != setlocale(LC_CTYPE, "fr_FR")) { +if (false == setlocale(LC_CTYPE, "fr_FR", "fr_FR.ISO8859-1")) { die("skip setlocale() failed\n"); } ?> --FILE-- <?php -setlocale(LC_ALL, 'fr_FR'); +setlocale(LC_ALL, 'fr_FR', 'fr_FR.ISO8859-1'); $table = array("AB" => "Alberta", "BC" => "Colombie-Britannique", "MB" => "Manitoba", |
