From e3090ede5574873b63b42dfa728a28d20a7d08b1 Mon Sep 17 00:00:00 2001
From: Yolan Uyttenhove <yolan.uyttenhove@ugent.be>
Date: Fri, 31 Jan 2025 15:34:47 +0100
Subject: [PATCH] Make debug checks on radius less brittle

---
 src/shadowswift/algorithm3d/delaunay.h |  4 ++--
 src/shadowswift/algorithm3d/geometry.h | 26 +++++++++++++++-----------
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/src/shadowswift/algorithm3d/delaunay.h b/src/shadowswift/algorithm3d/delaunay.h
index 48fe368778..379c965ad9 100644
--- a/src/shadowswift/algorithm3d/delaunay.h
+++ b/src/shadowswift/algorithm3d/delaunay.h
@@ -2256,8 +2256,8 @@ inline static void delaunay_compute_circumcenters(
     const double r3 =
         sqrt((cx - v3r[0]) * (cx - v3r[0]) + (cy - v3r[1]) * (cy - v3r[1]) +
              (cz - v3r[2]) * (cz - v3r[2]));
-    delaunay_assert(double_cmp(r0, r1, 6) && double_cmp(r0, r2, 6) &&
-                    double_cmp(r0, r3, 6));
+    delaunay_assert(approx_equals(r0, r1, 1e-6) &&
+                    approx_equals(r0, r2, 1e-6) && approx_equals(r0, r3, 1e-6));
 #endif
   }
 }
diff --git a/src/shadowswift/algorithm3d/geometry.h b/src/shadowswift/algorithm3d/geometry.h
index 0057075c19..9dd6545159 100644
--- a/src/shadowswift/algorithm3d/geometry.h
+++ b/src/shadowswift/algorithm3d/geometry.h
@@ -1035,20 +1035,24 @@ static inline double geometry3d_compute_circumradius2_adaptive(
                          circumcenter[2] * circumcenter[2];
 #ifdef SWIFT_DEBUG_CHECKS
   /* Check validity */
+  double c_non_rel[3] = {v0->x_f64[0] + circumcenter[0],
+                         v0->x_f64[1] + circumcenter[1],
+                         v0->x_f64[2] + circumcenter[2]};
   const double r12 =
-      (circumcenter[0] - v1->x_f64[0]) * (circumcenter[0] - v1->x_f64[0]) +
-      (circumcenter[1] - v1->x_f64[1]) * (circumcenter[1] - v1->x_f64[1]) +
-      (circumcenter[2] - v1->x_f64[2]) * (circumcenter[2] - v1->x_f64[2]);
+      (c_non_rel[0] - v1->x_f64[0]) * (c_non_rel[0] - v1->x_f64[0]) +
+      (c_non_rel[1] - v1->x_f64[1]) * (c_non_rel[1] - v1->x_f64[1]) +
+      (c_non_rel[2] - v1->x_f64[2]) * (c_non_rel[2] - v1->x_f64[2]);
   const double r22 =
-      (circumcenter[0] - v2->x_f64[0]) * (circumcenter[0] - v2->x_f64[0]) +
-      (circumcenter[1] - v2->x_f64[1]) * (circumcenter[1] - v2->x_f64[1]) +
-      (circumcenter[2] - v2->x_f64[2]) * (circumcenter[2] - v2->x_f64[2]);
+      (c_non_rel[0] - v2->x_f64[0]) * (c_non_rel[0] - v2->x_f64[0]) +
+      (c_non_rel[1] - v2->x_f64[1]) * (c_non_rel[1] - v2->x_f64[1]) +
+      (c_non_rel[2] - v2->x_f64[2]) * (c_non_rel[2] - v2->x_f64[2]);
   const double r32 =
-      (circumcenter[0] - v3->x_f64[0]) * (circumcenter[0] - v3->x_f64[0]) +
-      (circumcenter[1] - v3->x_f64[1]) * (circumcenter[1] - v3->x_f64[1]) +
-      (circumcenter[2] - v3->x_f64[2]) * (circumcenter[2] - v3->x_f64[2]);
-  assert(double_cmp(radius2, r12, 1e3) && double_cmp(radius2, r22, 1e3) &&
-         double_cmp(radius2, r32, 1e3));
+      (c_non_rel[0] - v3->x_f64[0]) * (c_non_rel[0] - v3->x_f64[0]) +
+      (c_non_rel[1] - v3->x_f64[1]) * (c_non_rel[1] - v3->x_f64[1]) +
+      (c_non_rel[2] - v3->x_f64[2]) * (c_non_rel[2] - v3->x_f64[2]);
+  assert(approx_equals(radius2, r12, 1e-6) &&
+         approx_equals(radius2, r22, 1e-6) &&
+         approx_equals(radius2, r32, 1e-6));
 #endif
 
   return radius2 * box_side * box_side;
-- 
GitLab