File: fix-flaky-bridgetest.diff

package info (click to toggle)
libreoffice 4%3A25.8.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,819,392 kB
  • sloc: cpp: 4,379,681; xml: 498,929; java: 257,215; python: 80,923; ansic: 33,824; perl: 30,305; javascript: 19,722; sh: 11,717; makefile: 10,616; cs: 8,865; yacc: 8,549; objc: 2,131; lex: 1,379; asm: 1,231; awk: 996; pascal: 914; csh: 20; sed: 5
file content (38 lines) | stat: -rw-r--r-- 2,157 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Description: Add safer float comparisons to bridgetest equals()
Author: Marcus Tomlinson <marcus.tomlinson@canonical.com>
Bug-Ubuntu: https://launchpad.net/bugs/1832360

--- a/testtools/source/bridgetest/bridgetest.cxx
+++ b/testtools/source/bridgetest/bridgetest.cxx
@@ -124,6 +125,9 @@ public:
 
 static bool equals( const TestElement & rData1, const TestElement & rData2 )
 {
+    const float epsilon_f = 0.00001f;
+    const double epsilon_d = 0.000000000001;
+
     check( rData1.Bool == rData2.Bool, "### bool does not match!" );
     check( rData1.Char == rData2.Char, "### char does not match!" );
     check( rData1.Byte == rData2.Byte, "### byte does not match!" );
@@ -133,8 +137,8 @@ static bool equals( const TestElement & rData1, const TestElement & rData2 )
     check( rData1.ULong == rData2.ULong, "### unsigned long does not match!" );
     check( rData1.Hyper == rData2.Hyper, "### hyper does not match!" );
     check( rData1.UHyper == rData2.UHyper, "### unsigned hyper does not match!" );
-    check( rData1.Float == rData2.Float, "### float does not match!" );
-    check( rData1.Double == rData2.Double, "### double does not match!" );
+    check( fabs( rData1.Float - rData2.Float ) < epsilon_f, "### float does not match!" );
+    check( fabs( rData1.Double - rData2.Double ) < epsilon_d, "### double does not match!" );
     check( rData1.Enum == rData2.Enum, "### enum does not match!" );
     check( rData1.String == rData2.String, "### string does not match!" );
     check( rData1.Byte2 == rData2.Byte2, "### byte2 does not match!" );
@@ -149,8 +153,8 @@ static bool equals( const TestElement & rData1, const TestElement & rData2 )
             rData1.ULong == rData2.ULong &&
             rData1.Hyper == rData2.Hyper &&
             rData1.UHyper == rData2.UHyper &&
-            rData1.Float == rData2.Float &&
-            rData1.Double == rData2.Double &&
+            fabs( rData1.Float - rData2.Float ) < epsilon_f &&
+            fabs( rData1.Double - rData2.Double ) < epsilon_d &&
             rData1.Enum == rData2.Enum &&
             rData1.String == rData2.String &&
             rData1.Byte2 == rData2.Byte2 &&