]> granicus.if.org Git - procps-ng/commitdiff
tests: Dont compare floats with ==
authorCraig Small <csmall@dropbear.xyz>
Wed, 1 Mar 2023 06:20:42 +0000 (17:20 +1100)
committerCraig Small <csmall@dropbear.xyz>
Wed, 1 Mar 2023 06:20:42 +0000 (17:20 +1100)
Comparing floats with == is bad and I should feel bad I did this.
The problem is if something is close to, but not quite the exact
same fails tests.

I have used an epsilon of 1 because we don't care about accuracy,
just that the function works well enough.

References:
 issue procps-ng/procps#271
 https://how-to.fandom.com/wiki/Howto_compare_floating_point_numbers_in_the_C_programming_language

Signed-off-by: Craig Small <csmall@dropbear.xyz>
NEWS
src/tests/test_strtod_nol.c

diff --git a/NEWS b/NEWS
index 4f11334a97985efc0566fea52d01adfab94bc905..bc293a3f48a89ad2685e9661b34fd28fc8b034f7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+procps-ng-NEXT
+---------------
+  * tests: dont compare floats with ==                     issue #271
+
 procps-ng-4.0.3
 ---------------
   * library
index 0be798c252a6ad1537fce2c5d7a5a9155db66749..8e5c5245f419ff50ce3caf06a1e4c2d7ecb7dc05 100644 (file)
@@ -1,6 +1,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <math.h>
 #include "strutils.h"
 
 struct strtod_tests {
@@ -25,6 +26,11 @@ struct strtod_tests tests[] = {
     {NULL, 0.0}
 };
 
+#define EPSILON 1.0  // Really not trying for precision here
+int dequal(const double d1, const double d2)
+{
+    return fabs(d1-d2) < EPSILON;
+}
 
 
 int main(int argc, char *argv[])