Fix NaN comparison in circle_same test
authorDaniel Gustafsson <[email protected]>
Mon, 12 Sep 2022 10:59:06 +0000 (12:59 +0200)
committerDaniel Gustafsson <[email protected]>
Mon, 12 Sep 2022 10:59:06 +0000 (12:59 +0200)
Commit c4c340088 changed geometric operators to use float4 and float8
functions, and handle NaN's in a better way. The circle sameness test
had a typo in the code which resulted in all comparisons with the left
circle having a NaN radius considered same.

  postgres=# select '<(0,0),NaN>'::circle ~= '<(0,0),1>'::circle;
  ?column?
  ----------
  t
  (1 row)

This fixes the sameness test to consider the radius of both the left
and right circle.

Back to v12 where this was introduced.

Author: Ranier Vilela <[email protected]>
Discussion: https://postgr.es/m/CAEudQAo8dK=yctg2ZzjJuzV4zgOPBxRU5+Kb+yatFiddtQk6Rw@mail.gmail.com
Back-through: v12

src/backend/utils/adt/geo_ops.c
src/test/regress/expected/geometry.out

index 535301a218063c70cc36a7cff9e41927167148ae..f1b632ef3cbf3a6e121309ba5aec8a01f9a71edb 100644 (file)
@@ -4710,7 +4710,7 @@ circle_same(PG_FUNCTION_ARGS)
    CIRCLE     *circle1 = PG_GETARG_CIRCLE_P(0);
    CIRCLE     *circle2 = PG_GETARG_CIRCLE_P(1);
 
-   PG_RETURN_BOOL(((isnan(circle1->radius) && isnan(circle1->radius)) ||
+   PG_RETURN_BOOL(((isnan(circle1->radius) && isnan(circle2->radius)) ||
                    FPeq(circle1->radius, circle2->radius)) &&
                   point_eq_point(&circle1->center, &circle2->center));
 }
index 3b364d1e3beb730b0e37e9a3265ae2f379cdb067..b50103b2165edc46100c4bc1340269c82e667551 100644 (file)
@@ -4380,9 +4380,8 @@ SELECT c1.f1, c2.f1 FROM CIRCLE_TBL c1, CIRCLE_TBL c2 WHERE c1.f1 ~= c2.f1;
  <(100,200),10> | <(100,200),10>
  <(100,1),115>  | <(100,1),115>
  <(3,5),0>      | <(3,5),0>
- <(3,5),NaN>    | <(3,5),0>
  <(3,5),NaN>    | <(3,5),NaN>
-(9 rows)
+(8 rows)
 
 -- Overlap with circle
 SELECT c1.f1, c2.f1 FROM CIRCLE_TBL c1, CIRCLE_TBL c2 WHERE c1.f1 && c2.f1;