# Func expressions.

eval
length('hel'||'lo')
----
5

eval
lower('HELLO')
----
'hello'

# lint: uppercase function OK
eval
UPPER('hello')
----
'HELLO'

# Scale < -Exponent.
eval
crdb_internal.round_decimal_values(1.23:::decimal, 1)
----
1.2

# Scale = -Exponent.
eval
crdb_internal.round_decimal_values(1.23:::decimal, 2)
----
1.23

# Scale > -Exponent.
eval
crdb_internal.round_decimal_values(1.23:::decimal, 3)
----
1.23

# Scale=0 with whole number.
eval
crdb_internal.round_decimal_values(123:::decimal, 0)
----
123

# Scale=0 with fractional number.
eval
crdb_internal.round_decimal_values(0.123:::decimal, 0)
----
0

# Special-value cases.
eval
crdb_internal.round_decimal_values('NaN'::decimal, 0)
----
NaN

eval
crdb_internal.round_decimal_values('-inf'::decimal, 0)
----
-Infinity

eval
crdb_internal.round_decimal_values('inf'::decimal, 0)
----
Infinity

# NULL value.
eval
crdb_internal.round_decimal_values(null, 0)
----
NULL

# NULL decimal value.
eval
crdb_internal.round_decimal_values(null::decimal, 0)
----
NULL

# Round 10th fractional digit.
eval
crdb_internal.round_decimal_values(1000000000000000.0000000005::decimal, 9)
----
1000000000000000.000000001

# Truncate extra zeros.
eval
crdb_internal.round_decimal_values(1000000000000000.0000000000::decimal, 3)
----
1000000000000000.000

# Round with 1 digit coefficient and large negative exponent.
eval
crdb_internal.round_decimal_values(0.0000000005::decimal, 9)
----
1E-9

# Decimal in array.
eval
crdb_internal.round_decimal_values(ARRAY[1.25::decimal], 1)
----
ARRAY[1.3]

# Multiple array values need to be rounded + NULL values.
eval
crdb_internal.round_decimal_values(ARRAY[NULL, 1.25::decimal, NULL, 1.23::decimal], 1)
----
ARRAY[NULL,1.3,NULL,1.2]

# None of the array values need to be rounded.
eval
crdb_internal.round_decimal_values(ARRAY[1.2::decimal, 5::decimal, NULL], 1)
----
ARRAY[1.2,5,NULL]
