summaryrefslogtreecommitdiff
path: root/ext/standard/tests/array
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/tests/array')
-rw-r--r--ext/standard/tests/array/bug35014.phpt6
-rw-r--r--ext/standard/tests/array/bug35014_64bit.phpt36
-rw-r--r--ext/standard/tests/array/bug35821.phpt33
3 files changed, 73 insertions, 2 deletions
diff --git a/ext/standard/tests/array/bug35014.phpt b/ext/standard/tests/array/bug35014.phpt
index 213bacae3..99ef0f7eb 100644
--- a/ext/standard/tests/array/bug35014.phpt
+++ b/ext/standard/tests/array/bug35014.phpt
@@ -1,5 +1,7 @@
--TEST--
-Bug #35014 (array_product() always returns 0)
+Bug #35014 (array_product() always returns 0) (32bit)
+--SKIPIF--
+<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?>
--INI--
precision=14
--FILE--
@@ -22,7 +24,7 @@ foreach ($tests as $v) {
?>
--EXPECTF--
-Warning: array_product(): The argument should be an array in %s/bug35014.php on line 15
+Warning: array_product(): The argument should be an array in %s on line %d
NULL
int(0)
int(0)
diff --git a/ext/standard/tests/array/bug35014_64bit.phpt b/ext/standard/tests/array/bug35014_64bit.phpt
new file mode 100644
index 000000000..a5b8da8a3
--- /dev/null
+++ b/ext/standard/tests/array/bug35014_64bit.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #35014 (array_product() always returns 0) (64bit)
+--SKIPIF--
+<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); ?>
+--INI--
+precision=14
+--FILE--
+<?php
+$tests = array(
+ 'foo',
+ array(),
+ array(0),
+ array(3),
+ array(3, 3),
+ array(0.5, 2),
+ array(99999999, 99999999),
+ array(8.993, 7443241,988, sprintf("%u", -1)+0.44),
+ array(2,sprintf("%u", -1)),
+);
+
+foreach ($tests as $v) {
+ var_dump(array_product($v));
+}
+?>
+--EXPECTF--
+
+Warning: array_product(): The argument should be an array in %s on line %d
+NULL
+int(0)
+int(0)
+int(3)
+int(9)
+float(1)
+int(9999999800000001)
+float(2.8404260053903E+20)
+int(8589934590)
diff --git a/ext/standard/tests/array/bug35821.phpt b/ext/standard/tests/array/bug35821.phpt
new file mode 100644
index 000000000..095323ebc
--- /dev/null
+++ b/ext/standard/tests/array/bug35821.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #35821 (array_map() segfaults when exception is throwed from the callback)
+--FILE--
+<?php
+
+class Element
+{
+ public function ThrowException ()
+ {
+ throw new Exception();
+ }
+
+ public static function CallBack(Element $elem)
+ {
+ $elem->ThrowException();
+ }
+}
+
+$arr = array(new Element(), new Element(), new Element());
+array_map(array('Element', 'CallBack'), $arr);
+
+echo "Done\n";
+?>
+--EXPECTF--
+Warning: array_map(): An error occurred while invoking the map callback in %s on line %d
+
+Fatal error: Uncaught exception 'Exception' in %s:%d
+Stack trace:
+#0 %s(%d): Element->ThrowException()
+#1 [internal function]: Element::CallBack(Object(Element))
+#2 %s(%d): array_map(Array, Array)
+#3 {main}
+ thrown in %s on line %d