diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2018-04-29 18:15:16 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2018-04-29 18:15:16 -0400 |
commit | d6ec3d2375ac3b94d2480c01d7ee7739b236642c (patch) | |
tree | b3885cbbdac10fe89bf34272dc1d03cfd9557518 /src/test | |
parent | 2acbeea48c38b1574b5f59f4e2e05fbad2e45ec5 (diff) |
Avoid wrong results for power() with NaN input on more platforms.
Buildfarm results show that the modern POSIX rule that 1 ^ NaN = 1 is not
honored on *BSD until relatively recently, and really old platforms don't
believe that NaN ^ 0 = 1 either. (This is unsurprising, perhaps, since
SUSv2 doesn't require either behavior.) In hopes of getting to platform
independent behavior, let's deal with all the NaN-input cases explicitly
in dpow().
Note that numeric_power() doesn't know either of these special cases.
But since that behavior is platform-independent, I think it should be
addressed separately, and probably not back-patched.
Discussion: https://postgr.es/m/75DB81BEEA95B445AE6D576A0A5C9E936A73E741@BPXM05GP.gisp.nec.co.jp
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/float8-exp-three-digits-win32.out | 6 | ||||
-rw-r--r-- | src/test/regress/expected/float8-small-is-zero.out | 6 | ||||
-rw-r--r-- | src/test/regress/expected/float8-small-is-zero_1.out | 6 | ||||
-rw-r--r-- | src/test/regress/expected/float8.out | 6 | ||||
-rw-r--r-- | src/test/regress/sql/float8.sql | 1 |
5 files changed, 25 insertions, 0 deletions
diff --git a/src/test/regress/expected/float8-exp-three-digits-win32.out b/src/test/regress/expected/float8-exp-three-digits-win32.out index 3fe50b4bf00..3896cdec721 100644 --- a/src/test/regress/expected/float8-exp-three-digits-win32.out +++ b/src/test/regress/expected/float8-exp-three-digits-win32.out @@ -358,6 +358,12 @@ SELECT power(float8 'NaN', float8 'NaN'); NaN (1 row) +SELECT power(float8 '-1', float8 'NaN'); + power +------- + NaN +(1 row) + SELECT power(float8 '1', float8 'NaN'); power ------- diff --git a/src/test/regress/expected/float8-small-is-zero.out b/src/test/regress/expected/float8-small-is-zero.out index 46adbe1c4ba..f8e09390f51 100644 --- a/src/test/regress/expected/float8-small-is-zero.out +++ b/src/test/regress/expected/float8-small-is-zero.out @@ -362,6 +362,12 @@ SELECT power(float8 'NaN', float8 'NaN'); NaN (1 row) +SELECT power(float8 '-1', float8 'NaN'); + power +------- + NaN +(1 row) + SELECT power(float8 '1', float8 'NaN'); power ------- diff --git a/src/test/regress/expected/float8-small-is-zero_1.out b/src/test/regress/expected/float8-small-is-zero_1.out index f215eede103..ebfec4cdb68 100644 --- a/src/test/regress/expected/float8-small-is-zero_1.out +++ b/src/test/regress/expected/float8-small-is-zero_1.out @@ -362,6 +362,12 @@ SELECT power(float8 'NaN', float8 'NaN'); NaN (1 row) +SELECT power(float8 '-1', float8 'NaN'); + power +------- + NaN +(1 row) + SELECT power(float8 '1', float8 'NaN'); power ------- diff --git a/src/test/regress/expected/float8.out b/src/test/regress/expected/float8.out index 7159e78d4a7..b05831d45c9 100644 --- a/src/test/regress/expected/float8.out +++ b/src/test/regress/expected/float8.out @@ -358,6 +358,12 @@ SELECT power(float8 'NaN', float8 'NaN'); NaN (1 row) +SELECT power(float8 '-1', float8 'NaN'); + power +------- + NaN +(1 row) + SELECT power(float8 '1', float8 'NaN'); power ------- diff --git a/src/test/regress/sql/float8.sql b/src/test/regress/sql/float8.sql index 5510fe9d345..eeebddd4b78 100644 --- a/src/test/regress/sql/float8.sql +++ b/src/test/regress/sql/float8.sql @@ -111,6 +111,7 @@ SELECT power(float8 '144', float8 '0.5'); SELECT power(float8 'NaN', float8 '0.5'); SELECT power(float8 '144', float8 'NaN'); SELECT power(float8 'NaN', float8 'NaN'); +SELECT power(float8 '-1', float8 'NaN'); SELECT power(float8 '1', float8 'NaN'); SELECT power(float8 'NaN', float8 '0'); |