aboutsummaryrefslogtreecommitdiff
path: root/src/test/regress/expected/numeric.out
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/regress/expected/numeric.out')
-rw-r--r--src/test/regress/expected/numeric.out39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out
index 26930f4db47..65a9c757638 100644
--- a/src/test/regress/expected/numeric.out
+++ b/src/test/regress/expected/numeric.out
@@ -1473,6 +1473,45 @@ FROM generate_series(0, 110, 10) x;
110 | 0 | 0
(12 rows)
+-- Check cases that could trigger overflow or underflow within the calculation
+SELECT oper, low, high, cnt, width_bucket(oper, low, high, cnt)
+FROM
+ (SELECT 1.797e+308::float8 AS big, 5e-324::float8 AS tiny) as v,
+ LATERAL (VALUES
+ (10.5::float8, -big, big, 1),
+ (10.5::float8, -big, big, 2),
+ (10.5::float8, -big, big, 3),
+ (big / 4, -big / 2, big / 2, 10),
+ (10.5::float8, big, -big, 1),
+ (10.5::float8, big, -big, 2),
+ (10.5::float8, big, -big, 3),
+ (big / 4, big / 2, -big / 2, 10),
+ (0, 0, tiny, 4),
+ (tiny, 0, tiny, 4),
+ (0, 0, 1, 2147483647),
+ (1, 1, 0, 2147483647)
+ ) as sample(oper, low, high, cnt);
+ oper | low | high | cnt | width_bucket
+-------------+-------------+-------------+------------+--------------
+ 10.5 | -1.797e+308 | 1.797e+308 | 1 | 1
+ 10.5 | -1.797e+308 | 1.797e+308 | 2 | 2
+ 10.5 | -1.797e+308 | 1.797e+308 | 3 | 2
+ 4.4925e+307 | -8.985e+307 | 8.985e+307 | 10 | 8
+ 10.5 | 1.797e+308 | -1.797e+308 | 1 | 1
+ 10.5 | 1.797e+308 | -1.797e+308 | 2 | 2
+ 10.5 | 1.797e+308 | -1.797e+308 | 3 | 2
+ 4.4925e+307 | 8.985e+307 | -8.985e+307 | 10 | 3
+ 0 | 0 | 5e-324 | 4 | 1
+ 5e-324 | 0 | 5e-324 | 4 | 5
+ 0 | 0 | 1 | 2147483647 | 1
+ 1 | 1 | 0 | 2147483647 | 1
+(12 rows)
+
+-- These fail because the result would be out of int32 range:
+SELECT width_bucket(1::float8, 0, 1, 2147483647);
+ERROR: integer out of range
+SELECT width_bucket(0::float8, 1, 0, 2147483647);
+ERROR: integer out of range
--
-- TO_CHAR()
--