1--TEST--
2Test array_is_list() function
3--FILE--
4<?php
5
6function test_is_list(string $desc, $val) : void {
7    try {
8        printf("%s: %s\n", $desc, json_encode(array_is_list($val)));
9    } catch (TypeError $e) {
10        printf("%s: threw %s\n", $desc, $e->getMessage());
11    }
12}
13
14test_is_list("empty", []);
15test_is_list("one", [1]);
16test_is_list("two", [1,2]);
17test_is_list("three", [1,2,3]);
18test_is_list("four", [1,2,3,4]);
19test_is_list("ten", range(0, 10));
20
21test_is_list("null", null);
22test_is_list("int", 123);
23test_is_list("float", 1.23);
24test_is_list("string", "string");
25test_is_list("object", new stdClass());
26test_is_list("true", true);
27test_is_list("false", false);
28
29test_is_list("string key", ["a" => 1]);
30test_is_list("mixed keys", [0 => 0, "a" => 1]);
31test_is_list("ordered keys", [0 => 0, 1 => 1]);
32test_is_list("shuffled keys", [1 => 0, 0 => 1]);
33test_is_list("skipped keys", [0 => 0, 2 => 2]);
34
35$arr = [1, 2, 3];
36unset($arr[0]);
37test_is_list("unset first", $arr);
38
39$arr = [1, 2, 3];
40unset($arr[1]);
41test_is_list("unset middle", $arr);
42
43$arr = [1, 2, 3];
44unset($arr[2]);
45test_is_list("unset end", $arr);
46
47$arr = [1, "a" => "a", 2];
48unset($arr["a"]);
49test_is_list("unset string key", $arr);
50
51$arr = [1 => 1, 0 => 0];
52unset($arr[1]);
53test_is_list("unset into order", $arr);
54
55$arr = ["a" => 1];
56unset($arr["a"]);
57test_is_list("unset to empty", $arr);
58
59$arr = [1, 2, 3];
60$arr[] = 4;
61test_is_list("append implicit", $arr);
62
63$arr = [1, 2, 3];
64$arr[3] = 4;
65test_is_list("append explicit", $arr);
66
67$arr = [1, 2, 3];
68$arr[4] = 5;
69test_is_list("append with gap", $arr);
70
71--EXPECT--
72empty: true
73one: true
74two: true
75three: true
76four: true
77ten: true
78null: threw array_is_list(): Argument #1 ($array) must be of type array, null given
79int: threw array_is_list(): Argument #1 ($array) must be of type array, int given
80float: threw array_is_list(): Argument #1 ($array) must be of type array, float given
81string: threw array_is_list(): Argument #1 ($array) must be of type array, string given
82object: threw array_is_list(): Argument #1 ($array) must be of type array, stdClass given
83true: threw array_is_list(): Argument #1 ($array) must be of type array, bool given
84false: threw array_is_list(): Argument #1 ($array) must be of type array, bool given
85string key: false
86mixed keys: false
87ordered keys: true
88shuffled keys: false
89skipped keys: false
90unset first: false
91unset middle: false
92unset end: true
93unset string key: true
94unset into order: true
95unset to empty: true
96append implicit: true
97append explicit: true
98append with gap: false