# Array constructors.

eval
ARRAY[]:::int[]
----
ARRAY[]

eval
ARRAY[NULL]
----
ARRAY[NULL]

eval
ARRAY[1, 2, 3]
----
ARRAY[1,2,3]

eval
ARRAY['a', 'b', 'c']
----
ARRAY['a','b','c']

eval
ARRAY[ARRAY[1, 2], ARRAY[2, 3]]
----
ARRAY[ARRAY[1,2],ARRAY[2,3]]

eval
ARRAY[1, NULL]
----
ARRAY[1,NULL]

eval
ARRAY(1, 2)
----
ARRAY[1,2]

# Array sizes.

eval
array_length(ARRAY[1, 2, 3], 1)
----
3

eval
array_length(ARRAY[1, 2, 3], 2)
----
NULL

eval
array_length(ARRAY[1, 2, 3], 0)
----
NULL

eval
array_length(ARRAY[1, 2, 3], -10)
----
NULL

eval
array_length(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 1)
----
2

eval
array_length(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 2)
----
3

eval
array_length(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 3)
----
NULL

eval
array_lower(ARRAY[1, 2, 3], 1)
----
1

eval
array_lower(ARRAY[1, 2, 3], 2)
----
NULL

eval
array_lower(ARRAY[1, 2, 3], 0)
----
NULL

eval
array_lower(ARRAY[1, 2, 3], -10)
----
NULL

eval
array_lower(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 1)
----
1

eval
array_lower(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 2)
----
1

eval
array_lower(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 3)
----
NULL

eval
array_upper(ARRAY[1, 2, 3], 1)
----
3

eval
array_upper(ARRAY[1, 2, 3], 2)
----
NULL

eval
array_upper(ARRAY[1, 2, 3], 0)
----
NULL

eval
array_upper(ARRAY[1, 2, 3], -10)
----
NULL

eval
array_upper(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 1)
----
2

eval
array_upper(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 2)
----
3

eval
array_upper(ARRAY[ARRAY[1, 2, 3], ARRAY[1, 2, 3]], 3)
----
NULL

# overlap, contains, contained by (&&, @>, <@)

eval
ARRAY[1,2,3] && ARRAY[0,5,6]
----
false

eval
ARRAY[1,2] && ARRAY[0,2,6]
----
true

eval
ARRAY[1,2,3,4] && ARRAY[4,1]
----
true

eval
ARRAY[1,2,3,4] && ARRAY[]:::int[]
----
false

eval
ARRAY[0] && ARRAY[0,NULL]
----
true

eval
ARRAY[0,NULL] && ARRAY[0,NULL]
----
true

eval
ARRAY[0,NULL] && ARRAY[1,NULL]
----
false

eval
NULL && ARRAY[0]
----
NULL

eval
ARRAY[0] && NULL
----
NULL

eval
ARRAY[1,2,3] @> ARRAY[]:::int[]
----
true

eval
ARRAY[1,2,3] @> ARRAY[3]
----
true

eval
ARRAY[1,2,3] @> ARRAY[0]
----
false

eval
ARRAY[1,2,3] @> ARRAY[1,2,3]
----
true

eval
ARRAY[1,2,3] @> ARRAY[1,2,3,4]
----
false

eval
ARRAY[1,2,3] @> ARRAY[1,NULL]
----
false

eval
ARRAY[1,2,3,NULL] @> ARRAY[1,NULL]
----
false

eval
ARRAY[1,2,3] <@ ARRAY[]:::int[]
----
false

eval
ARRAY[1,2,3] <@ ARRAY[3]
----
false

eval
ARRAY[1,2,3] <@ ARRAY[0]
----
false

eval
ARRAY[1,2,3] <@ ARRAY[1,2,3]
----
true

eval
ARRAY[1,2,3] <@ ARRAY[1,2,3,4]
----
true

eval
ARRAY[1] <@ ARRAY[1,NULL]
----
true

eval
ARRAY[1,NULL] <@ ARRAY[1,NULL]
----
false

eval
ARRAY[1] IS DISTINCT FROM NULL
----
true

eval
NULL IS DISTINCT FROM ARRAY[1]
----
true

eval
'foo' COLLATE en IS DISTINCT FROM NULL
----
true

eval
NULL IS DISTINCT FROM 'foo' COLLATE en
----
true
