should be it
This commit is contained in:
9
external/duckdb/test/sql/function/numeric/abs.test
vendored
Normal file
9
external/duckdb/test/sql/function/numeric/abs.test
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# name: test/sql/function/numeric/abs.test
|
||||
# description: Test abs
|
||||
# group: [numeric]
|
||||
|
||||
# test abs on negative zero
|
||||
query II
|
||||
SELECT abs('-0.0'::float), abs('-0.0'::double)
|
||||
----
|
||||
0.0 0.0
|
||||
40
external/duckdb/test/sql/function/numeric/decimal_mod.test
vendored
Normal file
40
external/duckdb/test/sql/function/numeric/decimal_mod.test
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
# name: test/sql/function/numeric/decimal_mod.test
|
||||
# description: Test decimal modulo
|
||||
# group: [numeric]
|
||||
|
||||
query II
|
||||
SELECT 10 % 2.4, -10 % 2.4
|
||||
----
|
||||
0.4 -0.4
|
||||
|
||||
query II
|
||||
SELECT 10.0 % 2.4, -10.0 % 2.4
|
||||
----
|
||||
0.4 -0.4
|
||||
|
||||
# large decimals
|
||||
query I
|
||||
SELECT 12345678901111111 % 2.0;
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
select 12345678901234567890 % 123;
|
||||
----
|
||||
78
|
||||
|
||||
# if the required width exceeds the maximum decimal width we fallback to double
|
||||
query I
|
||||
SELECT 10000000000000000000000000000000000001::DECIMAL(38,0) % 0.00000000000000000000000000000000004
|
||||
----
|
||||
0.0
|
||||
|
||||
query II
|
||||
SELECT typeof(10.0 % 2.0), typeof(10.0 % 2.0 % 2.0 % 2.0)
|
||||
----
|
||||
DECIMAL(3,1) DECIMAL(3,1)
|
||||
|
||||
query I
|
||||
SELECT 10.0 % 0.0
|
||||
----
|
||||
NULL
|
||||
20
external/duckdb/test/sql/function/numeric/set_seed_for_sample.test
vendored
Normal file
20
external/duckdb/test/sql/function/numeric/set_seed_for_sample.test
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# name: test/sql/function/numeric/set_seed_for_sample.test
|
||||
# description: Test setseed for samples
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
create table t1 as select * from generate_series(1,50) as t(number);
|
||||
|
||||
set seed 0.1
|
||||
|
||||
query I rowsort result_1
|
||||
select * from t1 using sample 5;
|
||||
----
|
||||
|
||||
set seed 0.1
|
||||
|
||||
query I rowsort result_1
|
||||
select * from t1 using sample 5;
|
||||
----
|
||||
|
||||
|
||||
41
external/duckdb/test/sql/function/numeric/test_arithmetic_aliases.test
vendored
Normal file
41
external/duckdb/test/sql/function/numeric/test_arithmetic_aliases.test
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
# name: test/sql/function/numeric/test_arithmetic_aliases.test
|
||||
# description: Check aliases for + - * /
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test(a integer)
|
||||
|
||||
statement ok
|
||||
insert into test values (1), (2), (3), (NULL)
|
||||
|
||||
query I
|
||||
select add(a,a) from test
|
||||
----
|
||||
2
|
||||
4
|
||||
6
|
||||
NULL
|
||||
|
||||
query I
|
||||
select subtract(a,a) from test
|
||||
----
|
||||
0
|
||||
0
|
||||
0
|
||||
NULL
|
||||
|
||||
query I
|
||||
select multiply(a,a) from test
|
||||
----
|
||||
1
|
||||
4
|
||||
9
|
||||
NULL
|
||||
|
||||
query I
|
||||
select divide(a,a) from test
|
||||
----
|
||||
1
|
||||
1
|
||||
1
|
||||
NULL
|
||||
17
external/duckdb/test/sql/function/numeric/test_bit_count.test
vendored
Normal file
17
external/duckdb/test/sql/function/numeric/test_bit_count.test
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# name: test/sql/function/numeric/test_bit_count.test
|
||||
# description: BIT_COUNT test
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE bits(t tinyint, s smallint, i integer, b bigint, h hugeint)
|
||||
|
||||
statement ok
|
||||
INSERT INTO bits VALUES (NULL, NULL, NULL, NULL, NULL), (31, 1023, 11834119, 50827156903621017, 3141592653589793238462643383279528841), (-59, -517, -575693, -9876543210, -148873535527910577765226390751398592512)
|
||||
|
||||
query IIIII
|
||||
select bit_count(t), bit_count(s), bit_count(i), bit_count(b), bit_count(h) from bits
|
||||
----
|
||||
NULL NULL NULL NULL NULL
|
||||
5 10 11 27 67
|
||||
4 14 24 49 2
|
||||
|
||||
67
external/duckdb/test/sql/function/numeric/test_even.test
vendored
Normal file
67
external/duckdb/test/sql/function/numeric/test_even.test
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
# name: test/sql/function/numeric/test_even.test
|
||||
# description: Test even
|
||||
# group: [numeric]
|
||||
|
||||
query II
|
||||
select i, even(i + 0.4) from generate_series(-4,4) tbl(i);
|
||||
----
|
||||
-4 -4
|
||||
-3 -4
|
||||
-2 -2
|
||||
-1 -2
|
||||
0 2
|
||||
1 2
|
||||
2 4
|
||||
3 4
|
||||
4 6
|
||||
|
||||
|
||||
query II
|
||||
select i, even(i + 0.9) from generate_series(-4,4) tbl(i);
|
||||
----
|
||||
-4 -4
|
||||
-3 -4
|
||||
-2 -2
|
||||
-1 -2
|
||||
0 2
|
||||
1 2
|
||||
2 4
|
||||
3 4
|
||||
4 6
|
||||
|
||||
# decimals
|
||||
query II
|
||||
SELECT even(19.4), even(-19.4)
|
||||
----
|
||||
20 -20
|
||||
|
||||
query II
|
||||
SELECT even(8.9), even(-8.9)
|
||||
----
|
||||
10 -10
|
||||
|
||||
# doubles
|
||||
query II
|
||||
SELECT even(45::DOUBLE), even(-35::DOUBLE)
|
||||
----
|
||||
46 -36
|
||||
|
||||
query I
|
||||
SELECT even(NULL)
|
||||
----
|
||||
NULL
|
||||
|
||||
statement error
|
||||
SELECT even('abcd')
|
||||
----
|
||||
|
||||
# check bound
|
||||
query I
|
||||
SELECT even(1.7976931348623155e+308)
|
||||
----
|
||||
1.7976931348623155e+308
|
||||
|
||||
query I
|
||||
SELECT even(-1.7976931348623155e+308)
|
||||
----
|
||||
-1.7976931348623155e+308
|
||||
50
external/duckdb/test/sql/function/numeric/test_factorial.test
vendored
Normal file
50
external/duckdb/test/sql/function/numeric/test_factorial.test
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
# name: test/sql/function/numeric/test_factorial.test
|
||||
# description: Mod test
|
||||
# group: [numeric]
|
||||
|
||||
query I
|
||||
SELECT factorial(0);
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT factorial(-1);
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT factorial(NULL);
|
||||
----
|
||||
NULL
|
||||
|
||||
query I
|
||||
SELECT factorial(2);
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT factorial(10);
|
||||
----
|
||||
3628800
|
||||
|
||||
# postfix op
|
||||
query I
|
||||
SELECT 10!;
|
||||
----
|
||||
3628800
|
||||
|
||||
query I
|
||||
SELECT factorial(20);
|
||||
----
|
||||
2432902008176640000
|
||||
|
||||
query I
|
||||
SELECT factorial(30);
|
||||
----
|
||||
265252859812191058636308480000000
|
||||
|
||||
# overflow
|
||||
statement error
|
||||
SELECT factorial(40);
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*out of range.*
|
||||
88
external/duckdb/test/sql/function/numeric/test_fdiv_fmod.test
vendored
Normal file
88
external/duckdb/test/sql/function/numeric/test_fdiv_fmod.test
vendored
Normal file
@@ -0,0 +1,88 @@
|
||||
# name: test/sql/function/numeric/test_fdiv_fmod.test
|
||||
# description: Test floored division and modulus
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
SET ieee_floating_point_ops=false;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE rs(x DOUBLE, y INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO rs VALUES (10, 3),(10,-3),(-10,3),(-10,-3),(0,1),(1,1),(NULL,10),(10,NULL),(NULL,NULL)
|
||||
|
||||
query I
|
||||
SELECT fmod(x, y) FROM rs
|
||||
----
|
||||
1
|
||||
-2
|
||||
2
|
||||
-1
|
||||
0
|
||||
0
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
|
||||
query I
|
||||
SELECT fdiv(x, y) FROM rs
|
||||
----
|
||||
3
|
||||
-4
|
||||
-4
|
||||
3
|
||||
0
|
||||
1
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
|
||||
# fmod by 0 results in NULL: should be NaN (if supported)
|
||||
query I
|
||||
SELECT fmod(42, 0)
|
||||
----
|
||||
NULL
|
||||
|
||||
# fmod 0 by 0 results in NULL: should be NaN (if supported)
|
||||
query I
|
||||
SELECT fmod(0, 0)
|
||||
----
|
||||
NULL
|
||||
|
||||
# fdiv by 0 results in NULL: should be Inf (if supported)
|
||||
query I
|
||||
SELECT fdiv(42, 0)
|
||||
----
|
||||
NULL
|
||||
|
||||
# fdiv by 0 results in NULL: should be -Inf (if supported)
|
||||
query I
|
||||
SELECT fdiv(-42, 0)
|
||||
----
|
||||
NULL
|
||||
|
||||
# fdiv 0 by 0 results in NULL: should be NaN (if supported)
|
||||
query I
|
||||
SELECT fdiv(0, 0)
|
||||
----
|
||||
NULL
|
||||
|
||||
query R
|
||||
SELECT fmod(12.3456789, 5)
|
||||
----
|
||||
2.345679
|
||||
|
||||
query I
|
||||
SELECT fdiv(12.3456789, 5)
|
||||
----
|
||||
2
|
||||
|
||||
query R
|
||||
SELECT fmod(3, 2.1)
|
||||
----
|
||||
0.900000
|
||||
|
||||
query I
|
||||
SELECT fdiv(3, 2.1)
|
||||
----
|
||||
1
|
||||
143
external/duckdb/test/sql/function/numeric/test_floor_ceil.test
vendored
Normal file
143
external/duckdb/test/sql/function/numeric/test_floor_ceil.test
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
# name: test/sql/function/numeric/test_floor_ceil.test
|
||||
# description: Test ceil(ing)/floor function
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_first';
|
||||
|
||||
statement ok
|
||||
CREATE TABLE numbers(n DOUBLE)
|
||||
|
||||
statement ok
|
||||
INSERT INTO numbers VALUES (NULL),(-42.8),(-42.2),(0), (42.2), (42.8)
|
||||
|
||||
query I
|
||||
SELECT cast(CEIL(n::tinyint) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-42
|
||||
0
|
||||
42
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(CEIL(n::smallint) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-42
|
||||
0
|
||||
42
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(CEIL(n::integer) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-42
|
||||
0
|
||||
42
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(CEIL(n::bigint) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-42
|
||||
0
|
||||
42
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(CEIL(n::float) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-42
|
||||
-42
|
||||
0
|
||||
43
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(CEIL(n::double) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-42
|
||||
-42
|
||||
0
|
||||
43
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(CEILING(n::double) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-42
|
||||
-42
|
||||
0
|
||||
43
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(FLOOR(n::tinyint) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-42
|
||||
0
|
||||
42
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(FLOOR(n::smallint) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-42
|
||||
0
|
||||
42
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(FLOOR(n::integer) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-42
|
||||
0
|
||||
42
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(FLOOR(n::bigint) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-42
|
||||
0
|
||||
42
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT cast(FLOOR(n::float) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-43
|
||||
0
|
||||
42
|
||||
42
|
||||
|
||||
query I
|
||||
SELECT cast(FLOOR(n::double) as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-43
|
||||
-43
|
||||
0
|
||||
42
|
||||
42
|
||||
|
||||
110
external/duckdb/test/sql/function/numeric/test_gamma.test
vendored
Normal file
110
external/duckdb/test/sql/function/numeric/test_gamma.test
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
# name: test/sql/function/numeric/test_gamma.test
|
||||
# description: Test gamma function
|
||||
# group: [numeric]
|
||||
|
||||
query I
|
||||
SELECT gamma(NULL)
|
||||
----
|
||||
NULL
|
||||
|
||||
statement error
|
||||
SELECT gamma(0)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error: cannot take gamma.*
|
||||
|
||||
query I
|
||||
SELECT gamma(-1)
|
||||
----
|
||||
nan
|
||||
|
||||
query I
|
||||
SELECT gamma(1)
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT gamma(-0.1)
|
||||
----
|
||||
-10.686287021193193
|
||||
|
||||
|
||||
query I
|
||||
SELECT gamma(2)
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT gamma(10)
|
||||
----
|
||||
362880.0
|
||||
|
||||
query I
|
||||
SELECT gamma(2::tinyint)
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT gamma(2::hugeint)
|
||||
----
|
||||
1
|
||||
|
||||
statement error
|
||||
SELECT gamma('asdf')
|
||||
----
|
||||
<REGEX>:.*Conversion Error: Could not convert string.*
|
||||
|
||||
query I
|
||||
SELECT lgamma(NULL)
|
||||
----
|
||||
NULL
|
||||
|
||||
statement error
|
||||
SELECT lgamma(0)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error: cannot take.*
|
||||
|
||||
query I
|
||||
SELECT lgamma(-1)
|
||||
----
|
||||
inf
|
||||
|
||||
query I
|
||||
SELECT lgamma(-100)
|
||||
----
|
||||
inf
|
||||
|
||||
query I
|
||||
SELECT lgamma(1)
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT lgamma(2)
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT lgamma(3)
|
||||
----
|
||||
0.693147180559945
|
||||
|
||||
query I
|
||||
SELECT lgamma(10)
|
||||
----
|
||||
12.801827480081467
|
||||
|
||||
|
||||
query I
|
||||
SELECT lgamma(2::tinyint)
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT lgamma(2::hugeint)
|
||||
----
|
||||
0
|
||||
|
||||
statement error
|
||||
SELECT lgamma('asdf')
|
||||
----
|
||||
<REGEX>:.*Conversion Error: Could not convert string.*
|
||||
64
external/duckdb/test/sql/function/numeric/test_gcd_lcm.test
vendored
Normal file
64
external/duckdb/test/sql/function/numeric/test_gcd_lcm.test
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
# name: test/sql/function/numeric/test_gcd_lcm.test
|
||||
# description: Test gcd and lcm
|
||||
# group: [numeric]
|
||||
|
||||
query IIIIII
|
||||
SELECT a, b, gcd(a, b), gcd(a, -b), gcd(b, a), gcd(-b, a)
|
||||
FROM (VALUES (0::int8, 0::int8),
|
||||
(0::int8, 29893644334::int8),
|
||||
(288484263558::int8, 29893644334::int8),
|
||||
(-288484263558::int8, 29893644334::int8),
|
||||
((-9223372036854775808)::int8, 1::int8),
|
||||
((-9223372036854775808)::int8, 9223372036854775807::int8),
|
||||
((-9223372036854775808)::int8, 4611686018427387904::int8)) AS v(a, b);
|
||||
----
|
||||
0 0 0 0 0 0
|
||||
0 29893644334 29893644334 29893644334 29893644334 29893644334
|
||||
288484263558 29893644334 6835958 6835958 6835958 6835958
|
||||
-288484263558 29893644334 6835958 6835958 6835958 6835958
|
||||
-9223372036854775808 1 1 1 1 1
|
||||
-9223372036854775808 9223372036854775807 1 1 1 1
|
||||
-9223372036854775808 4611686018427387904 4611686018427387904 4611686018427387904 4611686018427387904 4611686018427387904
|
||||
|
||||
query I
|
||||
SELECT gcd(42, NULL)
|
||||
----
|
||||
NULL
|
||||
|
||||
statement error
|
||||
SELECT gcd(42, 'abcd')
|
||||
----
|
||||
|
||||
query I
|
||||
select lcm(120,25);
|
||||
----
|
||||
600
|
||||
|
||||
query IIIIII
|
||||
SELECT a, b, lcm(a, b), lcm(a, -b), lcm(b, a), lcm(-b, a)
|
||||
FROM (VALUES (0::int8, 0::int8),
|
||||
(0::int8, 29893644334::int8),
|
||||
(29893644334::int8, 29893644334::int8),
|
||||
(288484263558::int8, 29893644334::int8),
|
||||
(-288484263558::int8, 29893644334::int8),
|
||||
((-9223372036854775808)::int8, 0::int8)) AS v(a, b);
|
||||
----
|
||||
0 0 0 0 0 0
|
||||
0 29893644334 0 0 0 0
|
||||
29893644334 29893644334 29893644334 29893644334 29893644334 29893644334
|
||||
288484263558 29893644334 1261541684539134 1261541684539134 1261541684539134 1261541684539134
|
||||
-288484263558 29893644334 1261541684539134 1261541684539134 1261541684539134 1261541684539134
|
||||
-9223372036854775808 0 0 0 0 0
|
||||
|
||||
query I
|
||||
SELECT lcm(42, NULL)
|
||||
----
|
||||
NULL
|
||||
|
||||
statement error
|
||||
SELECT lcm(42, 'abcd')
|
||||
----
|
||||
|
||||
statement error
|
||||
select lcm(4200000000000000000,5700000000000000000)
|
||||
----
|
||||
24
external/duckdb/test/sql/function/numeric/test_geomean.test
vendored
Normal file
24
external/duckdb/test/sql/function/numeric/test_geomean.test
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
# name: test/sql/function/numeric/test_geomean.test
|
||||
# description: Test geometric mean (geomean) function
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE numbers(x DOUBLE)
|
||||
|
||||
statement ok
|
||||
INSERT INTO numbers VALUES (NULL), (1), (2)
|
||||
|
||||
query I
|
||||
SELECT geomean(x) FROM numbers
|
||||
----
|
||||
1.414213562373095
|
||||
|
||||
query I
|
||||
SELECT geomean(x::integer) FROM numbers
|
||||
----
|
||||
1.414213562373095
|
||||
|
||||
query I
|
||||
SELECT geomean(i) FROM generate_series(1000, 2000) tbl(i);
|
||||
----
|
||||
1471.459313166229
|
||||
53
external/duckdb/test/sql/function/numeric/test_invalid_math.test
vendored
Normal file
53
external/duckdb/test/sql/function/numeric/test_invalid_math.test
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
# name: test/sql/function/numeric/test_invalid_math.test
|
||||
# description: Test invalid input for math functions
|
||||
# group: [numeric]
|
||||
|
||||
# cannot take log of negative number or zero
|
||||
statement error
|
||||
SELECT log(0);
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT log(-1);
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT ln(0);
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT ln(-1);
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT log10(0);
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT log10(-1);
|
||||
----
|
||||
|
||||
# cannot take square root of a negative number
|
||||
statement error
|
||||
SELECT sqrt(-1);
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT SQRT(0)
|
||||
----
|
||||
0
|
||||
|
||||
query RRR
|
||||
SELECT POW(1e300,100), POW(-1e300,100), POW(-1.0, 0.5)
|
||||
----
|
||||
inf inf nan
|
||||
|
||||
query RR
|
||||
SELECT EXP(1e300), EXP(1e100)
|
||||
----
|
||||
inf inf
|
||||
|
||||
query R
|
||||
SELECT DEGREES(1e308)
|
||||
----
|
||||
inf
|
||||
33
external/duckdb/test/sql/function/numeric/test_is_nan.test
vendored
Normal file
33
external/duckdb/test/sql/function/numeric/test_is_nan.test
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
# name: test/sql/function/numeric/test_is_nan.test
|
||||
# description: isnan test
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_first';
|
||||
|
||||
foreach type FLOAT DOUBLE
|
||||
|
||||
query III
|
||||
SELECT isnan(3::${type}), isnan('nan'::${type}), isnan(NULL::${type})
|
||||
----
|
||||
false true NULL
|
||||
|
||||
statement ok
|
||||
CREATE TABLE floats(f ${type})
|
||||
|
||||
statement ok
|
||||
INSERT INTO floats VALUES (3), ('nan'), ('inf'), ('-inf'), (NULL)
|
||||
|
||||
query IIII
|
||||
SELECT f, isnan(f), isinf(f), isfinite(f) FROM floats ORDER BY f
|
||||
----
|
||||
NULL NULL NULL NULL
|
||||
-inf False True False
|
||||
3 False False True
|
||||
inf False True False
|
||||
nan True False False
|
||||
|
||||
statement ok
|
||||
DROP TABLE floats
|
||||
|
||||
endloop
|
||||
31
external/duckdb/test/sql/function/numeric/test_mod.test
vendored
Normal file
31
external/duckdb/test/sql/function/numeric/test_mod.test
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
# name: test/sql/function/numeric/test_mod.test
|
||||
# description: Mod test
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE modme(a DOUBLE, b INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO modme VALUES (42.123456, 3)
|
||||
|
||||
query R
|
||||
select mod(a, 40) from modme
|
||||
----
|
||||
2.123456
|
||||
|
||||
# mod 0 results in NULL: SQLite behavior
|
||||
query I
|
||||
select mod(42, 0)
|
||||
----
|
||||
NULL
|
||||
|
||||
query R
|
||||
select mod(a, 2) from modme
|
||||
----
|
||||
0.123456
|
||||
|
||||
query R
|
||||
select mod(b, 2.1) from modme
|
||||
----
|
||||
0.900000
|
||||
|
||||
89
external/duckdb/test/sql/function/numeric/test_nextafter.test
vendored
Normal file
89
external/duckdb/test/sql/function/numeric/test_nextafter.test
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
# name: test/sql/function/numeric/test_nextafter.test
|
||||
# description: Next After test
|
||||
# group: [numeric]
|
||||
|
||||
statement error
|
||||
select nextafter()
|
||||
----
|
||||
|
||||
statement error
|
||||
select nextafter('bla','bla')
|
||||
----
|
||||
|
||||
query I
|
||||
select nextafter(NULL,1)
|
||||
----
|
||||
NULL
|
||||
|
||||
query I
|
||||
select nextafter(1,NULL)
|
||||
----
|
||||
NULL
|
||||
|
||||
query I
|
||||
select nextafter(99, 1)
|
||||
----
|
||||
99
|
||||
|
||||
query R
|
||||
select nextafter(99.0::DOUBLE, 1.0::DOUBLE) < 99
|
||||
----
|
||||
True
|
||||
|
||||
query R
|
||||
select nextafter(99.0::DOUBLE, 99.0::DOUBLE) = 99
|
||||
----
|
||||
True
|
||||
|
||||
query R
|
||||
select nextafter(99.0::DOUBLE, 100.0::DOUBLE) > 99
|
||||
----
|
||||
True
|
||||
|
||||
query R
|
||||
select nextafter(nextafter(99.0::DOUBLE, 100.0::DOUBLE),0::DOUBLE) = 99
|
||||
----
|
||||
True
|
||||
|
||||
query R
|
||||
select nextafter(99.0::FLOAT, 1.0::FLOAT) < 99
|
||||
----
|
||||
True
|
||||
|
||||
query R
|
||||
select nextafter(99.0::FLOAT, 100.0::FLOAT) > 99
|
||||
----
|
||||
True
|
||||
|
||||
query R
|
||||
select nextafter(nextafter(99.0::FLOAT, 100.0::FLOAT),0::FLOAT) = 99
|
||||
----
|
||||
True
|
||||
|
||||
statement ok
|
||||
create table test (a FLOAT)
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (10),(20),(30),(40)
|
||||
|
||||
query R
|
||||
select nextafter(a, 0::FLOAT) from test
|
||||
----
|
||||
9.999999
|
||||
19.999998
|
||||
29.999998
|
||||
39.999996
|
||||
|
||||
statement ok
|
||||
create table test_twoc (a FLOAT, b FLOAT)
|
||||
|
||||
statement ok
|
||||
INSERT INTO test_twoc VALUES (10,1),(20,21),(30,1),(40,41)
|
||||
|
||||
query R
|
||||
select nextafter(a, b) from test_twoc
|
||||
----
|
||||
9.999999
|
||||
20.000002
|
||||
29.999998
|
||||
40.000004
|
||||
176
external/duckdb/test/sql/function/numeric/test_pg_math.test
vendored
Normal file
176
external/duckdb/test/sql/function/numeric/test_pg_math.test
vendored
Normal file
@@ -0,0 +1,176 @@
|
||||
# name: test/sql/function/numeric/test_pg_math.test
|
||||
# description: Function test cases from PG docs
|
||||
# group: [numeric]
|
||||
|
||||
# see https://www.postgresql.org/docs/10/functions-math.html
|
||||
|
||||
query R
|
||||
select abs(-17.4)
|
||||
----
|
||||
17.4
|
||||
|
||||
query R
|
||||
select cbrt(27.0)
|
||||
----
|
||||
3.000000
|
||||
|
||||
query R
|
||||
select ceil(-42.8)
|
||||
----
|
||||
-42
|
||||
|
||||
query R
|
||||
select ceiling(-95.3)
|
||||
----
|
||||
-95
|
||||
|
||||
query R
|
||||
select exp(1.0)
|
||||
----
|
||||
2.718282
|
||||
|
||||
query R
|
||||
select floor(-42.8)
|
||||
----
|
||||
-43
|
||||
|
||||
query R
|
||||
select ln(2.0)
|
||||
----
|
||||
0.693147
|
||||
|
||||
query R
|
||||
select log(100.0)
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
select log10(100.0)
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
select log2(4.0)
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
select pi()
|
||||
----
|
||||
3.141593
|
||||
|
||||
query R
|
||||
select sqrt(2.0)
|
||||
----
|
||||
1.414214
|
||||
|
||||
query R
|
||||
select radians(45.0)
|
||||
----
|
||||
0.785398
|
||||
|
||||
query R
|
||||
select degrees(0.5)
|
||||
----
|
||||
28.647890
|
||||
|
||||
query I
|
||||
select sign(4.1)
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
select sign(-4.1)
|
||||
----
|
||||
-1
|
||||
|
||||
query I
|
||||
select sign(0)
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
select sign(3)
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
select log(2, 64)
|
||||
----
|
||||
6
|
||||
|
||||
statement error
|
||||
select log(0, 64)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*cannot take logarithm.*
|
||||
|
||||
statement error
|
||||
select log(2, 0)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*cannot take logarithm.*
|
||||
|
||||
statement error
|
||||
select log(-1, 64)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*cannot take logarithm.*
|
||||
|
||||
statement error
|
||||
select log(2, -1)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*cannot take logarithm.*
|
||||
|
||||
statement error
|
||||
select log(1, 64)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*divison by zero.*
|
||||
|
||||
query I
|
||||
select log(2, 1)
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
select log(0.5, 64)
|
||||
----
|
||||
-6
|
||||
|
||||
|
||||
query I
|
||||
select log(0.5, 64)
|
||||
----
|
||||
-6
|
||||
|
||||
query I
|
||||
select log('Inf'::DOUBLE, 64)
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
select log(64, 'Inf'::DOUBLE)
|
||||
----
|
||||
Inf
|
||||
|
||||
query I
|
||||
select log(64, 'NaN'::DOUBLE)
|
||||
----
|
||||
NaN
|
||||
|
||||
query I
|
||||
select log('NaN'::DOUBLE, 64)
|
||||
----
|
||||
NaN
|
||||
|
||||
statement error
|
||||
select log('-Inf'::DOUBLE, 64)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*cannot take logarithm.*
|
||||
|
||||
statement error
|
||||
select log(64, '-Inf'::DOUBLE)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*cannot take logarithm.*
|
||||
|
||||
statement error
|
||||
select log(2, -1)
|
||||
----
|
||||
<REGEX>:.*Out of Range Error.*cannot take logarithm.*
|
||||
35
external/duckdb/test/sql/function/numeric/test_pow.test
vendored
Normal file
35
external/duckdb/test/sql/function/numeric/test_pow.test
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
# name: test/sql/function/numeric/test_pow.test
|
||||
# description: Power test
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE powerme(a DOUBLE, b INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO powerme VALUES (2.1, 3)
|
||||
|
||||
query R
|
||||
select pow(a, 0) from powerme
|
||||
----
|
||||
1.000000
|
||||
|
||||
query R
|
||||
select pow(b, -2) from powerme
|
||||
----
|
||||
0.111111
|
||||
|
||||
query R
|
||||
select pow(a, b) from powerme
|
||||
----
|
||||
9.261000
|
||||
|
||||
query R
|
||||
select pow(b, a) from powerme
|
||||
----
|
||||
10.045109
|
||||
|
||||
query R
|
||||
select power(b, a) from powerme
|
||||
----
|
||||
10.045109
|
||||
|
||||
135
external/duckdb/test/sql/function/numeric/test_random.test
vendored
Normal file
135
external/duckdb/test/sql/function/numeric/test_random.test
vendored
Normal file
@@ -0,0 +1,135 @@
|
||||
# name: test/sql/function/numeric/test_random.test
|
||||
# description: Test random & setseed functions
|
||||
# group: [numeric]
|
||||
|
||||
# we need to be a bit more clever here for testing random
|
||||
# it's very unlikely that three random variables are exactly equivalent
|
||||
|
||||
# test random in lambdas and ranges
|
||||
statement ok
|
||||
CREATE TABLE t1 AS SELECT [random() for a IN range(1)] FROM range(2);
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t2 AS SELECT random() FROM range(2);
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t3 AS SELECT [random()] FROM range(2);
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t4 AS SELECT [random() + range * 0 for a IN range(1)] FROM range(2);
|
||||
|
||||
query I
|
||||
SELECT count(*) FROM t1 WHERE (SELECT min(#1) FROM t1 ) == (SELECT max(#1) FROM t1);
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT count(*) FROM t2 WHERE (SELECT min(#1) FROM t2 ) == (SELECT max(#1) FROM t2);
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT count(*) FROM t3 WHERE (SELECT min(#1) FROM t3 ) == (SELECT max(#1) FROM t3);
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT count(*) FROM t4 WHERE (SELECT min(#1) FROM t4 ) == (SELECT max(#1) FROM t4);
|
||||
----
|
||||
0
|
||||
|
||||
require skip_reload
|
||||
|
||||
statement ok
|
||||
BEGIN TRANSACTION
|
||||
|
||||
statement ok
|
||||
CREATE TEMPORARY TABLE t1 AS SELECT RANDOM() a;
|
||||
|
||||
statement ok
|
||||
CREATE TEMPORARY TABLE t2 AS SELECT RANDOM() b;
|
||||
|
||||
statement ok
|
||||
CREATE TEMPORARY TABLE t3 AS SELECT RANDOM() c;
|
||||
|
||||
# empty result on this join
|
||||
query I
|
||||
SELECT COUNT(*) FROM (SELECT a FROM t1 JOIN t2 ON (a=b) JOIN t3 ON (b=c)) s1
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
ROLLBACK
|
||||
|
||||
# with setseed we can enforce the equivalence of these values
|
||||
statement ok
|
||||
select setseed(0.1)
|
||||
|
||||
statement ok
|
||||
CREATE TEMPORARY TABLE t1 AS SELECT RANDOM() a;
|
||||
|
||||
statement ok
|
||||
select setseed(0.1)
|
||||
|
||||
statement ok
|
||||
CREATE TEMPORARY TABLE t2 AS SELECT RANDOM() b;
|
||||
|
||||
statement ok
|
||||
select setseed(0.1)
|
||||
|
||||
statement ok
|
||||
CREATE TEMPORARY TABLE t3 AS SELECT RANDOM() c;
|
||||
|
||||
# now the join has one value
|
||||
query I
|
||||
SELECT COUNT(*) FROM (SELECT a FROM t1 JOIN t2 ON (a=b) JOIN t3 ON (b=c)) s1
|
||||
----
|
||||
1
|
||||
|
||||
# incorrect usage of setseed
|
||||
statement error
|
||||
select setseed(1.1)
|
||||
----
|
||||
|
||||
statement error
|
||||
select setseed(-1.1)
|
||||
----
|
||||
|
||||
# we can use setseed with a table as well
|
||||
statement ok
|
||||
CREATE TABLE seeds(a DOUBLE)
|
||||
|
||||
statement ok
|
||||
INSERT INTO seeds VALUES (-0.1), (0.0), (0.1)
|
||||
|
||||
query IR
|
||||
select setseed(a), a from seeds;
|
||||
----
|
||||
NULL -0.100000
|
||||
NULL 0.000000
|
||||
NULL 0.100000
|
||||
|
||||
# use random in some complicated expressions
|
||||
statement ok
|
||||
CREATE TABLE numbers(a INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO numbers VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)
|
||||
|
||||
query I
|
||||
select case when min(random()) >= 0 then 1 else 0 end from numbers;
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
select case when max(random()) < 1 then 1 else 0 end from numbers;
|
||||
----
|
||||
1
|
||||
|
||||
# we can order by random
|
||||
statement ok
|
||||
select * from numbers order by random()
|
||||
|
||||
# we can select random
|
||||
statement ok
|
||||
select random() from numbers
|
||||
64
external/duckdb/test/sql/function/numeric/test_round.test
vendored
Normal file
64
external/duckdb/test/sql/function/numeric/test_round.test
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
# name: test/sql/function/numeric/test_round.test
|
||||
# description: Rounding test
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE roundme(a DOUBLE, b INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO roundme VALUES (42.123456, 3)
|
||||
|
||||
query R
|
||||
select round(42.12345::DOUBLE, 0)
|
||||
----
|
||||
42.000000
|
||||
|
||||
query R
|
||||
select round(42.12345::DOUBLE)
|
||||
----
|
||||
42.000000
|
||||
|
||||
query R
|
||||
select round(42.12345::DOUBLE, 2)
|
||||
----
|
||||
42.120000
|
||||
|
||||
query RR
|
||||
select round(42.12345::DOUBLE, 4), round(42.1235::DOUBLE, 1000)
|
||||
----
|
||||
42.123400 42.12345
|
||||
|
||||
query I
|
||||
select round(42::DOUBLE, 0)
|
||||
----
|
||||
42
|
||||
|
||||
query III
|
||||
select round(42::DOUBLE, -1), round(42::DOUBLE, -2), round(42::DOUBLE, -1000)
|
||||
----
|
||||
40 0 0
|
||||
|
||||
query R
|
||||
select round(a, 1) from roundme
|
||||
----
|
||||
42.100000
|
||||
|
||||
query I
|
||||
select round(b, 1) from roundme
|
||||
----
|
||||
3
|
||||
|
||||
query R
|
||||
select round(a, b) from roundme
|
||||
----
|
||||
42.123000
|
||||
|
||||
query I
|
||||
SELECT round(1.0, (-2147483648)::INT);
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT round(1.0::DOUBLE, (-2147483648)::INT);
|
||||
----
|
||||
0
|
||||
95
external/duckdb/test/sql/function/numeric/test_round_even.test
vendored
Normal file
95
external/duckdb/test/sql/function/numeric/test_round_even.test
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
# name: test/sql/function/numeric/test_round_even.test
|
||||
# description: Test round even
|
||||
# group: [numeric]
|
||||
|
||||
query I
|
||||
SELECT roundBankers(45, -1)
|
||||
----
|
||||
40
|
||||
|
||||
query II
|
||||
select i, round_even(i + 0.5, 0) from generate_series(-2,4) tbl(i);
|
||||
----
|
||||
-2 -2
|
||||
-1 0
|
||||
0 0
|
||||
1 2
|
||||
2 2
|
||||
3 4
|
||||
4 4
|
||||
|
||||
|
||||
query II
|
||||
select i, round_even(i + 0.55, 0) from generate_series(-2,4) tbl(i);
|
||||
----
|
||||
-2 -1
|
||||
-1 0
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
|
||||
query II
|
||||
select i, roundBankers(i + 0.55, 0) from generate_series(-2,4) tbl(i);
|
||||
----
|
||||
-2 -1
|
||||
-1 0
|
||||
0 1
|
||||
1 2
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
|
||||
# decimals
|
||||
query II
|
||||
SELECT roundBankers(45, -1), roundBankers(35, -1)
|
||||
----
|
||||
40 40
|
||||
|
||||
query II
|
||||
SELECT roundBankers(45.5, 0), roundBankers(44.5, 0)
|
||||
----
|
||||
46 44
|
||||
|
||||
query II
|
||||
SELECT roundBankers(45.55, 1), roundBankers(45.45, 1)
|
||||
----
|
||||
45.6 45.4
|
||||
|
||||
# negative values
|
||||
query II
|
||||
SELECT roundBankers(-45, -1), roundBankers(-35, -1)
|
||||
----
|
||||
-40 -40
|
||||
|
||||
query II
|
||||
SELECT roundBankers(-45.5, 0), roundBankers(-44.5, 0)
|
||||
----
|
||||
-46 -44
|
||||
|
||||
query II
|
||||
SELECT roundBankers(-45.55, 1), roundBankers(-45.45, 1)
|
||||
----
|
||||
-45.6 -45.4
|
||||
|
||||
# doubles
|
||||
query II
|
||||
SELECT roundBankers(45::DOUBLE, -1), roundBankers(35::DOUBLE, -1)
|
||||
----
|
||||
40 40
|
||||
|
||||
query II
|
||||
SELECT roundBankers(45.5::DOUBLE, 0), roundBankers(44.5::DOUBLE, 0)
|
||||
----
|
||||
46 44
|
||||
|
||||
query II
|
||||
SELECT roundBankers(45.55::DOUBLE, 1), roundBankers(45.45::DOUBLE, 1)
|
||||
----
|
||||
45.6 45.4
|
||||
|
||||
query III
|
||||
SELECT roundBankers(NULL, 1), roundBankers(45, NULL), roundBankers(NULL, NULL)
|
||||
----
|
||||
NULL NULL NULL
|
||||
44
external/duckdb/test/sql/function/numeric/test_round_integers.test
vendored
Normal file
44
external/duckdb/test/sql/function/numeric/test_round_integers.test
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
# name: test/sql/function/numeric/test_round_integers.test
|
||||
# description: Test the special cased integer rounding
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE zz AS
|
||||
SELECT
|
||||
CAST(i AS SMALLINT) AS id,
|
||||
CAST(i AS SMALLINT) AS si
|
||||
FROM generate_series(1, 1000) t(i);
|
||||
|
||||
query I
|
||||
SELECT ROUND(53) AS ag_column3
|
||||
FROM zz
|
||||
GROUP BY ag_column3
|
||||
ORDER BY ag_column3
|
||||
----
|
||||
53
|
||||
|
||||
query I
|
||||
SELECT ROUND(53, si) AS ag_column3
|
||||
FROM zz
|
||||
GROUP BY ag_column3
|
||||
ORDER BY ag_column3
|
||||
----
|
||||
53
|
||||
|
||||
query I
|
||||
SELECT ROUND(53, -si) AS ag_column3
|
||||
FROM zz
|
||||
GROUP BY ag_column3
|
||||
ORDER BY ag_column3
|
||||
----
|
||||
0
|
||||
50
|
||||
100
|
||||
|
||||
query I
|
||||
select round(100::INTEGER, int)
|
||||
from test_all_types();
|
||||
----
|
||||
0
|
||||
100
|
||||
NULL
|
||||
37
external/duckdb/test/sql/function/numeric/test_sign_bit.test
vendored
Normal file
37
external/duckdb/test/sql/function/numeric/test_sign_bit.test
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
# name: test/sql/function/numeric/test_sign_bit.test
|
||||
# description: signbit test
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_first';
|
||||
|
||||
foreach type FLOAT DOUBLE
|
||||
|
||||
query III
|
||||
SELECT signbit(3::${type}), signbit(-3::${type}), signbit(NULL::${type})
|
||||
----
|
||||
false true NULL
|
||||
|
||||
statement ok
|
||||
CREATE TABLE floats(f ${type})
|
||||
|
||||
statement ok
|
||||
INSERT INTO floats VALUES (3), (1.0::float), (-0.0::float), ('inf'), ('-inf'), (NULL)
|
||||
|
||||
query IIII
|
||||
SELECT f, signbit(f), isinf(f), isfinite(f) FROM floats ORDER BY f
|
||||
----
|
||||
NULL NULL NULL NULL
|
||||
-inf True True False
|
||||
-0 True False True
|
||||
1 False False True
|
||||
3 False False True
|
||||
inf False True False
|
||||
|
||||
statement ok
|
||||
SELECT signbit(1.0 / 0.0);
|
||||
|
||||
statement ok
|
||||
DROP TABLE floats
|
||||
|
||||
endloop
|
||||
511
external/duckdb/test/sql/function/numeric/test_trigo.test
vendored
Normal file
511
external/duckdb/test/sql/function/numeric/test_trigo.test
vendored
Normal file
@@ -0,0 +1,511 @@
|
||||
# name: test/sql/function/numeric/test_trigo.test
|
||||
# description: Test trigonometric function
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_first';
|
||||
|
||||
statement ok
|
||||
CREATE TABLE numbers(n DOUBLE)
|
||||
|
||||
statement ok
|
||||
INSERT INTO numbers VALUES (-42),(-1),(0), (1), (42), (NULL)
|
||||
|
||||
query I
|
||||
SELECT cast(SIN(n::tinyint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
917
|
||||
-841
|
||||
0
|
||||
841
|
||||
-917
|
||||
|
||||
query I
|
||||
SELECT cast(SIN(n::smallint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
917
|
||||
-841
|
||||
0
|
||||
841
|
||||
-917
|
||||
|
||||
query I
|
||||
SELECT cast(SIN(n::integer)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
917
|
||||
-841
|
||||
0
|
||||
841
|
||||
-917
|
||||
|
||||
query I
|
||||
SELECT cast(SIN(n::bigint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
917
|
||||
-841
|
||||
0
|
||||
841
|
||||
-917
|
||||
|
||||
query I
|
||||
SELECT cast(SIN(n::float)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
917
|
||||
-841
|
||||
0
|
||||
841
|
||||
-917
|
||||
|
||||
query I
|
||||
SELECT cast(SIN(n::double)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
917
|
||||
-841
|
||||
0
|
||||
841
|
||||
-917
|
||||
|
||||
query I
|
||||
SELECT cast(COS(n::tinyint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-400
|
||||
540
|
||||
1000
|
||||
540
|
||||
-400
|
||||
|
||||
query I
|
||||
SELECT cast(COS(n::smallint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-400
|
||||
540
|
||||
1000
|
||||
540
|
||||
-400
|
||||
|
||||
query I
|
||||
SELECT cast(COS(n::integer)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-400
|
||||
540
|
||||
1000
|
||||
540
|
||||
-400
|
||||
|
||||
query I
|
||||
SELECT cast(COS(n::bigint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-400
|
||||
540
|
||||
1000
|
||||
540
|
||||
-400
|
||||
|
||||
query I
|
||||
SELECT cast(COS(n::float)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-400
|
||||
540
|
||||
1000
|
||||
540
|
||||
-400
|
||||
|
||||
query I
|
||||
SELECT cast(COS(n::double)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-400
|
||||
540
|
||||
1000
|
||||
540
|
||||
-400
|
||||
|
||||
query I
|
||||
SELECT cast(TAN(n::tinyint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-2291
|
||||
-1557
|
||||
0
|
||||
1557
|
||||
2291
|
||||
|
||||
query I
|
||||
SELECT cast(TAN(n::smallint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-2291
|
||||
-1557
|
||||
0
|
||||
1557
|
||||
2291
|
||||
|
||||
query I
|
||||
SELECT cast(TAN(n::integer)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-2291
|
||||
-1557
|
||||
0
|
||||
1557
|
||||
2291
|
||||
|
||||
query I
|
||||
SELECT cast(TAN(n::bigint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-2291
|
||||
-1557
|
||||
0
|
||||
1557
|
||||
2291
|
||||
|
||||
query I
|
||||
SELECT cast(TAN(n::float)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-2291
|
||||
-1557
|
||||
0
|
||||
1557
|
||||
2291
|
||||
|
||||
query I
|
||||
SELECT cast(TAN(n::double)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-2291
|
||||
-1557
|
||||
0
|
||||
1557
|
||||
2291
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN(n::tinyint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-1547
|
||||
-785
|
||||
0
|
||||
785
|
||||
1547
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN(n::smallint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-1547
|
||||
-785
|
||||
0
|
||||
785
|
||||
1547
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN(n::integer)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-1547
|
||||
-785
|
||||
0
|
||||
785
|
||||
1547
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN(n::bigint)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-1547
|
||||
-785
|
||||
0
|
||||
785
|
||||
1547
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN(n::float)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-1547
|
||||
-785
|
||||
0
|
||||
785
|
||||
1547
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN(n::double)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-1547
|
||||
-785
|
||||
0
|
||||
785
|
||||
1547
|
||||
|
||||
query I
|
||||
SELECT cast(ASIN(n::tinyint)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
-1571
|
||||
0
|
||||
1571
|
||||
|
||||
query I
|
||||
SELECT cast(ASIN(n::smallint)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
-1571
|
||||
0
|
||||
1571
|
||||
|
||||
query I
|
||||
SELECT cast(ASIN(n::integer)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
-1571
|
||||
0
|
||||
1571
|
||||
|
||||
query I
|
||||
SELECT cast(ASIN(n::bigint)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
-1571
|
||||
0
|
||||
1571
|
||||
|
||||
query I
|
||||
SELECT cast(ASIN(n::float)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
-1571
|
||||
0
|
||||
1571
|
||||
|
||||
query I
|
||||
SELECT cast(ASIN(n::double)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
-1571
|
||||
0
|
||||
1571
|
||||
|
||||
query I
|
||||
SELECT cast(ACOS(n::tinyint)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
3142
|
||||
1571
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT cast(ACOS(n::smallint)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
3142
|
||||
1571
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT cast(ACOS(n::integer)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
3142
|
||||
1571
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT cast(ACOS(n::bigint)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
3142
|
||||
1571
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT cast(ACOS(n::float)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
3142
|
||||
1571
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT cast(ACOS(n::double)*1000 as bigint) FROM numbers WHERE n between -1 and 1 ORDER BY n
|
||||
----
|
||||
3142
|
||||
1571
|
||||
0
|
||||
|
||||
statement error
|
||||
SELECT cast(ASIN(n)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT cast(COT(n::tinyint)*1000 as bigint) FROM numbers WHERE n > 0.1 OR N < -0.1 ORDER BY n
|
||||
----
|
||||
-436
|
||||
-642
|
||||
642
|
||||
436
|
||||
|
||||
query I
|
||||
SELECT cast(COT(n::smallint)*1000 as bigint) FROM numbers WHERE n > 0.1 OR N < -0.1 ORDER BY n
|
||||
----
|
||||
-436
|
||||
-642
|
||||
642
|
||||
436
|
||||
|
||||
query I
|
||||
SELECT cast(COT(n::integer)*1000 as bigint) FROM numbers WHERE n > 0.1 OR N < -0.1 ORDER BY n
|
||||
----
|
||||
-436
|
||||
-642
|
||||
642
|
||||
436
|
||||
|
||||
query I
|
||||
SELECT cast(COT(n::bigint)*1000 as bigint) FROM numbers WHERE n > 0.1 OR N < -0.1 ORDER BY n
|
||||
----
|
||||
-436
|
||||
-642
|
||||
642
|
||||
436
|
||||
|
||||
query I
|
||||
SELECT cast(COT(n::float)*1000 as bigint) FROM numbers WHERE n > 0.1 OR N < -0.1 ORDER BY n
|
||||
----
|
||||
-436
|
||||
-642
|
||||
642
|
||||
436
|
||||
|
||||
query I
|
||||
SELECT cast(COT(n::double)*1000 as bigint) FROM numbers WHERE n > 0.1 OR N < -0.1 ORDER BY n
|
||||
----
|
||||
-436
|
||||
-642
|
||||
642
|
||||
436
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN2(n::tinyint, 42)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-785
|
||||
-24
|
||||
0
|
||||
24
|
||||
785
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN2(n::smallint, 42)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-785
|
||||
-24
|
||||
0
|
||||
24
|
||||
785
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN2(n::integer, 42)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-785
|
||||
-24
|
||||
0
|
||||
24
|
||||
785
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN2(n::bigint, 42)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-785
|
||||
-24
|
||||
0
|
||||
24
|
||||
785
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN2(n::float, 42)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-785
|
||||
-24
|
||||
0
|
||||
24
|
||||
785
|
||||
|
||||
query I
|
||||
SELECT cast(ATAN2(n::double, 42)*1000 as bigint) FROM numbers ORDER BY n
|
||||
----
|
||||
NULL
|
||||
-785
|
||||
-24
|
||||
0
|
||||
24
|
||||
785
|
||||
|
||||
statement error
|
||||
select asin(-2);
|
||||
----
|
||||
Invalid Input Error: ASIN is undefined outside [-1,1]
|
||||
|
||||
statement error
|
||||
select acos(-2);
|
||||
----
|
||||
Invalid Input Error: ACOS is undefined outside [-1,1]
|
||||
|
||||
|
||||
# Hyperbolic trigo functions
|
||||
|
||||
# ATANH
|
||||
foreach value 1.1 -1.1
|
||||
|
||||
statement error
|
||||
select atanh(${value});
|
||||
----
|
||||
Invalid Input Error: ATANH is undefined outside [-1,1]
|
||||
|
||||
endloop
|
||||
|
||||
query II
|
||||
select atanh(1), atanh(-1);
|
||||
----
|
||||
inf inf
|
||||
|
||||
query III
|
||||
select atanh(-0.5), atanh(0), atanh(0.5);
|
||||
----
|
||||
-0.5493061443340549 0.0 0.5493061443340549
|
||||
|
||||
# ACOSH
|
||||
query IIII
|
||||
select acosh(-1), acosh(0), acosh(1), acosh(2);
|
||||
----
|
||||
NaN NaN 0.0 1.3169578969248166
|
||||
|
||||
# ASINH
|
||||
query III
|
||||
select asinh(-1), asinh(0), asinh(2);
|
||||
----
|
||||
-0.881373587019543 0.0 1.4436354751788103
|
||||
|
||||
# TANH
|
||||
query IIII
|
||||
select tanh(-0.5), tanh(0), tanh(0.5), tanh(1000);
|
||||
----
|
||||
-0.46211715726000974 0.0 0.46211715726000974 1.0
|
||||
|
||||
# COSH
|
||||
query IIII
|
||||
select cosh(-1), cosh(0), cosh(1), cosh(1000);
|
||||
----
|
||||
1.5430806348152437 1.0 1.5430806348152437 inf
|
||||
|
||||
# SINH
|
||||
query IIII
|
||||
select sinh(-1), sinh(0), sinh(1), sinh(1000);
|
||||
----
|
||||
-1.1752011936438014 0.0 1.1752011936438014 inf
|
||||
92
external/duckdb/test/sql/function/numeric/test_trunc.test
vendored
Normal file
92
external/duckdb/test/sql/function/numeric/test_trunc.test
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
# 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
|
||||
106
external/duckdb/test/sql/function/numeric/test_trunc_precision.test
vendored
Normal file
106
external/duckdb/test/sql/function/numeric/test_trunc_precision.test
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
# name: test/sql/function/numeric/test_trunc_precision.test
|
||||
# description: Truncation to precision tests
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE truncme(a DOUBLE, b INTEGER, c UINTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO truncme VALUES (42.123456, 37, 19), (-3.141592, -75, 5);
|
||||
|
||||
# Non-integral types should truncate
|
||||
foreach datatype DOUBLE FLOAT DECIMAL(10,6)
|
||||
|
||||
query RR
|
||||
select trunc(42.12345::${datatype}, 2), trunc(42.12345::${datatype}, -1)
|
||||
----
|
||||
42.12 40
|
||||
|
||||
query RR
|
||||
select trunc(-42.12345::${datatype}, 2), trunc(-42.12345::${datatype}, -1)
|
||||
----
|
||||
-42.12 -40
|
||||
|
||||
query RR
|
||||
select trunc(127::${datatype}, 2), trunc(127::${datatype}, -1)
|
||||
----
|
||||
127.000000 120
|
||||
|
||||
query RR
|
||||
select trunc(-127::${datatype}, 2), trunc(-127::${datatype}, -1)
|
||||
----
|
||||
-127.000000 -120
|
||||
|
||||
query RR
|
||||
select trunc(0::${datatype}, 2), trunc(0::${datatype}, -1)
|
||||
----
|
||||
0.000000 0.000000
|
||||
|
||||
query II
|
||||
select trunc(a::${datatype}, 2), trunc(a::${datatype}, -1)
|
||||
from truncme
|
||||
----
|
||||
42.12 40
|
||||
-3.14 0
|
||||
|
||||
endloop
|
||||
|
||||
# Signed integers should truncate too
|
||||
foreach signed TINYINT SMALLINT INTEGER BIGINT HUGEINT
|
||||
|
||||
query RR
|
||||
select trunc(54::${signed}, 2), trunc(54::${signed}, -1)
|
||||
----
|
||||
54 50
|
||||
|
||||
query RR
|
||||
select trunc(-27::${signed}, 2), trunc(-27::${signed}, -1)
|
||||
----
|
||||
-27 -20
|
||||
|
||||
query II
|
||||
select trunc(b::${signed}, 2), trunc(b::${signed}, -1)
|
||||
from truncme
|
||||
----
|
||||
37 30
|
||||
-75 -70
|
||||
|
||||
endloop
|
||||
|
||||
# Unsigned integers should truncate too
|
||||
foreach unsigned UTINYINT USMALLINT UINTEGER UBIGINT UHUGEINT
|
||||
|
||||
query RR
|
||||
select trunc(15::${unsigned}, 2), trunc(15::${unsigned}, -1)
|
||||
----
|
||||
15 10
|
||||
|
||||
query II
|
||||
select trunc(c::${unsigned}, 2), trunc(c::${unsigned}, -1)
|
||||
from truncme
|
||||
----
|
||||
19 10
|
||||
5 0
|
||||
|
||||
endloop
|
||||
|
||||
# Test specials
|
||||
foreach special DOUBLE FLOAT
|
||||
|
||||
foreach precision 2 0 -1
|
||||
|
||||
query III
|
||||
select
|
||||
trunc('NAN'::${special}, ${precision}),
|
||||
trunc('infinity'::${special}, ${precision}),
|
||||
trunc('-infinity'::${special}, ${precision})
|
||||
;
|
||||
----
|
||||
NAN infinity -infinity
|
||||
|
||||
endloop
|
||||
|
||||
endloop
|
||||
213
external/duckdb/test/sql/function/numeric/test_type_resolution.test
vendored
Normal file
213
external/duckdb/test/sql/function/numeric/test_type_resolution.test
vendored
Normal file
@@ -0,0 +1,213 @@
|
||||
# name: test/sql/function/numeric/test_type_resolution.test
|
||||
# group: [numeric]
|
||||
|
||||
# test type resolution of various additions
|
||||
query I
|
||||
SELECT 1::TINYINT + 1::TINYINT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::TINYINT + 1::SMALLINT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::TINYINT + 1::INT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::TINYINT + 1::BIGINT
|
||||
----
|
||||
2
|
||||
|
||||
query R
|
||||
SELECT 1::TINYINT + 1::REAL
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::TINYINT + 1::DOUBLE
|
||||
----
|
||||
2.000000
|
||||
|
||||
statement error
|
||||
SELECT 1::TINYINT + 1::VARCHAR
|
||||
----
|
||||
<REGEX>:.*Binder Error: No function matches.*
|
||||
|
||||
query I
|
||||
SELECT 1::SMALLINT + 1::TINYINT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::SMALLINT + 1::SMALLINT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::SMALLINT + 1::INT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::SMALLINT + 1::BIGINT
|
||||
----
|
||||
2
|
||||
|
||||
query R
|
||||
SELECT 1::SMALLINT + 1::REAL
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::SMALLINT + 1::DOUBLE
|
||||
----
|
||||
2.000000
|
||||
|
||||
statement error
|
||||
SELECT 1::SMALLINT + 1::VARCHAR
|
||||
----
|
||||
<REGEX>:.*Binder Error: No function matches.*
|
||||
|
||||
query I
|
||||
SELECT 1::INTEGER + 1::TINYINT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::INTEGER + 1::SMALLINT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::INTEGER + 1::INT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::INTEGER + 1::BIGINT
|
||||
----
|
||||
2
|
||||
|
||||
query R
|
||||
SELECT 1::INTEGER + 1::REAL
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::INTEGER + 1::DOUBLE
|
||||
----
|
||||
2.000000
|
||||
|
||||
statement error
|
||||
SELECT 1::INTEGER + 1::VARCHAR
|
||||
----
|
||||
<REGEX>:.*Binder Error: No function matches.*
|
||||
|
||||
query I
|
||||
SELECT 1::BIGINT + 1::TINYINT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::BIGINT + 1::SMALLINT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::BIGINT + 1::INT
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1::BIGINT + 1::BIGINT
|
||||
----
|
||||
2
|
||||
|
||||
query R
|
||||
SELECT 1::BIGINT + 1::REAL
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::BIGINT + 1::DOUBLE
|
||||
----
|
||||
2.000000
|
||||
|
||||
statement error
|
||||
SELECT 1::BIGINT + 1::VARCHAR
|
||||
----
|
||||
<REGEX>:.*Binder Error: No function matches.*
|
||||
|
||||
query R
|
||||
SELECT 1::REAL + 1::TINYINT
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::REAL + 1::SMALLINT
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::REAL + 1::INT
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::REAL + 1::BIGINT
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::REAL + 1::REAL
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::REAL + 1::DOUBLE
|
||||
----
|
||||
2.000000
|
||||
|
||||
statement error
|
||||
SELECT 1::REAL + 1::VARCHAR
|
||||
----
|
||||
<REGEX>:.*Binder Error: No function matches.*
|
||||
|
||||
query R
|
||||
SELECT 1::DOUBLE + 1::TINYINT
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::DOUBLE + 1::SMALLINT
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::DOUBLE + 1::INT
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::DOUBLE + 1::BIGINT
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::DOUBLE + 1::REAL
|
||||
----
|
||||
2.000000
|
||||
|
||||
query R
|
||||
SELECT 1::DOUBLE + 1::DOUBLE
|
||||
----
|
||||
2.000000
|
||||
|
||||
statement error
|
||||
SELECT 1::DOUBLE + 1::VARCHAR
|
||||
----
|
||||
<REGEX>:.*Binder Error: No function matches.*
|
||||
88
external/duckdb/test/sql/function/numeric/test_unary.test
vendored
Normal file
88
external/duckdb/test/sql/function/numeric/test_unary.test
vendored
Normal file
@@ -0,0 +1,88 @@
|
||||
# name: test/sql/function/numeric/test_unary.test
|
||||
# description: Test unary operators
|
||||
# group: [numeric]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test(i INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (2)
|
||||
|
||||
query I
|
||||
SELECT ++-++-+i FROM test
|
||||
----
|
||||
2
|
||||
|
||||
# test simple unary operators
|
||||
query I
|
||||
SELECT +i FROM test
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT -i FROM test
|
||||
----
|
||||
-2
|
||||
|
||||
# we can also stack unary functions
|
||||
query I
|
||||
SELECT +++++++i FROM test
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT ++-++-+i FROM test
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT -+-+-+-+-i FROM test
|
||||
----
|
||||
-2
|
||||
|
||||
# Test negation of minima
|
||||
statement ok
|
||||
CREATE TABLE minima (t TINYINT, s SMALLINT, i INTEGER, b BIGINT);
|
||||
|
||||
statement ok
|
||||
INSERT INTO minima VALUES (-128, -32768, -2147483648, -9223372036854775808);
|
||||
|
||||
statement error
|
||||
SELECT -t from minima;
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT -s from minima;
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT -i from minima;
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT -b from minima;
|
||||
----
|
||||
|
||||
# cannot apply these to a string
|
||||
statement error
|
||||
SELECT +'hello'
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT -'hello'
|
||||
----
|
||||
|
||||
# cannot apply these to a date either
|
||||
statement ok
|
||||
CREATE TABLE dates(d DATE)
|
||||
|
||||
statement ok
|
||||
INSERT INTO dates VALUES ('1992-02-02')
|
||||
|
||||
statement error
|
||||
SELECT +d FROM dates
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT -d FROM dates
|
||||
----
|
||||
Reference in New Issue
Block a user