From 58f45fe97ac13312f71c1993dc6de06da7d38c7b Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Fri, 12 Jun 2026 17:26:46 +0800 Subject: [PATCH] =?UTF-8?q?test(stdlib):=20=E6=B7=BB=E5=8A=A0=E6=A0=87?= =?UTF-8?q?=E5=87=86=E5=BA=93=E5=87=BD=E6=95=B0=E7=9A=84=E5=85=A8=E9=9D=A2?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加数组搜索相关函数的测试 (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 编码解码函数的边界测试 --- tests/aot/stdlib/array_search.phpt | 58 +++++++++++++++++++ tests/aot/stdlib/base64_edge.phpt | 36 ++++++++++++ tests/aot/stdlib/class_exists.phpt | 48 ++++++++++++++++ tests/aot/stdlib/dirname_basename.phpt | 35 ++++++++++++ tests/aot/stdlib/is_type_check.phpt | 71 ++++++++++++++++++++++++ tests/aot/stdlib/math_base_is.phpt | 47 ++++++++++++++++ tests/aot/stdlib/math_exp_log.phpt | 55 ++++++++++++++++++ tests/aot/stdlib/math_trig.phpt | 49 ++++++++++++++++ tests/aot/stdlib/misc_stdlib.phpt | 62 +++++++++++++++++++++ tests/aot/stdlib/number_format_edge.phpt | 35 ++++++++++++ tests/aot/stdlib/string_case.phpt | 41 ++++++++++++++ tests/aot/stdlib/string_check.phpt | 41 ++++++++++++++ tests/aot/stdlib/string_cmp.phpt | 45 +++++++++++++++ tests/aot/stdlib/string_search.phpt | 33 +++++++++++ tests/aot/stdlib/type_check.phpt | 68 +++++++++++++++++++++++ tests/aot/stdlib/type_conv.phpt | 55 ++++++++++++++++++ tests/aot/stdlib/url_edge.phpt | 44 +++++++++++++++ 17 files changed, 823 insertions(+) create mode 100644 tests/aot/stdlib/array_search.phpt create mode 100644 tests/aot/stdlib/base64_edge.phpt create mode 100644 tests/aot/stdlib/class_exists.phpt create mode 100644 tests/aot/stdlib/dirname_basename.phpt create mode 100644 tests/aot/stdlib/is_type_check.phpt create mode 100644 tests/aot/stdlib/math_base_is.phpt create mode 100644 tests/aot/stdlib/math_exp_log.phpt create mode 100644 tests/aot/stdlib/math_trig.phpt create mode 100644 tests/aot/stdlib/misc_stdlib.phpt create mode 100644 tests/aot/stdlib/number_format_edge.phpt create mode 100644 tests/aot/stdlib/string_case.phpt create mode 100644 tests/aot/stdlib/string_check.phpt create mode 100644 tests/aot/stdlib/string_cmp.phpt create mode 100644 tests/aot/stdlib/string_search.phpt create mode 100644 tests/aot/stdlib/type_check.phpt create mode 100644 tests/aot/stdlib/type_conv.phpt create mode 100644 tests/aot/stdlib/url_edge.phpt diff --git a/tests/aot/stdlib/array_search.phpt b/tests/aot/stdlib/array_search.phpt new file mode 100644 index 00000000..fadeb763 --- /dev/null +++ b/tests/aot/stdlib/array_search.phpt @@ -0,0 +1,58 @@ +--TEST-- +in_array / array_search / array_key_exists / array_keys +--FILE-- + 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) { +} diff --git a/tests/aot/stdlib/base64_edge.phpt b/tests/aot/stdlib/base64_edge.phpt new file mode 100644 index 00000000..e2ad7abc --- /dev/null +++ b/tests/aot/stdlib/base64_edge.phpt @@ -0,0 +1,36 @@ +--TEST-- +base64_encode / base64_decode edge cases +--FILE-- + +--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) "" diff --git a/tests/aot/stdlib/class_exists.phpt b/tests/aot/stdlib/class_exists.phpt new file mode 100644 index 00000000..78dbf93a --- /dev/null +++ b/tests/aot/stdlib/class_exists.phpt @@ -0,0 +1,48 @@ +--TEST-- +class_exists / interface_exists / trait_exists / enum_exists / defined +--FILE-- + +--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) diff --git a/tests/aot/stdlib/dirname_basename.phpt b/tests/aot/stdlib/dirname_basename.phpt new file mode 100644 index 00000000..eab9be92 --- /dev/null +++ b/tests/aot/stdlib/dirname_basename.phpt @@ -0,0 +1,35 @@ +--TEST-- +dirname / basename edge cases +--FILE-- + +--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) "" diff --git a/tests/aot/stdlib/is_type_check.phpt b/tests/aot/stdlib/is_type_check.phpt new file mode 100644 index 00000000..b910e4a4 --- /dev/null +++ b/tests/aot/stdlib/is_type_check.phpt @@ -0,0 +1,71 @@ +--TEST-- +is_* type check functions +--FILE-- + +--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) diff --git a/tests/aot/stdlib/math_base_is.phpt b/tests/aot/stdlib/math_base_is.phpt new file mode 100644 index 00000000..18c46462 --- /dev/null +++ b/tests/aot/stdlib/math_base_is.phpt @@ -0,0 +1,47 @@ +--TEST-- +Math functions: base conversion and is_* checks +--FILE-- + +--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) diff --git a/tests/aot/stdlib/math_exp_log.phpt b/tests/aot/stdlib/math_exp_log.phpt new file mode 100644 index 00000000..54ac24b8 --- /dev/null +++ b/tests/aot/stdlib/math_exp_log.phpt @@ -0,0 +1,55 @@ +--TEST-- +Math functions: exp, log, sqrt, hypot, deg2rad, rad2deg, pi, fmod, fdiv, fpow +--FILE-- + +--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) diff --git a/tests/aot/stdlib/math_trig.phpt b/tests/aot/stdlib/math_trig.phpt new file mode 100644 index 00000000..ca53594a --- /dev/null +++ b/tests/aot/stdlib/math_trig.phpt @@ -0,0 +1,49 @@ +--TEST-- +Math functions: sin, cos, tan, asin, acos, atan, atan2 +--FILE-- + +--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) diff --git a/tests/aot/stdlib/misc_stdlib.phpt b/tests/aot/stdlib/misc_stdlib.phpt new file mode 100644 index 00000000..e1af2570 --- /dev/null +++ b/tests/aot/stdlib/misc_stdlib.phpt @@ -0,0 +1,62 @@ +--TEST-- +crc32 / uniqid / print_r / gettype / array_is_list +--FILE-- + 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) diff --git a/tests/aot/stdlib/number_format_edge.phpt b/tests/aot/stdlib/number_format_edge.phpt new file mode 100644 index 00000000..7043b4f2 --- /dev/null +++ b/tests/aot/stdlib/number_format_edge.phpt @@ -0,0 +1,35 @@ +--TEST-- +number_format edge cases +--FILE-- + +--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" diff --git a/tests/aot/stdlib/string_case.phpt b/tests/aot/stdlib/string_case.phpt new file mode 100644 index 00000000..dd5615f7 --- /dev/null +++ b/tests/aot/stdlib/string_case.phpt @@ -0,0 +1,41 @@ +--TEST-- +lcfirst / ucfirst / strtolower / strtoupper edge cases +--FILE-- + +--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" diff --git a/tests/aot/stdlib/string_check.phpt b/tests/aot/stdlib/string_check.phpt new file mode 100644 index 00000000..750c3a0b --- /dev/null +++ b/tests/aot/stdlib/string_check.phpt @@ -0,0 +1,41 @@ +--TEST-- +str_contains / str_starts_with / str_ends_with edge cases +--FILE-- + +--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) diff --git a/tests/aot/stdlib/string_cmp.phpt b/tests/aot/stdlib/string_cmp.phpt new file mode 100644 index 00000000..89c3d08c --- /dev/null +++ b/tests/aot/stdlib/string_cmp.phpt @@ -0,0 +1,45 @@ +--TEST-- +strlen / strcmp / strcasecmp / strncmp / strncasecmp +--FILE-- + +--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) diff --git a/tests/aot/stdlib/string_search.phpt b/tests/aot/stdlib/string_search.phpt new file mode 100644 index 00000000..18f92e82 --- /dev/null +++ b/tests/aot/stdlib/string_search.phpt @@ -0,0 +1,33 @@ +--TEST-- +strstr / strrpos / strpos / stripos +--FILE-- + +--EXPECT-- +string(5) "world" +string(6) "hello " +bool(false) +int(12) +int(12) +bool(false) +int(6) +bool(false) +int(6) +bool(false) diff --git a/tests/aot/stdlib/type_check.phpt b/tests/aot/stdlib/type_check.phpt new file mode 100644 index 00000000..1584cfad --- /dev/null +++ b/tests/aot/stdlib/type_check.phpt @@ -0,0 +1,68 @@ +--TEST-- +is_countable / is_iterable / method_exists / property_exists +--FILE-- + +--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) diff --git a/tests/aot/stdlib/type_conv.phpt b/tests/aot/stdlib/type_conv.phpt new file mode 100644 index 00000000..a71656c6 --- /dev/null +++ b/tests/aot/stdlib/type_conv.phpt @@ -0,0 +1,55 @@ +--TEST-- +strval / intval / floatval / boolval type conversions +--FILE-- + +--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) diff --git a/tests/aot/stdlib/url_edge.phpt b/tests/aot/stdlib/url_edge.phpt new file mode 100644 index 00000000..fbc14f60 --- /dev/null +++ b/tests/aot/stdlib/url_edge.phpt @@ -0,0 +1,44 @@ +--TEST-- +urlencode / urldecode / rawurlencode / rawurldecode edge cases +--FILE-- + +--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)