TypePHP 编译器 https://swoole.com/aot/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

131 lines
4.7 KiB

--TEST--
Test count() function
--SKIPIF--
<?php die("skip AOT count recursive differs from PHP"); ?>
--FILE--
<?php
class count_class implements Countable
{
private $var_private;
public $var_public;
protected $var_protected;
public function count(): int
{
return 3;
}
}
function main()
{
echo "*** Testing basic functionality of count() function ***\n";
print "-- Testing arrays --\n";
$arr = array(1, array(3, 4, array(6, array(8))));
print "COUNT_NORMAL: should be 2, is " . count($arr, COUNT_NORMAL) . "\n";
print "COUNT_RECURSIVE: should be 8, is " . count($arr, COUNT_RECURSIVE) . "\n";
print "-- Testing hashes --\n";
$arr = array("a" => 1, "b" => 2, array("c" => 3, array("d" => 5)));
print "COUNT_NORMAL: should be 3, is " . count($arr, COUNT_NORMAL) . "\n";
print "COUNT_RECURSIVE: should be 6, is " . count($arr, COUNT_RECURSIVE) . "\n";
print "-- Testing various types with no second argument --\n";
print "COUNT_NORMAL: should be 2, is " . count(array("a", array("b"))) . "\n";
$arr = array('a' => array(NULL, NULL, NULL), 1 => array(NULL => 1, 1 => NULL), array(array(array(array(array(NULL))))));
print "-- Testing really cool arrays --\n";
print "COUNT_NORMAL: should be 3, is " . count($arr, COUNT_NORMAL) . "\n";
print "COUNT_RECURSIVE: should be 13, is " . count($arr, COUNT_RECURSIVE) . "\n";
echo "\n*** Testing possible variations of count() function on arrays ***";
$count_array = array(array(), array(1 => "string"), array("" => "string", 0 => "a", NULL => "b", -1 => "c", array(array(array(NULL)))), array(-2 => 12, array(array(1, 2, array(array("0"))))), array("a" => 1, "b" => -2.344, "b" => "string", "c" => NULL, "d" => -2.344), array(4 => 1, 3 => -2.344, "3" => "string", "2" => NULL, 1 => -2.344, array()), array(TRUE => TRUE, FALSE => FALSE, "" => "", " " => " ", NULL => NULL, "\x000" => "\x000", "\x00" => "\x00"), array(NULL, 1 => "Hi", "string" => "hello", array("" => "World", "-2.34" => "a", "0" => "b")));
$i = 0;
foreach ($count_array as $count_value) {
echo "\n-- Iteration {$i} --\n";
print "COUNT_NORMAL is " . count($count_value, COUNT_NORMAL) . "\n";
print "COUNT_RECURSIVE is " . count($count_value, COUNT_RECURSIVE) . "\n";
$i++;
}
print "\n-- Testing count() on an empty sub-array --\n";
$arr = array(1, array(3, 4, array()));
print "COUNT_NORMAL: should be 2, is " . count($arr, COUNT_NORMAL) . "\n";
print "COUNT_RECURSIVE: should be 5, is " . count($arr, COUNT_RECURSIVE) . "\n";
echo "\n-- Testing count() on objects with Countable interface --\n";
$obj = new count_class();
print "COUNT_NORMAL: should be 3, is " . count($obj) . "\n";
echo "\n-- Testing count() on resource type --\n";
$resource1 = fopen(__FILE__, "r");
// Creating file(stream type) resource
$resource2 = opendir(".");
// Creating dir resource
/* creating an array with resources as elements */
$arr_resource = array("a" => $resource1, "b" => $resource2);
var_dump(count($arr_resource));
echo "\n-- Testing count() on arrays containing references --\n";
$arr = array(1, array("a", "b", "c"));
$arr[2] =& $arr[1];
echo "Count normal" . \PHP_EOL;
var_dump(count($arr, COUNT_NORMAL));
echo "Count recursive" . \PHP_EOL;
var_dump(count($arr, COUNT_RECURSIVE));
/* closing the resource handles */
fclose($resource1);
closedir($resource2);
}
?>
--EXPECT--
*** Testing basic functionality of count() function ***
-- Testing arrays --
COUNT_NORMAL: should be 2, is 2
COUNT_RECURSIVE: should be 8, is 8
-- Testing hashes --
COUNT_NORMAL: should be 3, is 3
COUNT_RECURSIVE: should be 6, is 6
-- Testing various types with no second argument --
COUNT_NORMAL: should be 2, is 2
-- Testing really cool arrays --
COUNT_NORMAL: should be 3, is 3
COUNT_RECURSIVE: should be 13, is 13
*** Testing possible variations of count() function on arrays ***
-- Iteration 0 --
COUNT_NORMAL is 0
COUNT_RECURSIVE is 0
-- Iteration 1 --
COUNT_NORMAL is 1
COUNT_RECURSIVE is 1
-- Iteration 2 --
COUNT_NORMAL is 4
COUNT_RECURSIVE is 7
-- Iteration 3 --
COUNT_NORMAL is 2
COUNT_RECURSIVE is 8
-- Iteration 4 --
COUNT_NORMAL is 4
COUNT_RECURSIVE is 4
-- Iteration 5 --
COUNT_NORMAL is 5
COUNT_RECURSIVE is 5
-- Iteration 6 --
COUNT_NORMAL is 6
COUNT_RECURSIVE is 6
-- Iteration 7 --
COUNT_NORMAL is 4
COUNT_RECURSIVE is 7
-- Testing count() on an empty sub-array --
COUNT_NORMAL: should be 2, is 2
COUNT_RECURSIVE: should be 5, is 5
-- Testing count() on objects with Countable interface --
COUNT_NORMAL: should be 3, is 3
-- Testing count() on resource type --
int(2)
-- Testing count() on arrays containing references --
Count normal
int(3)
Count recursive
int(9)