Files
email-tracker/external/duckdb/test/sql/function/numeric/test_trunc.test
2025-10-24 19:21:19 -05:00

93 lines
1.3 KiB
SQL

# name: test/sql/function/numeric/test_trunc.test
# description: Truncation test
# group: [numeric]
statement ok
CREATE TABLE truncme(a DOUBLE, b INTEGER, c UINTEGER)
statement ok
INSERT INTO truncme VALUES (42.123456, 3, 19), (-3.141592, -7, 5);
# Non-intergral should truncate
foreach datatype DOUBLE FLOAT DECIMAL(10,6)
query R
select trunc(42.12345::${datatype})
----
42.000000
query R
select trunc(-42.12345::${datatype})
----
-42.000000
query R
select trunc(127::${datatype})
----
127.000000
query R
select trunc(-127::${datatype})
----
-127.000000
query R
select trunc(0::${datatype})
----
0.000000
query I
select trunc(a::${datatype}) from truncme
----
42.000000
-3.000000
endloop
# Signed integers should be a NOP
foreach signed TINYINT SMALLINT INTEGER BIGINT HUGEINT
query R
select trunc(54::${signed})
----
54
query R
select trunc(-27::${signed})
----
-27
query I
select trunc(b::${signed}) from truncme
----
3
-7
endloop
# Unsigned integers should be a NOP
foreach unsigned UTINYINT USMALLINT UINTEGER UBIGINT UHUGEINT
query R
select trunc(15::${unsigned})
----
15
query I
select trunc(c::${unsigned}) from truncme
----
19
5
endloop
# Test specials
foreach special DOUBLE FLOAT
query III
select trunc('NAN'::${special}), trunc('infinity'::${special}), trunc('-infinity'::${special});
----
NAN infinity -infinity
endloop