- 添加数组搜索相关函数的测试 (in_array, array_search, array_key_exists, array_keys) - 添加 base64 编码解码边界情况的测试 - 添加类和接口存在性检查函数的测试 (class_exists, interface_exists, trait_exists 等) - 添加路径处理函数的边界测试 (dirname, basename) - 添加类型检查函数的测试 (is_array, is_string, is_object 等) - 添加数学函数的进制转换和类型检查测试 - 添加数学运算函数的测试 (exp, log, sqrt, 三角函数等) - 添加字符串大小写转换函数的边界测试 - 添加字符串匹配检查函数的测试 (str_contains, str_starts_with, str_ends_with) - 添加字符串比较函数的测试 (strlen, strcmp, strcasecmp 等) - 添加字符串搜索函数的测试 (strstr, strpos, strrpos 等) - 添加可数和可迭代类型检查的测试 - 添加类型转换函数的测试 (strval, intval, floatval, boolval) - 添加 URL 编码解码函数的边界测试pull/1/head
parent
d26c76b9d8
commit
58f45fe97a
17 changed files with 823 additions and 0 deletions
@ -0,0 +1,58 @@ |
|||||||
|
--TEST-- |
||||||
|
in_array / array_search / array_key_exists / array_keys |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// in_array |
||||||
|
var_dump(in_array(2, [1, 2, 3])); |
||||||
|
var_dump(in_array("a", [1, 2, 3])); |
||||||
|
var_dump(in_array(0, ["hello", "world"])); |
||||||
|
var_dump(in_array("1", [1, 2, 3], true)); |
||||||
|
|
||||||
|
// array_search |
||||||
|
var_dump(array_search(2, [1, 2, 3])); |
||||||
|
var_dump(array_search("a", [1, 2, 3])); |
||||||
|
var_dump(array_search("1", [1, 2, 3], true)); |
||||||
|
var_dump(array_search(2, ["a" => 1, "b" => 2, "c" => 3])); |
||||||
|
|
||||||
|
// array_key_exists |
||||||
|
var_dump(array_key_exists("a", ["a" => 1, "b" => 2])); |
||||||
|
var_dump(array_key_exists("c", ["a" => 1, "b" => 2])); |
||||||
|
var_dump(array_key_exists(0, [1, 2, 3])); |
||||||
|
var_dump(array_key_exists(3, [1, 2, 3])); |
||||||
|
|
||||||
|
// array_keys |
||||||
|
var_dump(array_keys(["a" => 1, "b" => 2, "c" => 3])); |
||||||
|
var_dump(array_keys([1, 2, 3])); |
||||||
|
var_dump(array_keys([])); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
int(1) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
string(1) "b" |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
array(3) { |
||||||
|
[0]=> |
||||||
|
string(1) "a" |
||||||
|
[1]=> |
||||||
|
string(1) "b" |
||||||
|
[2]=> |
||||||
|
string(1) "c" |
||||||
|
} |
||||||
|
array(3) { |
||||||
|
[0]=> |
||||||
|
int(0) |
||||||
|
[1]=> |
||||||
|
int(1) |
||||||
|
[2]=> |
||||||
|
int(2) |
||||||
|
} |
||||||
|
array(0) { |
||||||
|
} |
||||||
@ -0,0 +1,36 @@ |
|||||||
|
--TEST-- |
||||||
|
base64_encode / base64_decode edge cases |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// Empty string |
||||||
|
var_dump(base64_encode("")); |
||||||
|
var_dump(base64_decode("")); |
||||||
|
|
||||||
|
// Basic round-trip |
||||||
|
var_dump(base64_encode("Hello World!")); |
||||||
|
var_dump(base64_decode("SGVsbG8gV29ybGQh")); |
||||||
|
|
||||||
|
// Binary data |
||||||
|
$data = chr(0) . chr(1) . chr(255) . chr(127); |
||||||
|
var_dump(base64_encode($data)); |
||||||
|
var_dump(base64_decode("AAH/fw==") === $data); |
||||||
|
|
||||||
|
// Strict mode: valid input |
||||||
|
var_dump(base64_decode("SGVsbG8gV29ybGQh", true)); |
||||||
|
|
||||||
|
// Strict mode: invalid padding |
||||||
|
var_dump(base64_decode("====", true)); |
||||||
|
|
||||||
|
// Non-strict mode: garbage input |
||||||
|
var_dump(base64_decode("!!!", false)); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(0) "" |
||||||
|
string(0) "" |
||||||
|
string(16) "SGVsbG8gV29ybGQh" |
||||||
|
string(12) "Hello World!" |
||||||
|
string(8) "AAH/fw==" |
||||||
|
bool(true) |
||||||
|
string(12) "Hello World!" |
||||||
|
bool(false) |
||||||
|
string(0) "" |
||||||
@ -0,0 +1,48 @@ |
|||||||
|
--TEST-- |
||||||
|
class_exists / interface_exists / trait_exists / enum_exists / defined |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
class MyClass {} |
||||||
|
interface MyInterface {} |
||||||
|
trait MyTrait {} |
||||||
|
enum MyEnum { case Foo; } |
||||||
|
|
||||||
|
function main() { |
||||||
|
define("MY_CONST", 42); |
||||||
|
|
||||||
|
// class_exists |
||||||
|
var_dump(class_exists("MyClass")); |
||||||
|
var_dump(class_exists("MyClass", false)); |
||||||
|
var_dump(class_exists("NonexistentClass")); |
||||||
|
var_dump(class_exists("NonexistentClass", false)); |
||||||
|
|
||||||
|
// interface_exists |
||||||
|
var_dump(interface_exists("MyInterface")); |
||||||
|
var_dump(interface_exists("NonexistentInterface")); |
||||||
|
|
||||||
|
// trait_exists |
||||||
|
var_dump(trait_exists("MyTrait")); |
||||||
|
var_dump(trait_exists("NonexistentTrait")); |
||||||
|
|
||||||
|
// enum_exists |
||||||
|
var_dump(enum_exists("MyEnum")); |
||||||
|
var_dump(enum_exists("NonexistentEnum")); |
||||||
|
|
||||||
|
// defined |
||||||
|
var_dump(defined("MY_CONST")); |
||||||
|
var_dump(defined("UNDEFINED_CONST")); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
--TEST-- |
||||||
|
dirname / basename edge cases |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// dirname |
||||||
|
var_dump(dirname("/usr/local/bin")); |
||||||
|
var_dump(dirname("/usr/local/bin", 1)); |
||||||
|
var_dump(dirname("/usr/local/bin", 2)); |
||||||
|
var_dump(dirname("/usr/local/bin", 3)); |
||||||
|
var_dump(dirname("/usr/")); |
||||||
|
var_dump(dirname("usr")); |
||||||
|
var_dump(dirname("")); |
||||||
|
|
||||||
|
// basename |
||||||
|
var_dump(basename("/usr/local/bin")); |
||||||
|
var_dump(basename("/usr/local/bin", "bin")); |
||||||
|
var_dump(basename("/")); |
||||||
|
var_dump(basename("usr")); |
||||||
|
var_dump(basename("")); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(10) "/usr/local" |
||||||
|
string(10) "/usr/local" |
||||||
|
string(4) "/usr" |
||||||
|
string(1) "/" |
||||||
|
string(1) "/" |
||||||
|
string(1) "." |
||||||
|
string(0) "" |
||||||
|
string(3) "bin" |
||||||
|
string(3) "bin" |
||||||
|
string(0) "" |
||||||
|
string(3) "usr" |
||||||
|
string(0) "" |
||||||
@ -0,0 +1,71 @@ |
|||||||
|
--TEST-- |
||||||
|
is_* type check functions |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// is_array |
||||||
|
var_dump(is_array([])); |
||||||
|
var_dump(is_array([1,2,3])); |
||||||
|
var_dump(is_array("hello")); |
||||||
|
var_dump(is_array(42)); |
||||||
|
|
||||||
|
// is_string |
||||||
|
var_dump(is_string("")); |
||||||
|
var_dump(is_string("hello")); |
||||||
|
var_dump(is_string(42)); |
||||||
|
var_dump(is_string([])); |
||||||
|
|
||||||
|
// is_object |
||||||
|
var_dump(is_object(new stdClass())); |
||||||
|
var_dump(is_object([])); |
||||||
|
var_dump(is_object(null)); |
||||||
|
|
||||||
|
// is_numeric |
||||||
|
var_dump(is_numeric(42)); |
||||||
|
var_dump(is_numeric(3.14)); |
||||||
|
var_dump(is_numeric("42")); |
||||||
|
var_dump(is_numeric("3.14")); |
||||||
|
var_dump(is_numeric("hello")); |
||||||
|
var_dump(is_numeric([])); |
||||||
|
|
||||||
|
// is_scalar |
||||||
|
var_dump(is_scalar(42)); |
||||||
|
var_dump(is_scalar("hello")); |
||||||
|
var_dump(is_scalar(3.14)); |
||||||
|
var_dump(is_scalar(true)); |
||||||
|
var_dump(is_scalar([])); |
||||||
|
var_dump(is_scalar(null)); |
||||||
|
|
||||||
|
// is_resource |
||||||
|
$f = fopen(__FILE__, "r"); |
||||||
|
var_dump(is_resource($f)); |
||||||
|
fclose($f); |
||||||
|
var_dump(is_resource(null)); |
||||||
|
var_dump(is_resource(42)); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
@ -0,0 +1,47 @@ |
|||||||
|
--TEST-- |
||||||
|
Math functions: base conversion and is_* checks |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// decbin / decoct / dechex |
||||||
|
var_dump(decbin(0)); |
||||||
|
var_dump(decbin(10)); |
||||||
|
var_dump(decoct(0)); |
||||||
|
var_dump(decoct(10)); |
||||||
|
var_dump(dechex(0)); |
||||||
|
var_dump(dechex(255)); |
||||||
|
|
||||||
|
// bindec / octdec / hexdec |
||||||
|
var_dump(bindec("1010")); |
||||||
|
var_dump(bindec("0")); |
||||||
|
var_dump(octdec("12")); |
||||||
|
var_dump(octdec("0")); |
||||||
|
var_dump(hexdec("FF")); |
||||||
|
var_dump(hexdec("0")); |
||||||
|
|
||||||
|
// is_finite / is_infinite / is_nan |
||||||
|
var_dump(is_finite(0)); |
||||||
|
var_dump(is_finite(log(0))); |
||||||
|
var_dump(is_infinite(0)); |
||||||
|
var_dump(is_infinite(log(0))); |
||||||
|
var_dump(is_nan(0)); |
||||||
|
var_dump(is_nan(sqrt(-1))); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(1) "0" |
||||||
|
string(4) "1010" |
||||||
|
string(1) "0" |
||||||
|
string(2) "12" |
||||||
|
string(1) "0" |
||||||
|
string(2) "ff" |
||||||
|
int(10) |
||||||
|
int(0) |
||||||
|
int(10) |
||||||
|
int(0) |
||||||
|
int(255) |
||||||
|
int(0) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
@ -0,0 +1,55 @@ |
|||||||
|
--TEST-- |
||||||
|
Math functions: exp, log, sqrt, hypot, deg2rad, rad2deg, pi, fmod, fdiv, fpow |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// pi |
||||||
|
var_dump(round(pi(), 10)); |
||||||
|
|
||||||
|
// exp / expm1 |
||||||
|
var_dump(round(exp(0), 10)); |
||||||
|
var_dump(round(exp(1), 6)); |
||||||
|
var_dump(round(expm1(0), 10)); |
||||||
|
|
||||||
|
// log / log10 / log1p |
||||||
|
var_dump(round(log(1), 10)); |
||||||
|
var_dump(round(log(M_E), 10)); |
||||||
|
var_dump(round(log10(10), 10)); |
||||||
|
var_dump(round(log1p(0), 10)); |
||||||
|
|
||||||
|
// sqrt |
||||||
|
var_dump(round(sqrt(4), 10)); |
||||||
|
var_dump(round(sqrt(2), 6)); |
||||||
|
|
||||||
|
// hypot |
||||||
|
var_dump(round(hypot(3, 4), 10)); |
||||||
|
|
||||||
|
// deg2rad / rad2deg |
||||||
|
var_dump(round(deg2rad(180), 10)); |
||||||
|
var_dump(round(rad2deg(M_PI), 10)); |
||||||
|
|
||||||
|
// fmod |
||||||
|
var_dump(round(fmod(5.7, 1.3), 6)); |
||||||
|
|
||||||
|
// fdiv |
||||||
|
var_dump(round(fdiv(5, 2), 1)); |
||||||
|
|
||||||
|
// fpow |
||||||
|
var_dump(round(fpow(2, 8), 10)); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
float(3.1415926536) |
||||||
|
float(1) |
||||||
|
float(2.718282) |
||||||
|
float(0) |
||||||
|
float(0) |
||||||
|
float(1) |
||||||
|
float(1) |
||||||
|
float(0) |
||||||
|
float(2) |
||||||
|
float(1.414214) |
||||||
|
float(5) |
||||||
|
float(3.1415926536) |
||||||
|
float(180) |
||||||
|
float(0.5) |
||||||
|
float(2.5) |
||||||
|
float(256) |
||||||
@ -0,0 +1,49 @@ |
|||||||
|
--TEST-- |
||||||
|
Math functions: sin, cos, tan, asin, acos, atan, atan2 |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// sin / cos / tan |
||||||
|
var_dump(round(sin(0), 10)); |
||||||
|
var_dump(round(sin(M_PI / 2), 10)); |
||||||
|
var_dump(round(cos(0), 10)); |
||||||
|
var_dump(round(cos(M_PI), 10)); |
||||||
|
var_dump(round(tan(0), 10)); |
||||||
|
var_dump(round(tan(M_PI / 4), 10)); |
||||||
|
|
||||||
|
// asin / acos / atan |
||||||
|
var_dump(round(asin(0), 10)); |
||||||
|
var_dump(round(acos(1), 10)); |
||||||
|
var_dump(round(atan(0), 10)); |
||||||
|
|
||||||
|
// atan2 |
||||||
|
var_dump(round(atan2(1, 0), 10)); |
||||||
|
var_dump(round(atan2(0, 1), 10)); |
||||||
|
|
||||||
|
// Sinh, cosh, tanh |
||||||
|
var_dump(round(sinh(0), 10)); |
||||||
|
var_dump(round(cosh(0), 10)); |
||||||
|
var_dump(round(tanh(0), 10)); |
||||||
|
|
||||||
|
// asinh, acosh, atanh |
||||||
|
var_dump(round(asinh(0), 10)); |
||||||
|
var_dump(round(acosh(1), 10)); |
||||||
|
var_dump(round(atanh(0), 10)); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
float(0) |
||||||
|
float(1) |
||||||
|
float(1) |
||||||
|
float(-1) |
||||||
|
float(0) |
||||||
|
float(1) |
||||||
|
float(0) |
||||||
|
float(0) |
||||||
|
float(0) |
||||||
|
float(1.5707963268) |
||||||
|
float(0) |
||||||
|
float(0) |
||||||
|
float(1) |
||||||
|
float(0) |
||||||
|
float(0) |
||||||
|
float(0) |
||||||
|
float(0) |
||||||
@ -0,0 +1,62 @@ |
|||||||
|
--TEST-- |
||||||
|
crc32 / uniqid / print_r / gettype / array_is_list |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// crc32 |
||||||
|
var_dump(crc32("")); |
||||||
|
var_dump(crc32("hello")); |
||||||
|
var_dump(crc32("Hello World!")); |
||||||
|
var_dump(is_int(crc32("test"))); |
||||||
|
|
||||||
|
// uniqid |
||||||
|
$id = uniqid(); |
||||||
|
var_dump(is_string($id) && !empty($id)); |
||||||
|
$id2 = uniqid("prefix_"); |
||||||
|
var_dump(str_starts_with($id2, "prefix_")); |
||||||
|
$id3 = uniqid("", true); |
||||||
|
var_dump(strlen($id3) > 13); |
||||||
|
|
||||||
|
// print_r with return=true |
||||||
|
var_dump(print_r("hello", true)); |
||||||
|
var_dump(str_contains(print_r([1, 2, 3], true), "[0] => 1")); |
||||||
|
var_dump(str_contains(print_r(["a" => 1], true), "[a]")); |
||||||
|
|
||||||
|
// gettype |
||||||
|
var_dump(gettype(null)); |
||||||
|
var_dump(gettype(true)); |
||||||
|
var_dump(gettype(42)); |
||||||
|
var_dump(gettype(3.14)); |
||||||
|
var_dump(gettype("hello")); |
||||||
|
var_dump(gettype([])); |
||||||
|
var_dump(gettype(new stdClass())); |
||||||
|
|
||||||
|
// array_is_list |
||||||
|
var_dump(array_is_list([])); |
||||||
|
var_dump(array_is_list([1, 2, 3])); |
||||||
|
var_dump(array_is_list([0 => "a", 1 => "b"])); |
||||||
|
var_dump(array_is_list([1 => "a", 0 => "b"])); |
||||||
|
var_dump(array_is_list(["a" => 1, "b" => 2])); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
int(0) |
||||||
|
int(907060870) |
||||||
|
int(472456355) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
string(5) "hello" |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
string(4) "NULL" |
||||||
|
string(7) "boolean" |
||||||
|
string(7) "integer" |
||||||
|
string(6) "double" |
||||||
|
string(6) "string" |
||||||
|
string(5) "array" |
||||||
|
string(6) "object" |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
--TEST-- |
||||||
|
number_format edge cases |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// Basic usage |
||||||
|
var_dump(number_format(1234.5678)); |
||||||
|
var_dump(number_format(1234.5678, 2)); |
||||||
|
var_dump(number_format(1234.5678, 2, ",", ".")); |
||||||
|
var_dump(number_format(1234.5678, 2, ".", "")); |
||||||
|
|
||||||
|
// Zero and negative |
||||||
|
var_dump(number_format(0)); |
||||||
|
var_dump(number_format(-1234.56)); |
||||||
|
var_dump(number_format(-1234.56, 1)); |
||||||
|
|
||||||
|
// Large numbers |
||||||
|
var_dump(number_format(1000000)); |
||||||
|
var_dump(number_format(1000000.5, 1)); |
||||||
|
|
||||||
|
// Integer input |
||||||
|
var_dump(number_format(42)); |
||||||
|
var_dump(number_format(42, 3)); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(5) "1,235" |
||||||
|
string(8) "1,234.57" |
||||||
|
string(8) "1.234,57" |
||||||
|
string(7) "1234.57" |
||||||
|
string(1) "0" |
||||||
|
string(6) "-1,235" |
||||||
|
string(8) "-1,234.6" |
||||||
|
string(9) "1,000,000" |
||||||
|
string(11) "1,000,000.5" |
||||||
|
string(2) "42" |
||||||
|
string(6) "42.000" |
||||||
@ -0,0 +1,41 @@ |
|||||||
|
--TEST-- |
||||||
|
lcfirst / ucfirst / strtolower / strtoupper edge cases |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// lcfirst |
||||||
|
var_dump(lcfirst("")); |
||||||
|
var_dump(lcfirst("Hello")); |
||||||
|
var_dump(lcfirst("HELLO")); |
||||||
|
var_dump(lcfirst("hELLO")); |
||||||
|
|
||||||
|
// ucfirst |
||||||
|
var_dump(ucfirst("")); |
||||||
|
var_dump(ucfirst("hello")); |
||||||
|
var_dump(ucfirst("Hello")); |
||||||
|
var_dump(ucfirst("hELLO")); |
||||||
|
|
||||||
|
// strtolower |
||||||
|
var_dump(strtolower("")); |
||||||
|
var_dump(strtolower("HELLO")); |
||||||
|
var_dump(strtolower("Hello World")); |
||||||
|
|
||||||
|
// strtoupper |
||||||
|
var_dump(strtoupper("")); |
||||||
|
var_dump(strtoupper("hello")); |
||||||
|
var_dump(strtoupper("Hello World")); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(0) "" |
||||||
|
string(5) "hello" |
||||||
|
string(5) "hELLO" |
||||||
|
string(5) "hELLO" |
||||||
|
string(0) "" |
||||||
|
string(5) "Hello" |
||||||
|
string(5) "Hello" |
||||||
|
string(5) "HELLO" |
||||||
|
string(0) "" |
||||||
|
string(5) "hello" |
||||||
|
string(11) "hello world" |
||||||
|
string(0) "" |
||||||
|
string(5) "HELLO" |
||||||
|
string(11) "HELLO WORLD" |
||||||
@ -0,0 +1,41 @@ |
|||||||
|
--TEST-- |
||||||
|
str_contains / str_starts_with / str_ends_with edge cases |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// str_contains |
||||||
|
var_dump(str_contains("", "")); |
||||||
|
var_dump(str_contains("hello", "")); |
||||||
|
var_dump(str_contains("hello", "ll")); |
||||||
|
var_dump(str_contains("hello", "xy")); |
||||||
|
var_dump(str_contains("", "a")); |
||||||
|
|
||||||
|
// str_starts_with |
||||||
|
var_dump(str_starts_with("", "")); |
||||||
|
var_dump(str_starts_with("hello", "")); |
||||||
|
var_dump(str_starts_with("hello", "he")); |
||||||
|
var_dump(str_starts_with("hello", "lo")); |
||||||
|
var_dump(str_starts_with("", "a")); |
||||||
|
|
||||||
|
// str_ends_with |
||||||
|
var_dump(str_ends_with("", "")); |
||||||
|
var_dump(str_ends_with("hello", "")); |
||||||
|
var_dump(str_ends_with("hello", "lo")); |
||||||
|
var_dump(str_ends_with("hello", "he")); |
||||||
|
var_dump(str_ends_with("", "a")); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
@ -0,0 +1,45 @@ |
|||||||
|
--TEST-- |
||||||
|
strlen / strcmp / strcasecmp / strncmp / strncasecmp |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// strlen |
||||||
|
var_dump(strlen("")); |
||||||
|
var_dump(strlen("hello")); |
||||||
|
var_dump(strlen("Hello World!")); |
||||||
|
|
||||||
|
// strcmp |
||||||
|
var_dump(strcmp("abc", "abc")); |
||||||
|
var_dump(strcmp("abc", "abd")); |
||||||
|
var_dump(strcmp("abd", "abc")); |
||||||
|
|
||||||
|
// strcasecmp |
||||||
|
var_dump(strcasecmp("ABC", "abc")); |
||||||
|
var_dump(strcasecmp("ABC", "abd")); |
||||||
|
var_dump(strcasecmp("ABD", "abc")); |
||||||
|
|
||||||
|
// strncmp |
||||||
|
var_dump(strncmp("abc123", "abc456", 3)); |
||||||
|
var_dump(strncmp("abc123", "abd123", 3)); |
||||||
|
var_dump(strncmp("abd123", "abc123", 3)); |
||||||
|
|
||||||
|
// strncasecmp |
||||||
|
var_dump(strncasecmp("ABC123", "abc456", 3)); |
||||||
|
var_dump(strncasecmp("ABC123", "ABD123", 3)); |
||||||
|
var_dump(strncasecmp("ABD123", "ABC123", 3)); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
int(0) |
||||||
|
int(5) |
||||||
|
int(12) |
||||||
|
int(0) |
||||||
|
int(-1) |
||||||
|
int(1) |
||||||
|
int(0) |
||||||
|
int(-1) |
||||||
|
int(1) |
||||||
|
int(0) |
||||||
|
int(-1) |
||||||
|
int(1) |
||||||
|
int(0) |
||||||
|
int(-1) |
||||||
|
int(1) |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
--TEST-- |
||||||
|
strstr / strrpos / strpos / stripos |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// strstr |
||||||
|
var_dump(strstr("hello world", "world")); |
||||||
|
var_dump(strstr("hello world", "world", true)); |
||||||
|
var_dump(strstr("hello world", "xyz")); |
||||||
|
|
||||||
|
// strrpos |
||||||
|
var_dump(strrpos("hello world hello", "hello")); |
||||||
|
var_dump(strrpos("hello world hello", "hello", -5)); |
||||||
|
var_dump(strrpos("hello world", "xyz")); |
||||||
|
|
||||||
|
// strpos |
||||||
|
var_dump(strpos("hello world", "world")); |
||||||
|
var_dump(strpos("hello world", "xyz")); |
||||||
|
|
||||||
|
// stripos |
||||||
|
var_dump(stripos("Hello World", "world")); |
||||||
|
var_dump(stripos("Hello World", "xyz")); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(5) "world" |
||||||
|
string(6) "hello " |
||||||
|
bool(false) |
||||||
|
int(12) |
||||||
|
int(12) |
||||||
|
bool(false) |
||||||
|
int(6) |
||||||
|
bool(false) |
||||||
|
int(6) |
||||||
|
bool(false) |
||||||
@ -0,0 +1,68 @@ |
|||||||
|
--TEST-- |
||||||
|
is_countable / is_iterable / method_exists / property_exists |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
class TestClass { |
||||||
|
public function foo() {} |
||||||
|
public static function bar() {} |
||||||
|
} |
||||||
|
|
||||||
|
class PropClass { |
||||||
|
public $x = 1; |
||||||
|
private $y = 2; |
||||||
|
public static $z = 3; |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
// is_countable |
||||||
|
var_dump(is_countable([])); |
||||||
|
var_dump(is_countable([1,2,3])); |
||||||
|
var_dump(is_countable("hello")); |
||||||
|
var_dump(is_countable(42)); |
||||||
|
var_dump(is_countable(null)); |
||||||
|
|
||||||
|
// is_iterable |
||||||
|
var_dump(is_iterable([])); |
||||||
|
var_dump(is_iterable([1,2,3])); |
||||||
|
var_dump(is_iterable("hello")); |
||||||
|
var_dump(is_iterable(42)); |
||||||
|
var_dump(is_iterable(new stdClass())); |
||||||
|
|
||||||
|
// method_exists |
||||||
|
$obj = new TestClass(); |
||||||
|
var_dump(method_exists($obj, "foo")); |
||||||
|
var_dump(method_exists($obj, "bar")); |
||||||
|
var_dump(method_exists($obj, "baz")); |
||||||
|
var_dump(method_exists("TestClass", "foo")); |
||||||
|
var_dump(method_exists("TestClass", "nonexistent")); |
||||||
|
|
||||||
|
// property_exists |
||||||
|
$p = new PropClass(); |
||||||
|
var_dump(property_exists($p, "x")); |
||||||
|
var_dump(property_exists($p, "y")); |
||||||
|
var_dump(property_exists($p, "z")); |
||||||
|
var_dump(property_exists($p, "nonexistent")); |
||||||
|
var_dump(property_exists("PropClass", "x")); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
@ -0,0 +1,55 @@ |
|||||||
|
--TEST-- |
||||||
|
strval / intval / floatval / boolval type conversions |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// strval |
||||||
|
var_dump(strval(42)); |
||||||
|
var_dump(strval(1.5)); |
||||||
|
var_dump(strval(true)); |
||||||
|
var_dump(strval(false)); |
||||||
|
var_dump(strval(null)); |
||||||
|
|
||||||
|
// intval |
||||||
|
var_dump(intval(42)); |
||||||
|
var_dump(intval(3.14)); |
||||||
|
var_dump(intval("42")); |
||||||
|
var_dump(intval("3.14")); |
||||||
|
var_dump(intval(true)); |
||||||
|
var_dump(intval(false)); |
||||||
|
|
||||||
|
// floatval |
||||||
|
var_dump(floatval(42)); |
||||||
|
var_dump(floatval("3.14")); |
||||||
|
var_dump(floatval("42")); |
||||||
|
|
||||||
|
// boolval |
||||||
|
var_dump(boolval(1)); |
||||||
|
var_dump(boolval(0)); |
||||||
|
var_dump(boolval("")); |
||||||
|
var_dump(boolval("hello")); |
||||||
|
var_dump(boolval([])); |
||||||
|
var_dump(boolval([1])); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(2) "42" |
||||||
|
string(3) "1.5" |
||||||
|
string(1) "1" |
||||||
|
string(0) "" |
||||||
|
string(0) "" |
||||||
|
int(42) |
||||||
|
int(3) |
||||||
|
int(42) |
||||||
|
int(3) |
||||||
|
int(1) |
||||||
|
int(0) |
||||||
|
float(42) |
||||||
|
float(3.14) |
||||||
|
float(42) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
|
bool(false) |
||||||
|
bool(true) |
||||||
@ -0,0 +1,44 @@ |
|||||||
|
--TEST-- |
||||||
|
urlencode / urldecode / rawurlencode / rawurldecode edge cases |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// Empty string |
||||||
|
var_dump(urlencode("")); |
||||||
|
var_dump(urldecode("")); |
||||||
|
var_dump(rawurlencode("")); |
||||||
|
var_dump(rawurldecode("")); |
||||||
|
|
||||||
|
// Basic encoding |
||||||
|
var_dump(urlencode("hello world")); |
||||||
|
var_dump(urldecode("hello+world")); |
||||||
|
var_dump(rawurlencode("hello world")); |
||||||
|
var_dump(rawurldecode("hello%20world")); |
||||||
|
|
||||||
|
// Special characters |
||||||
|
var_dump(urlencode("äöü")); |
||||||
|
var_dump(rawurlencode("äöü")); |
||||||
|
|
||||||
|
// Reserved characters: + and = are encoded the same by both functions |
||||||
|
var_dump(urlencode("a+b=c")); |
||||||
|
var_dump(rawurlencode("a+b=c")); |
||||||
|
|
||||||
|
// Round-trip |
||||||
|
$orig = "Hello World! @#$%^&*()"; |
||||||
|
var_dump(urldecode(urlencode($orig)) === $orig); |
||||||
|
var_dump(rawurldecode(rawurlencode($orig)) === $orig); |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(0) "" |
||||||
|
string(0) "" |
||||||
|
string(0) "" |
||||||
|
string(0) "" |
||||||
|
string(11) "hello+world" |
||||||
|
string(11) "hello world" |
||||||
|
string(13) "hello%20world" |
||||||
|
string(11) "hello world" |
||||||
|
string(18) "%C3%A4%C3%B6%C3%BC" |
||||||
|
string(18) "%C3%A4%C3%B6%C3%BC" |
||||||
|
string(9) "a%2Bb%3Dc" |
||||||
|
string(9) "a%2Bb%3Dc" |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
Loading…
Reference in new issue