diff options
author | Raghubansh Kumar <kraghuba@php.net> | 2008-01-03 09:43:45 +0000 |
---|---|---|
committer | Raghubansh Kumar <kraghuba@php.net> | 2008-01-03 09:43:45 +0000 |
commit | 4cadbee71669169826e8dcb8bc54e5b334819462 (patch) | |
tree | 6ddacad996e03b9144e6ebe190b7fafe8525f53f | |
parent | af2dfe2e45183ea56a8d74faf578db503f974d71 (diff) | |
download | php-git-4cadbee71669169826e8dcb8bc54e5b334819462.tar.gz |
new smaller testcases for array_map() function
21 files changed, 2431 insertions, 0 deletions
diff --git a/ext/standard/tests/array/array_map_basic.phpt b/ext/standard/tests/array/array_map_basic.phpt new file mode 100644 index 0000000000..53a7bb4e26 --- /dev/null +++ b/ext/standard/tests/array/array_map_basic.phpt @@ -0,0 +1,70 @@ +--TEST-- +Test array_map() function : basic functionality +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +echo "*** Testing array_map() : basic functionality ***\n"; + +function multiply($p, $q) { + return ($p * $q); +} + +function square($p) { + return ($p * $p); +} + +function concatenate($a, $b) { + return "$a = $b"; +} + +// integer array +$arr1 = array(1, 2, 3); +$arr2 = array(4, 5, 6); + +echo "-- With two integer array --\n"; +var_dump( array_map('multiply', $arr1, $arr2) ); + +echo "-- With single integer array --\n"; +var_dump( array_map('square', $arr1) ); + +// string array +$arr1 = array("one", "two"); +$arr2 = array("single", "double"); + +echo "-- With string array --\n"; +var_dump( array_map('concatenate', $arr1, $arr2) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : basic functionality *** +-- With two integer array -- +array(3) { + [0]=> + int(4) + [1]=> + int(10) + [2]=> + int(18) +} +-- With single integer array -- +array(3) { + [0]=> + int(1) + [1]=> + int(4) + [2]=> + int(9) +} +-- With string array -- +array(2) { + [0]=> + string(12) "one = single" + [1]=> + string(12) "two = double" +} +Done diff --git a/ext/standard/tests/array/array_map_error.phpt b/ext/standard/tests/array/array_map_error.phpt new file mode 100644 index 0000000000..7c623ec4ea --- /dev/null +++ b/ext/standard/tests/array/array_map_error.phpt @@ -0,0 +1,73 @@ +--TEST-- +Test array_map() function : error conditions +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +echo "*** Testing array_map() : error conditions ***\n"; + +// Zero arguments +echo "\n-- Testing array_map() function with Zero arguments --\n"; +var_dump( array_map() ); + +// Testing array_map with one less than the expected number of arguments +echo "\n-- Testing array_map() function with one less than expected no. of arguments --\n"; +function callback1() { + return 1; +} +var_dump( array_map('callback1') ); + +echo "\n-- Testing array_map() function with less no. of arrays than callback function arguments --\n"; +$arr1 = array(1, 2); +function callback2($p, $q) { + return $p * $q; +} +var_dump( array_map('callback2', $arr1) ); + +echo "\n-- Testing array_map() function with more no. of arrays than callback function arguments --\n"; +$arr2 = array(3, 4); +$arr3 = array(5, 6); +var_dump( array_map('callback2', $arr1, $arr2, $arr3) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : error conditions *** + +-- Testing array_map() function with Zero arguments -- + +Warning: array_map() expects at least 2 parameters, 0 given in %s on line %d%d +NULL + +-- Testing array_map() function with one less than expected no. of arguments -- + +Warning: array_map() expects at least 2 parameters, 1 given in %s on line %d%d +NULL + +-- Testing array_map() function with less no. of arrays than callback function arguments -- + +Warning: Missing argument 2 for callback2() in %s on line %d%d + +Notice: Undefined variable: q in %s on line %d%d + +Warning: Missing argument 2 for callback2() in %s on line %d%d + +Notice: Undefined variable: q in %s on line %d%d +array(2) { + [0]=> + int(0) + [1]=> + int(0) +} + +-- Testing array_map() function with more no. of arrays than callback function arguments -- +array(2) { + [0]=> + int(3) + [1]=> + int(8) +} +Done diff --git a/ext/standard/tests/array/array_map_object1.phpt b/ext/standard/tests/array/array_map_object1.phpt new file mode 100644 index 0000000000..3b1ffce2e7 --- /dev/null +++ b/ext/standard/tests/array/array_map_object1.phpt @@ -0,0 +1,169 @@ +--TEST-- +Test array_map() function : usage variations - object functionality +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Testing array_map() for object functionalities: + * 1) simple class with variable and method + * 2) class without members + * 3) class with only one method and no variable + * 4) abstract and child class + * 5) class with static and final members + * 6) interface and implemented class + */ +echo "*** Testing array_map() : object functionality ***\n"; + +echo "-- simple class with public variable and method --\n"; +class SimpleClass +{ + public $var1 = 1; + public function square($n) { + return $n * $n; + } +} +var_dump( array_map(array('SimpleClass', 'square'), array(1, 2)) ); + +echo "\n-- simple class with private variable and method --\n"; +class SimpleClassPri +{ + private $var1 = 10; + private function add($n) { + return $var + $n; + } +} +var_dump( array_map(array('SimpleClassPri', 'add'), array(1)) ); + +echo "\n-- simple class with protected variable and method --\n"; +class SimpleClassPro +{ + protected $var1 = 5; + protected function mul($n) { + return $var1 * $n; + } +} +var_dump( array_map(array('SimpleClassPro', 'mul'), array(2)) ); + +echo "\n-- class without members --"; +class EmptyClass +{ +} +var_dump( array_map(array('EmptyClass'), array(1, 2)) ); + +echo "\n-- abstract class --"; +abstract class AbstractClass +{ + protected $var2 = 5; + abstract function emptyFunction(); +} + +// class deriving the above abstract class +class ChildClass extends AbstractClass +{ + private $var3; + public function emptyFunction() { + echo "defined in child"; + } +} +var_dump( array_map(array('ChildClass', 'emptyFunction'), array(1, 2)) ); + +echo "\n-- class with final method --"; +class FinalClass +{ + private $var4; + final function finalMethod() { + echo "This function can't be overloaded"; + } +} +var_dump( array_map(array('FinalClass', 'finalMethod'), array(1, 2)) ); + +echo "\n-- class with static members --\n"; +class StaticClass +{ + static $var5 = 2; + public static function square($n) { + return ($n * $n); + } + private static function cube($n) { + return ($n * $n * $n); + } + protected static function retVal($n) { + return array($n); + } +} +var_dump( array_map(array('StaticClass', 'square'), array(1, 2)) ); +var_dump( array_map(array('StaticClass', 'cube'), array(2)) ); +var_dump( array_map(array('StaticClass', 'retVal'), array(3, 4)) ); + +echo "-- class implementing an interface --\n"; +interface myInterface +{ + public function toImplement(); +} +class InterClass implements myInterface +{ + public static function square($n) { + return ($n * $n); + } + public function toImplement() { + return 1; + } +} +var_dump( array_map(array('InterClass', 'square'), array(1, 2))); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : object functionality *** +-- simple class with public variable and method -- + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- simple class with private variable and method -- + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- simple class with protected variable and method -- + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- class without members -- +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- abstract class -- +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- class with final method -- +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- class with static members -- +array(2) { + [0]=> + int(1) + [1]=> + int(4) +} + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL +-- class implementing an interface -- +array(2) { + [0]=> + int(1) + [1]=> + int(4) +} +Done diff --git a/ext/standard/tests/array/array_map_object2.phpt b/ext/standard/tests/array/array_map_object2.phpt new file mode 100644 index 0000000000..9670d6ff86 --- /dev/null +++ b/ext/standard/tests/array/array_map_object2.phpt @@ -0,0 +1,46 @@ +--TEST-- +Test array_map() function : object functionality - with non-existent class and method +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Testing array_map() for following object functionalities: + * 1) non-existent class + * 2) existent class and non-existent function + */ +echo "*** Testing array_map() : with non-existent class and method ***\n"; + +class SimpleClass +{ + public $var1 = 1; + public function square($n) { + return $n * $n; + } + public static function cube($n) { + return $n * $n * $n; + } +} + +echo "-- with non-existent class --\n"; +var_dump( array_map(array('non-existent', 'square'), array(1, 2)) ); + +echo "-- with existent class and non-existent method --\n"; +var_dump( array_map(array('SimpleClass', 'non-existent'), array(1, 2)) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : with non-existent class and method *** +-- with non-existent class -- + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL +-- with existent class and non-existent method -- + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL +Done diff --git a/ext/standard/tests/array/array_map_object3.phpt b/ext/standard/tests/array/array_map_object3.phpt new file mode 100644 index 0000000000..6c00d56143 --- /dev/null +++ b/ext/standard/tests/array/array_map_object3.phpt @@ -0,0 +1,92 @@ +--TEST-- +Test array_map() function : object functionality - class methods as callback function +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Testing array_map() for object functionality with following callback function variations: + * 1) child class method using parent object + * 2) parent class method using child object + * 3) child class method using parent class + * 4) parent class method using child class + */ +echo "*** Testing array_map() : class methods as callback function ***\n"; + +$arr1 = array(1, 5, 7); + +class ParentClass +{ + public $var1 = 10; + public static function staticParent1($n) { + return $n; + } + private static function staticParent2($n) { + return $n; + } +} + +class ChildClass extends ParentClass +{ + var $parent_obj; + public function __construct ( ) { + $this->parent_obj = new ParentClass(); + } + public $var2 = 5; + public static function staticChild($n) { + return $n; + } + public function nonstaticChild($n) { + return $n; + } +} + +$childobj = new ChildClass(); +$parentobj = new ParentClass(); + +echo "-- accessing parent method from child class --\n"; +var_dump( array_map(array('ChildClass', 'staticParent1'), $arr1) ); + +echo "-- accessing child method from parent class --\n"; +var_dump( array_map(array('ParentClass', 'staticChild'), $arr1) ); + +echo "-- accessing parent method using child class object --\n"; +var_dump( array_map(array($childobj, 'staticParent1'), $arr1) ); + +echo "-- accessing child method using parent class object --\n"; +var_dump( array_map(array($parentobj, 'staticChild'), $arr1) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : class methods as callback function *** +-- accessing parent method from child class -- +array(3) { + [0]=> + int(1) + [1]=> + int(5) + [2]=> + int(7) +} +-- accessing child method from parent class -- + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL +-- accessing parent method using child class object -- +array(3) { + [0]=> + int(1) + [1]=> + int(5) + [2]=> + int(7) +} +-- accessing child method using parent class object -- + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL +Done diff --git a/ext/standard/tests/array/array_map_variation10.phpt b/ext/standard/tests/array/array_map_variation10.phpt new file mode 100644 index 0000000000..cc75436999 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation10.phpt @@ -0,0 +1,120 @@ +--TEST-- +Test array_map() function : usage variations - anonymous callback function +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing anoymous callback function with following variations + */ + +echo "*** Testing array_map() : anonymous callback function ***\n"; + +$array1 = array(1, 2, 3); +$array2 = array(3, 4, 5); + +echo "-- anonymous function with all parameters and body --\n"; +var_dump( array_map( create_function('$a, $b', 'return array($a, $b);'), $array1, $array2)); + +echo "-- anonymous function with two parameters and passing one array --\n"; +var_dump( array_map( create_function('$a, $b', 'return array($a, $b);'), $array1)); + +echo "-- anonymous function with NULL parameter --\n"; +var_dump( array_map( create_function(NULL, 'return NULL;'), $array1)); + +echo "-- anonymous function with NULL body --\n"; +var_dump( array_map( create_function('$a', NULL), $array1)); + +echo "-- passing NULL as 'arr1' --\n"; +var_dump( array_map( create_function('$a', 'return array($a);'), NULL)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : anonymous callback function *** +-- anonymous function with all parameters and body -- +array(3) { + [0]=> + array(2) { + [0]=> + int(1) + [1]=> + int(3) + } + [1]=> + array(2) { + [0]=> + int(2) + [1]=> + int(4) + } + [2]=> + array(2) { + [0]=> + int(3) + [1]=> + int(5) + } +} +-- anonymous function with two parameters and passing one array -- + +Warning: Missing argument 2 for __lambda_func() in %s(20) : runtime-created function on line %d + +Notice: Undefined variable: b in %s(20) : runtime-created function on line %d + +Warning: Missing argument 2 for __lambda_func() in %s(20) : runtime-created function on line %d + +Notice: Undefined variable: b in %s(20) : runtime-created function on line %d + +Warning: Missing argument 2 for __lambda_func() in %s(20) : runtime-created function on line %d + +Notice: Undefined variable: b in %s(20) : runtime-created function on line %d +array(3) { + [0]=> + array(2) { + [0]=> + int(1) + [1]=> + NULL + } + [1]=> + array(2) { + [0]=> + int(2) + [1]=> + NULL + } + [2]=> + array(2) { + [0]=> + int(3) + [1]=> + NULL + } +} +-- anonymous function with NULL parameter -- +array(3) { + [0]=> + NULL + [1]=> + NULL + [2]=> + NULL +} +-- anonymous function with NULL body -- +array(3) { + [0]=> + NULL + [1]=> + NULL + [2]=> + NULL +} +-- passing NULL as 'arr1' -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d +NULL +Done diff --git a/ext/standard/tests/array/array_map_variation11.phpt b/ext/standard/tests/array/array_map_variation11.phpt new file mode 100644 index 0000000000..9cad3668d5 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation11.phpt @@ -0,0 +1,52 @@ +--TEST-- +Test array_map() function : usage variations - with recursive callback +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing subarrays and recursive callback function + */ + +echo "*** Testing array_map() : recursive callback function ***\n"; + +// callback function +function square_recur_single_array($var) { + if (is_array($var)) + return array_map('square_recur_single_array', $var); + return $var * $var; +} + +$array1 = array(1, array(2, 3, array(5)), array(4)); + +var_dump( array_map('square_recur_single_array', $array1)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : recursive callback function *** +array(3) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(4) + [1]=> + int(9) + [2]=> + array(1) { + [0]=> + int(25) + } + } + [2]=> + array(1) { + [0]=> + int(16) + } +} +Done diff --git a/ext/standard/tests/array/array_map_variation12.phpt b/ext/standard/tests/array/array_map_variation12.phpt new file mode 100644 index 0000000000..7b8a2e0b09 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation12.phpt @@ -0,0 +1,60 @@ +--TEST-- +Test array_map() function : usage variations - built-in function as callback +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing buit-in function as callback function + */ + +echo "*** Testing array_map() : built-in function ***\n"; + +$array1 = array(1, 2, 3); +$array2 = array(3, 4, 5); + +echo "-- with built-in function 'pow' and two parameters --\n"; +var_dump( array_map('pow', $array1, $array2)); + +echo "-- with built-in function 'pow' and one parameter --\n"; +var_dump( array_map('pow', $array1)); + +echo "-- with language construct --\n"; +var_dump( array_map('echo', $array1)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : built-in function *** +-- with built-in function 'pow' and two parameters -- +array(3) { + [0]=> + int(1) + [1]=> + int(16) + [2]=> + int(243) +} +-- with built-in function 'pow' and one parameter -- + +Warning: pow() expects exactly 2 parameters, 1 given in %s on line %d%d + +Warning: pow() expects exactly 2 parameters, 1 given in %s on line %d%d + +Warning: pow() expects exactly 2 parameters, 1 given in %s on line %d%d +array(3) { + [0]=> + NULL + [1]=> + NULL + [2]=> + NULL +} +-- with language construct -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +Done diff --git a/ext/standard/tests/array/array_map_variation13.phpt b/ext/standard/tests/array/array_map_variation13.phpt new file mode 100644 index 0000000000..94babdf963 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation13.phpt @@ -0,0 +1,107 @@ +--TEST-- +Test array_map() function : usage variations - callback function with different return types +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing different callback function returning: + * int, string, bool, null values + */ + +echo "*** Testing array_map() : callback with diff return value ***\n"; + +$array1 = array(1, 2, 3); +$array2 = array(3, 4, 5); + +echo "-- with integer return value --\n"; +function callback_int($a, $b) +{ + return $a + $b; +} +var_dump( array_map('callback_int', $array1, $array2)); + +echo "-- with string return value --\n"; +function callback_string($a, $b) +{ + return "$a"."$b"; +} +var_dump( array_map('callback_string', $array1, $array2)); + +echo "-- with bool return value --\n"; +function callback_bool($a, $b) +{ + return TRUE; +} +var_dump( array_map('callback_bool', $array1, $array2)); + +echo "-- with null return value --\n"; +function callback_null($array1) +{ + return NULL; +} +var_dump( array_map('callback_null', $array1)); + +echo "-- with no return value --\n"; +function callback_without_ret($arr1) +{ + echo "callback_without_ret called\n"; +} +var_dump( array_map('callback_without_ret', $array1)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : callback with diff return value *** +-- with integer return value -- +array(3) { + [0]=> + int(4) + [1]=> + int(6) + [2]=> + int(8) +} +-- with string return value -- +array(3) { + [0]=> + string(2) "13" + [1]=> + string(2) "24" + [2]=> + string(2) "35" +} +-- with bool return value -- +array(3) { + [0]=> + bool(true) + [1]=> + bool(true) + [2]=> + bool(true) +} +-- with null return value -- +array(3) { + [0]=> + NULL + [1]=> + NULL + [2]=> + NULL +} +-- with no return value -- +callback_without_ret called +callback_without_ret called +callback_without_ret called +array(3) { + [0]=> + NULL + [1]=> + NULL + [2]=> + NULL +} +Done diff --git a/ext/standard/tests/array/array_map_variation14.phpt b/ext/standard/tests/array/array_map_variation14.phpt new file mode 100644 index 0000000000..0a0eb15551 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation14.phpt @@ -0,0 +1,125 @@ +--TEST-- +Test array_map() function : usage variations - null value for 'callback' argument +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing null values for $callback argument and testing whether shortest + * array will be extended with empty elements + */ + +echo "*** Testing array_map() : null value for 'callback' argument ***\n"; + +// arrays to be passed as arguments +$arr1 = array(1, 2); +$arr2 = array("one", "two"); +$arr3 = array(1.1, 2.2); + +// get an unset variable +$unset_var = 10; +unset ($unset_var); + +/* calling array_map() with null callback */ + +echo "-- with null --\n"; +var_dump( array_map(null, $arr1, $arr2, $arr3) ); +var_dump( array_map(NULL, $arr1, $arr2, $arr3) ); + +echo "-- with unset variable --\n"; +var_dump( array_map(@$unset_var, $arr1, $arr2, $arr3) ); + +echo "-- with undefined variable --\n"; +var_dump( array_map(@$undefined_var, $arr1) ); + +echo "-- with empty string --\n"; +var_dump( array_map("", $arr1, $arr2) ); + +echo "-- with empty array --\n"; +var_dump( array_map(array(), $arr1, $arr2) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : null value for 'callback' argument *** +-- with null -- +array(2) { + [0]=> + array(3) { + [0]=> + int(1) + [1]=> + string(3) "one" + [2]=> + float(1.1) + } + [1]=> + array(3) { + [0]=> + int(2) + [1]=> + string(3) "two" + [2]=> + float(2.2) + } +} +array(2) { + [0]=> + array(3) { + [0]=> + int(1) + [1]=> + string(3) "one" + [2]=> + float(1.1) + } + [1]=> + array(3) { + [0]=> + int(2) + [1]=> + string(3) "two" + [2]=> + float(2.2) + } +} +-- with unset variable -- +array(2) { + [0]=> + array(3) { + [0]=> + int(1) + [1]=> + string(3) "one" + [2]=> + float(1.1) + } + [1]=> + array(3) { + [0]=> + int(2) + [1]=> + string(3) "two" + [2]=> + float(2.2) + } +} +-- with undefined variable -- +array(2) { + [0]=> + int(1) + [1]=> + int(2) +} +-- with empty string -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +-- with empty array -- + +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL +Done diff --git a/ext/standard/tests/array/array_map_variation15.phpt b/ext/standard/tests/array/array_map_variation15.phpt new file mode 100644 index 0000000000..c7be3b7ded --- /dev/null +++ b/ext/standard/tests/array/array_map_variation15.phpt @@ -0,0 +1,30 @@ +--TEST-- +Test array_map() function : usage variations - non existent 'callback' function +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing non existent function for $callback argument + */ + +echo "*** Testing array_map() : non existent 'callback' function ***\n"; + +// arrays to be passed as arguments +$arr1 = array(1, 2); +$arr2 = array("one", "two"); +$arr3 = array(1.1, 2.2); + +var_dump( array_map('non_existent', $arr1, $arr2, $arr3) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : non existent 'callback' function *** + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +Done diff --git a/ext/standard/tests/array/array_map_variation16.phpt b/ext/standard/tests/array/array_map_variation16.phpt new file mode 100644 index 0000000000..196bc39d2c --- /dev/null +++ b/ext/standard/tests/array/array_map_variation16.phpt @@ -0,0 +1,73 @@ +--TEST-- +Test array_map() function : usage variations - failing built-in functions & language constructs +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing non-permmited built-in functions and language constructs i.e. + * echo(), array(), empty(), eval(), exit(), isset(), list(), print() + */ + +echo "*** Testing array_map() : non-permmited built-in functions ***\n"; + +// array to be passed as arguments +$arr1 = array(1, 2); + +// built-in functions & language constructs +$callback_names = array( +/*1*/ 'echo', + 'array', + 'empty', +/*4*/ 'eval', + 'exit', + 'isset', + 'list', +/*8*/ 'print' +); +for($count = 0; $count < count($callback_names); $count++) +{ + echo "-- Iteration ".($count + 1)." --\n"; + var_dump( array_map($callback_names[$count], $arr1) ); +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : non-permmited built-in functions *** +-- Iteration 1 -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +-- Iteration 2 -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +-- Iteration 3 -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +-- Iteration 4 -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +-- Iteration 5 -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +-- Iteration 6 -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +-- Iteration 7 -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +-- Iteration 8 -- + +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL +Done diff --git a/ext/standard/tests/array/array_map_variation17.phpt b/ext/standard/tests/array/array_map_variation17.phpt new file mode 100644 index 0000000000..d0427e81cd --- /dev/null +++ b/ext/standard/tests/array/array_map_variation17.phpt @@ -0,0 +1,158 @@ +--TEST-- +Test array_map() function : usage variations - unexpected values for 'callback' argument +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing different scalar/nonscalar values in place of $callback + */ + +echo "*** Testing array_map() : unexpected values for 'callback' argument ***\n"; + +$arr1 = array(1, 2, 3); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $input argument +$unexpected_callbacks = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // boolean data +/*10*/ true, + false, + TRUE, + FALSE, + + // empty data +/*14*/ "", + '', + + // array data +/*16*/ array(), + array(1, 2), + array(1, array(2)), + + // object data +/*19*/ new classA(), + + // resource variable +/*20*/ $fp +); + +// loop through each element of $inputs to check the behavior of array_map +for($count = 0; $count < count($unexpected_callbacks); $count++) { + echo "\n-- Iteration ".($count + 1)." --"; + var_dump( array_map($unexpected_callbacks[$count], $arr1)); +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : unexpected values for 'callback' argument *** + +-- Iteration 1 -- +Warning: array_map() expects parameter 1 to be valid callback, integer given in %s on line %d%d +NULL + +-- Iteration 2 -- +Warning: array_map() expects parameter 1 to be valid callback, integer given in %s on line %d%d +NULL + +-- Iteration 3 -- +Warning: array_map() expects parameter 1 to be valid callback, integer given in %s on line %d%d +NULL + +-- Iteration 4 -- +Warning: array_map() expects parameter 1 to be valid callback, integer given in %s on line %d%d +NULL + +-- Iteration 5 -- +Warning: array_map() expects parameter 1 to be valid callback, double given in %s on line %d%d +NULL + +-- Iteration 6 -- +Warning: array_map() expects parameter 1 to be valid callback, double given in %s on line %d%d +NULL + +-- Iteration 7 -- +Warning: array_map() expects parameter 1 to be valid callback, double given in %s on line %d%d +NULL + +-- Iteration 8 -- +Warning: array_map() expects parameter 1 to be valid callback, double given in %s on line %d%d +NULL + +-- Iteration 9 -- +Warning: array_map() expects parameter 1 to be valid callback, double given in %s on line %d%d +NULL + +-- Iteration 10 -- +Warning: array_map() expects parameter 1 to be valid callback, boolean given in %s on line %d%d +NULL + +-- Iteration 11 -- +Warning: array_map() expects parameter 1 to be valid callback, boolean given in %s on line %d%d +NULL + +-- Iteration 12 -- +Warning: array_map() expects parameter 1 to be valid callback, boolean given in %s on line %d%d +NULL + +-- Iteration 13 -- +Warning: array_map() expects parameter 1 to be valid callback, boolean given in %s on line %d%d +NULL + +-- Iteration 14 -- +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL + +-- Iteration 15 -- +Warning: array_map() expects parameter 1 to be valid callback, string given in %s on line %d%d +NULL + +-- Iteration 16 -- +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- Iteration 17 -- +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- Iteration 18 -- +Warning: array_map() expects parameter 1 to be valid callback, array given in %s on line %d%d +NULL + +-- Iteration 19 -- +Warning: array_map() expects parameter 1 to be valid callback, object given in %s on line %d%d +NULL + +-- Iteration 20 -- +Warning: array_map() expects parameter 1 to be valid callback, resource given in %s on line %d%d +NULL +Done diff --git a/ext/standard/tests/array/array_map_variation18.phpt b/ext/standard/tests/array/array_map_variation18.phpt new file mode 100644 index 0000000000..d0a23d72c6 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation18.phpt @@ -0,0 +1,205 @@ +--TEST-- +Test array_map() function : usage variations - unexpected values for 'arr1' argument +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing non array values in place of $arr1 + */ + +echo "*** Testing array_map() : unexpected values for 'arr1' ***\n"; + +function callback($a) +{ + return $a; +} + +//get an unset array variable +$unset_var1 = array(1, 2); +unset ($unset_var1); + +// get an unset variable +$unset_var2 = 10; +unset ($unset_var2); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// different scalar/non-scalar values for array input +$unexpected_inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var1, + @$unset_var2, + + // resource variable +/*25*/ $fp +); + +// loop through each element of $unexpected_inputs to check the behavior of array_map +for($count = 0; $count < count($unexpected_inputs); $count++) { + echo "-- Iteration ".($count + 1)." --\n"; + var_dump( array_map('callback', $unexpected_inputs[$count])); +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : unexpected values for 'arr1' *** +-- Iteration 1 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 2 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 3 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 4 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 5 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 6 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 7 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 8 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 9 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 10 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 11 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 12 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 13 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 14 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 15 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 16 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 17 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 18 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 19 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 20 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 21 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 22 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 23 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 24 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +-- Iteration 25 -- + +Warning: array_map(): Argument #2 should be an array in %s on line %d%d +NULL +Done diff --git a/ext/standard/tests/array/array_map_variation3.phpt b/ext/standard/tests/array/array_map_variation3.phpt new file mode 100644 index 0000000000..a0715504e9 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation3.phpt @@ -0,0 +1,227 @@ +--TEST-- +Test array_map() function : usage variations - different arrays for 'arr1' argument +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing different arrays for $arr1 argument + */ + +echo "*** Testing array_map() : different arrays for 'arr1' argument ***\n"; + +function callback($a) +{ + return ($a); +} + +// different arrays +$arrays = array ( +/*1*/ array(1, 2), // array with default keys and numeric values + array(1.1, 2.2), // array with default keys & float values + array( array(2), array(1)), // sub arrays + array(false,true), // array with default keys and boolean values + array(), // empty array + array(NULL), // array with NULL + array("a","aaaa","b","bbbb","c","ccccc"), + + // associative arrays +/*8*/ array(1 => "one", 2 => "two", 3 => "three"), // explicit numeric keys, string values + array("one" => 1, "two" => 2, "three" => 3 ), // string keys & numeric values + array( 1 => 10, 2 => 20, 4 => 40, 3 => 30), // explicit numeric keys and numeric values + array( "one" => "ten", "two" => "twenty", "three" => "thirty"), // string key/value + array("one" => 1, 2 => "two", 4 => "four"), //mixed + + // associative array, containing null/empty/boolean values as key/value +/*13*/ array(NULL => "NULL", null => "null", "NULL" => NULL, "null" => null), + array(true => "true", false => "false", "false" => false, "true" => true), + array("" => "emptyd", '' => 'emptys', "emptyd" => "", 'emptys' => ''), + array(1 => '', 2 => "", 3 => NULL, 4 => null, 5 => false, 6 => true), + array('' => 1, "" => 2, NULL => 3, null => 4, false => 5, true => 6), + + // array with repetative keys +/*18*/ array("One" => 1, "two" => 2, "One" => 10, "two" => 20, "three" => 3) +); + +// loop through the various elements of $arrays to test array_map() +$iterator = 1; +foreach($arrays as $arr1) { + echo "-- Iteration $iterator --\n"; + var_dump( array_map('callback', $arr1) ); + $iterator++; +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : different arrays for 'arr1' argument *** +-- Iteration 1 -- +array(2) { + [0]=> + int(1) + [1]=> + int(2) +} +-- Iteration 2 -- +array(2) { + [0]=> + float(1.1) + [1]=> + float(2.2) +} +-- Iteration 3 -- +array(2) { + [0]=> + array(1) { + [0]=> + int(2) + } + [1]=> + array(1) { + [0]=> + int(1) + } +} +-- Iteration 4 -- +array(2) { + [0]=> + bool(false) + [1]=> + bool(true) +} +-- Iteration 5 -- +array(0) { +} +-- Iteration 6 -- +array(1) { + [0]=> + NULL +} +-- Iteration 7 -- +array(6) { + [0]=> + string(1) "a" + [1]=> + string(4) "aaaa" + [2]=> + string(1) "b" + [3]=> + string(4) "bbbb" + [4]=> + string(1) "c" + [5]=> + string(5) "ccccc" +} +-- Iteration 8 -- +array(3) { + [1]=> + string(3) "one" + [2]=> + string(3) "two" + [3]=> + string(5) "three" +} +-- Iteration 9 -- +array(3) { + ["one"]=> + int(1) + ["two"]=> + int(2) + ["three"]=> + int(3) +} +-- Iteration 10 -- +array(4) { + [1]=> + int(10) + [2]=> + int(20) + [4]=> + int(40) + [3]=> + int(30) +} +-- Iteration 11 -- +array(3) { + ["one"]=> + string(3) "ten" + ["two"]=> + string(6) "twenty" + ["three"]=> + string(6) "thirty" +} +-- Iteration 12 -- +array(3) { + ["one"]=> + int(1) + [2]=> + string(3) "two" + [4]=> + string(4) "four" +} +-- Iteration 13 -- +array(3) { + [""]=> + string(4) "null" + ["NULL"]=> + NULL + ["null"]=> + NULL +} +-- Iteration 14 -- +array(4) { + [1]=> + string(4) "true" + [0]=> + string(5) "false" + ["false"]=> + bool(false) + ["true"]=> + bool(true) +} +-- Iteration 15 -- +array(3) { + [""]=> + string(6) "emptys" + ["emptyd"]=> + string(0) "" + ["emptys"]=> + string(0) "" +} +-- Iteration 16 -- +array(6) { + [1]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + NULL + [4]=> + NULL + [5]=> + bool(false) + [6]=> + bool(true) +} +-- Iteration 17 -- +array(3) { + [""]=> + int(4) + [0]=> + int(5) + [1]=> + int(6) +} +-- Iteration 18 -- +array(3) { + ["One"]=> + int(10) + ["two"]=> + int(20) + ["three"]=> + int(3) +} +Done diff --git a/ext/standard/tests/array/array_map_variation4.phpt b/ext/standard/tests/array/array_map_variation4.phpt new file mode 100644 index 0000000000..bbf975de9b --- /dev/null +++ b/ext/standard/tests/array/array_map_variation4.phpt @@ -0,0 +1,280 @@ +--TEST-- +Test array_map() function : usage variations - associative array with different keys +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing associative array with different keys for $arr1 argument + */ + +echo "*** Testing array_map() : associative array with diff. keys for 'arr1' argument ***\n"; + +function callback($a) +{ + return ($a); +} + +// get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// get a class +class classA{ + public function __toString(){ + return "Class A object"; + } +} + +// get a heredoc string +$heredoc = <<<EOT +Hello world +EOT; + +// initializing the array +$arrays = array ( + + // empty array +/*1*/ array(), + + // arrays with integer keys +/*2*/ array(0 => "0"), + array(1 => "1"), + array(1 => "1", 2 => "2", 3 => "3", 4 => "4"), + + // arrays with float keys +/*5*/ array(2.3333 => "float"), + array(1.2 => "f1", 3.33 => "f2", 4.89999922839999 => "f3", 33333333.333333 => "f4"), + + // arrays with string keys + array('\tHello' => 111, 're\td' => 'color', '\v\fworld' => 2.2, 'pen\n' => 33), +/*8*/ array("\tHello" => 111, "re\td" => "color", "\v\fworld" => 2.2, "pen\n" => 33), + array("hello", $heredoc => "string"), // heredoc + + // array with object, unset variable and resource variable + array(new classA() => 11, @$unset_var => "hello", $fp => 'resource'), + + // array with mixed values +/*11*/ array('hello' => 1, new classA() => 2, "fruit" => 2.2, + $fp => 'resource', 133 => "int", 444.432 => "float", + @$unset_var => "unset", $heredoc => "heredoc") +); + +// loop through the various elements of $arrays to test array_map() +$iterator = 1; +foreach($arrays as $arr1) { + echo "-- Iteration $iterator --\n"; + var_dump( array_map('callback', $arr1) ); + $iterator++; +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : associative array with diff. keys for 'arr1' argument *** + +Warning: Illegal offset type in %s on line %d%d + +Warning: Illegal offset type in %s on line %d%d + +Warning: Illegal offset type in %s on line %d%d + +Warning: Illegal offset type in %s on line %d%d +-- Iteration 1 -- +array(0) { +} +-- Iteration 2 -- +array(1) { + [0]=> + string(1) "0" +} +-- Iteration 3 -- +array(1) { + [1]=> + string(1) "1" +} +-- Iteration 4 -- +array(4) { + [1]=> + string(1) "1" + [2]=> + string(1) "2" + [3]=> + string(1) "3" + [4]=> + string(1) "4" +} +-- Iteration 5 -- +array(1) { + [2]=> + string(5) "float" +} +-- Iteration 6 -- +array(4) { + [1]=> + string(2) "f1" + [3]=> + string(2) "f2" + [4]=> + string(2) "f3" + [33333333]=> + string(2) "f4" +} +-- Iteration 7 -- +array(4) { + ["\tHello"]=> + int(111) + ["re\td"]=> + string(5) "color" + ["\v\fworld"]=> + float(2.2) + ["pen\n"]=> + int(33) +} +-- Iteration 8 -- +array(4) { + [" Hello"]=> + int(111) + ["re d"]=> + string(5) "color" + ["world"]=> + float(2.2) + ["pen +"]=> + int(33) +} +-- Iteration 9 -- +array(2) { + [0]=> + string(5) "hello" + ["Hello world"]=> + string(6) "string" +} +-- Iteration 10 -- +array(1) { + [""]=> + string(5) "hello" +} +-- Iteration 11 -- +array(6) { + ["hello"]=> + int(1) + ["fruit"]=> + float(2.2) + [133]=> + string(3) "int" + [444]=> + string(5) "float" + [""]=> + string(5) "unset" + ["Hello world"]=> + string(7) "heredoc" +} +Done +--UEXPECTF-- +*** Testing array_map() : associative array with diff. keys for 'arr1' argument *** + +Warning: Illegal offset type in %s on line %d + +Warning: Illegal offset type in %s on line %d + +Warning: Illegal offset type in %s on line %d + +Warning: Illegal offset type in %s on line %d +-- Iteration 1 -- +array(0) { +} +-- Iteration 2 -- +array(1) { + [0]=> + unicode(1) "0" +} +-- Iteration 3 -- +array(1) { + [1]=> + unicode(1) "1" +} +-- Iteration 4 -- +array(4) { + [1]=> + unicode(1) "1" + [2]=> + unicode(1) "2" + [3]=> + unicode(1) "3" + [4]=> + unicode(1) "4" +} +-- Iteration 5 -- +array(1) { + [2]=> + unicode(5) "float" +} +-- Iteration 6 -- +array(4) { + [1]=> + unicode(2) "f1" + [3]=> + unicode(2) "f2" + [4]=> + unicode(2) "f3" + [33333333]=> + unicode(2) "f4" +} +-- Iteration 7 -- +array(4) { + [u"\tHello"]=> + int(111) + [u"re\td"]=> + unicode(5) "color" + [u"\v\fworld"]=> + float(2.2) + [u"pen\n"]=> + int(33) +} +-- Iteration 8 -- +array(4) { + [u" Hello"]=> + int(111) + [u"re d"]=> + unicode(5) "color" + [u"world"]=> + float(2.2) + [u"pen +"]=> + int(33) +} +-- Iteration 9 -- +array(2) { + [0]=> + unicode(5) "hello" + [u"Hello world"]=> + unicode(6) "string" +} +-- Iteration 10 -- +array(1) { + [u""]=> + unicode(5) "hello" +} +-- Iteration 11 -- +array(6) { + [u"hello"]=> + int(1) + [u"fruit"]=> + float(2.2) + [133]=> + unicode(3) "int" + [444]=> + unicode(5) "float" + [u""]=> + unicode(5) "unset" + [u"Hello world"]=> + unicode(7) "heredoc" +} +Done diff --git a/ext/standard/tests/array/array_map_variation5.phpt b/ext/standard/tests/array/array_map_variation5.phpt new file mode 100644 index 0000000000..55f1569211 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation5.phpt @@ -0,0 +1,181 @@ +--TEST-- +Test array_map() function : usage variations - associative array with different values +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing associative array with different values for $arr1 argument + */ + +echo "*** Testing array_map() : associative array with diff. values for 'arr1' argument ***\n"; + +function callback($a) +{ + return ($a); +} +//get an unset variable +$unset_var = array(1, 2); +unset ($unset_var); + +//get a resource variable +$fp = fopen(__FILE__, "r"); + +//get a class +class classA +{ + public function __toString(){ + return "Class A object"; + } +} + +// get a heredoc string +$heredoc = <<<EOT +Hello world +EOT; + +// initializing the array +$arrays = array ( + + // empty array +/*1*/ array(), + + // arrays with integer values + array('0' => 0), + array("1" => 1), + array("one" => 1, 'two' => 2, "three" => 3, 4 => 4), + + // arrays with float values +/*5*/ array("float" => 2.3333), + array("f1" => 1.2, 'f2' => 3.33, 3 => 4.89999922839999, 'f4' => 33333333.3333), + + // arrays with string values + array(111 => "\tHello", "red" => "col\tor", 2 => "\v\fworld", 3.3 => "pen\n"), +/*8*/ array(111 => '\tHello', "red" => 'col\tor', 2 => '\v\fworld', 3.3 => 'pen\n'), + array(1 => "hello", "heredoc" => $heredoc), + + // array with object, unset variable and resource variable + array(11 => new classA(), "unset" => @$unset_var, "resource" => $fp), + + // array with mixed values +/*11*/ array(1 => 'hello', 2 => new classA(), 222 => "fruit", + 'resource' => $fp, "int" => 133, "float" => 444.432, + "unset" => @$unset_var, "heredoc" => $heredoc) +); + +// loop through the various elements of $arrays to test array_map() +$iterator = 1; +foreach($arrays as $arr1) { + echo "-- Iteration $iterator --\n"; + var_dump( array_map('callback', $arr1) ); + $iterator++; +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : associative array with diff. values for 'arr1' argument *** +-- Iteration 1 -- +array(0) { +} +-- Iteration 2 -- +array(1) { + [0]=> + int(0) +} +-- Iteration 3 -- +array(1) { + [1]=> + int(1) +} +-- Iteration 4 -- +array(4) { + ["one"]=> + int(1) + ["two"]=> + int(2) + ["three"]=> + int(3) + [4]=> + int(4) +} +-- Iteration 5 -- +array(1) { + ["float"]=> + float(2.3333) +} +-- Iteration 6 -- +array(4) { + ["f1"]=> + float(1.2) + ["f2"]=> + float(3.33) + [3]=> + float(4.8999992284) + ["f4"]=> + float(33333333.3333) +} +-- Iteration 7 -- +array(4) { + [111]=> + string(6) " Hello" + ["red"]=> + string(6) "col or" + [2]=> + string(7) "world" + [3]=> + string(4) "pen +" +} +-- Iteration 8 -- +array(4) { + [111]=> + string(7) "\tHello" + ["red"]=> + string(7) "col\tor" + [2]=> + string(9) "\v\fworld" + [3]=> + string(5) "pen\n" +} +-- Iteration 9 -- +array(2) { + [1]=> + string(5) "hello" + ["heredoc"]=> + string(11) "Hello world" +} +-- Iteration 10 -- +array(3) { + [11]=> + object(classA)#%d (0) { + } + ["unset"]=> + NULL + ["resource"]=> + resource(%d) of type (stream) +} +-- Iteration 11 -- +array(8) { + [1]=> + string(5) "hello" + [2]=> + object(classA)#%d (0) { + } + [222]=> + string(5) "fruit" + ["resource"]=> + resource(%d) of type (stream) + ["int"]=> + int(133) + ["float"]=> + float(444.432) + ["unset"]=> + NULL + ["heredoc"]=> + string(11) "Hello world" +} +Done diff --git a/ext/standard/tests/array/array_map_variation6.phpt b/ext/standard/tests/array/array_map_variation6.phpt new file mode 100644 index 0000000000..2409a5763c --- /dev/null +++ b/ext/standard/tests/array/array_map_variation6.phpt @@ -0,0 +1,72 @@ +--TEST-- +Test array_map() function : usage variations - array having subarrays +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing array having different subarrays + */ + +echo "*** Testing array_map() : array having subarrays ***\n"; + +function callback($a) +{ + return $a; +} + +// different subarrays +$arr1 = array( + array(), + array(1, 2), + array('a', 'b'), + array(1, 2, 'a', 'b'), + array(1 => 'a', 'b' => 2) +); + +var_dump( array_map('callback', $arr1)); +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : array having subarrays *** +array(5) { + [0]=> + array(0) { + } + [1]=> + array(2) { + [0]=> + int(1) + [1]=> + int(2) + } + [2]=> + array(2) { + [0]=> + string(1) "a" + [1]=> + string(1) "b" + } + [3]=> + array(4) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + string(1) "a" + [3]=> + string(1) "b" + } + [4]=> + array(2) { + [1]=> + string(1) "a" + ["b"]=> + int(2) + } +} +Done diff --git a/ext/standard/tests/array/array_map_variation7.phpt b/ext/standard/tests/array/array_map_variation7.phpt new file mode 100644 index 0000000000..8f88a0f88c --- /dev/null +++ b/ext/standard/tests/array/array_map_variation7.phpt @@ -0,0 +1,122 @@ +--TEST-- +Test array_map() function : usage variations - arrays of different size +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing array having different size + * 1) first array as empty array + * 2) second array as empty array + * 3) second array shorter than first array + * 4) first array shorter than second array + * 5) one more array than callback function arguments + */ + +echo "*** Testing array_map() : arrays with diff. size ***\n"; + +function callback($a, $b) +{ + return array($a => $b); +} + +// calling array_map with different arrays +var_dump( array_map('callback', array(1, 2, 3), array()) ); +var_dump( array_map('callback', array(), array('a', 'b', 'c')) ); +var_dump( array_map('callback', array(1, 2, 3), array('a', 'b')) ); +var_dump( array_map('callback', array(012, 0x2F, 0X1A), array(2.3, 12.4e2)) ); +var_dump( array_map('callback', array(), array(1, 2, 3), array('a', 'b')) ); // passing more no. of arrays than callback function argument + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : arrays with diff. size *** +array(3) { + [0]=> + array(1) { + [1]=> + NULL + } + [1]=> + array(1) { + [2]=> + NULL + } + [2]=> + array(1) { + [3]=> + NULL + } +} +array(3) { + [0]=> + array(1) { + [""]=> + string(1) "a" + } + [1]=> + array(1) { + [""]=> + string(1) "b" + } + [2]=> + array(1) { + [""]=> + string(1) "c" + } +} +array(3) { + [0]=> + array(1) { + [1]=> + string(1) "a" + } + [1]=> + array(1) { + [2]=> + string(1) "b" + } + [2]=> + array(1) { + [3]=> + NULL + } +} +array(3) { + [0]=> + array(1) { + [10]=> + float(2.3) + } + [1]=> + array(1) { + [47]=> + float(1240) + } + [2]=> + array(1) { + [26]=> + NULL + } +} +array(3) { + [0]=> + array(1) { + [""]=> + int(1) + } + [1]=> + array(1) { + [""]=> + int(2) + } + [2]=> + array(1) { + [""]=> + int(3) + } +} +Done diff --git a/ext/standard/tests/array/array_map_variation8.phpt b/ext/standard/tests/array/array_map_variation8.phpt new file mode 100644 index 0000000000..5672e6cd95 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation8.phpt @@ -0,0 +1,81 @@ +--TEST-- +Test array_map() function : usage variations - array with references +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing array having reference values for $arr1 argument + */ + +echo "*** Testing array_map() : array with references for 'arr1' argument ***\n"; + +function callback1($a) +{ + return ($a); +} + +function callback_cat($a, $b) +{ + return ($a . $b); +} + +// reference variables +$value1 = 10; +$value2 = "hello"; +$value3 = 0; +$value4 = &$value2; + +// array containing reference variables +$arr1 = array( + 0 => 0, + 1 => &$value4, + 2 => &$value2, + 3 => "hello", + 4 => &$value3, + $value4 => &$value2 +); +echo "-- with one array --\n"; +var_dump( array_map('callback1', $arr1) ); + +echo "-- with two arrays --\n"; +var_dump( array_map('callback_cat', $arr1, $arr1) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : array with references for 'arr1' argument *** +-- with one array -- +array(6) { + [0]=> + int(0) + [1]=> + string(5) "hello" + [2]=> + string(5) "hello" + [3]=> + string(5) "hello" + [4]=> + int(0) + ["hello"]=> + string(5) "hello" +} +-- with two arrays -- +array(6) { + [0]=> + string(2) "00" + [1]=> + string(10) "hellohello" + [2]=> + string(10) "hellohello" + [3]=> + string(10) "hellohello" + [4]=> + string(2) "00" + [5]=> + string(10) "hellohello" +} +Done diff --git a/ext/standard/tests/array/array_map_variation9.phpt b/ext/standard/tests/array/array_map_variation9.phpt new file mode 100644 index 0000000000..f029beccd6 --- /dev/null +++ b/ext/standard/tests/array/array_map_variation9.phpt @@ -0,0 +1,88 @@ +--TEST-- +Test array_map() function : usage variations - binary safe checking +--FILE-- +<?php +/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] ) + * Description: Applies the callback to the elements of the given arrays + * Source code: ext/standard/array.c + */ + +/* + * Test array_map() by passing array having binary values for $arr1 argument + */ + +echo "*** Testing array_map() : array with binary data for 'arr1' argument ***\n"; + +function callback1($a) +{ + return ($a); +} +function callback2($a, $b) +{ + return array($a => $b); +} + +// array with binary data +$arr1 = array(b"hello", b"world", "1", b"22.22"); + +echo "-- checking binary safe array with one parameter callback function --\n"; +var_dump( array_map('callback1', $arr1) ); + +echo "-- checking binary safe array with two parameter callback function --\n"; +var_dump( array_map(b"callback2", $arr1) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_map() : array with binary data for 'arr1' argument *** +-- checking binary safe array with one parameter callback function -- +array(4) { + [0]=> + string(5) "hello" + [1]=> + string(5) "world" + [2]=> + string(1) "1" + [3]=> + string(5) "22.22" +} +-- checking binary safe array with two parameter callback function -- + +Warning: Missing argument 2 for callback2() in %s on line %d%d + +Notice: Undefined variable: b in %s on line %d%d + +Warning: Missing argument 2 for callback2() in %s on line %d%d + +Notice: Undefined variable: b in %s on line %d%d + +Warning: Missing argument 2 for callback2() in %s on line %d%d + +Notice: Undefined variable: b in %s on line %d%d + +Warning: Missing argument 2 for callback2() in %s on line %d%d + +Notice: Undefined variable: b in %s on line %d%d +array(4) { + [0]=> + array(1) { + ["hello"]=> + NULL + } + [1]=> + array(1) { + ["world"]=> + NULL + } + [2]=> + array(1) { + [1]=> + NULL + } + [3]=> + array(1) { + ["22.22"]=> + NULL + } +} +Done |