diff --git a/tests/aot/array/array-filter-keys-strict.phpt b/tests/aot/array/array-filter-keys-strict.phpt new file mode 100644 index 00000000..20d172cd --- /dev/null +++ b/tests/aot/array/array-filter-keys-strict.phpt @@ -0,0 +1,24 @@ +--TEST-- +array keys filtered by closure keep keys for strict comparison +--FILE-- + 1, 'b' => 2])); + var_dump(has_only_string_keys(['a' => 1, 0 => 2])); + var_dump(has_only_string_keys([])); +} +?> +--EXPECT-- +bool(true) +bool(false) +bool(false) diff --git a/tests/aot/array/array-keys-range-list-check.phpt b/tests/aot/array/array-keys-range-list-check.phpt new file mode 100644 index 00000000..e2735a99 --- /dev/null +++ b/tests/aot/array/array-keys-range-list-check.phpt @@ -0,0 +1,23 @@ +--TEST-- +array keys compared with range for list detection +--FILE-- + 'x', 2 => 'y'])); + var_dump(is_non_empty_list_legacy(['0' => 'x', '1' => 'y'])); + var_dump(is_non_empty_list_legacy([])); +} +?> +--EXPECT-- +bool(true) +bool(false) +bool(true) +bool(false) diff --git a/tests/aot/arrow_fn/static-arrow-clone-map.phpt b/tests/aot/arrow_fn/static-arrow-clone-map.phpt new file mode 100644 index 00000000..5e6cacb4 --- /dev/null +++ b/tests/aot/arrow_fn/static-arrow-clone-map.phpt @@ -0,0 +1,41 @@ +--TEST-- +static arrow function with typed parameter return clone in array_map +--FILE-- +value = $value; + } + + public function __clone() + { + $this->value++; + } +} + +function clone_items(array $items): array +{ + return array_map(static fn (CloneMapItem $item): CloneMapItem => clone $item, $items); +} + +function main(): void +{ + $items = [new CloneMapItem(1), new CloneMapItem(10)]; + $cloned = clone_items($items); + + var_dump($items[0]->value, $items[1]->value); + var_dump($cloned[0]->value, $cloned[1]->value); + var_dump($items[0] === $cloned[0]); +} +?> +--EXPECT-- +int(1) +int(10) +int(2) +int(11) +bool(false) diff --git a/tests/aot/exception/closure-dynamic-throws.phpt b/tests/aot/exception/closure-dynamic-throws.phpt new file mode 100644 index 00000000..f3d2bd77 --- /dev/null +++ b/tests/aot/exception/closure-dynamic-throws.phpt @@ -0,0 +1,56 @@ +--TEST-- +closure typed argument with catch chain and dynamic instanceof +--ENV-- +USE_ZEND_ALLOC=0 +--FILE-- + +--EXPECT-- +matched-exception:ExpectedClosureException +bool(true) +matched-throwable:ExpectedClosureError +bool(true) +miss:Exception +bool(false) diff --git a/tests/aot/functions/array-slice-reverse-preserve-keys.phpt b/tests/aot/functions/array-slice-reverse-preserve-keys.phpt new file mode 100644 index 00000000..2a536108 --- /dev/null +++ b/tests/aot/functions/array-slice-reverse-preserve-keys.phpt @@ -0,0 +1,54 @@ +--TEST-- +array_search keys with array_slice and array_reverse preserving keys +--FILE-- + $flags) { + $result[] = $version . ':' . implode('|', $flags); + } + return $result; +} + +function main(): void +{ + $flags = [ + 80400 => ['D'], + 80000 => ['A'], + 80200 => ['B'], + 80300 => ['C'], + ]; + + var_dump(select_version_flags($flags, 80200, 80400)); + var_dump(select_version_flags($flags, 80100, null)); +} +?> +--EXPECT-- +array(3) { + [0]=> + string(7) "80400:D" + [1]=> + string(7) "80300:C" + [2]=> + string(7) "80200:B" +} +array(0) { +} diff --git a/tests/aot/functions/filter-var-ip-flags.phpt b/tests/aot/functions/filter-var-ip-flags.phpt new file mode 100644 index 00000000..cfe316c1 --- /dev/null +++ b/tests/aot/functions/filter-var-ip-flags.phpt @@ -0,0 +1,30 @@ +--TEST-- +filter_var IP validation with strict false checks and flags +--FILE-- + +--EXPECT-- +string(4) "ipv4" +string(4) "ipv6" +string(7) "invalid"