aboutsummaryrefslogtreecommitdiffstats
path: root/community/py3-cu2qu/3bd978bf0f011d8c7ee6ff21fb04815d6d80427d.patch
blob: 01cf3f23a264cf6e8f75f86df2a0d226a2087597 (plain) (blame)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Fixes tests on x86; commit from upstream

From 3bd978bf0f011d8c7ee6ff21fb04815d6d80427d Mon Sep 17 00:00:00 2001
From: Cosimo Lupo <clupo@google.com>
Date: Thu, 24 Oct 2019 12:17:34 +0100
Subject: [PATCH] pens_test: compare float coordinates up to 12 decimal
 precision

Fixes #186
---
 tests/pens_test.py |  2 +-
 tests/utils.py     | 16 +++++++++++-----
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/tests/pens_test.py b/tests/pens_test.py
index c861934..18e63a8 100644
--- a/tests/pens_test.py
+++ b/tests/pens_test.py
@@ -39,7 +39,7 @@ def convert_glyph(self, glyph, **kwargs):
     def expect_glyph(self, source, expected):
         converted = self.convert_glyph(source)
         self.assertNotEqual(converted, source)
-        if converted != expected:
+        if not converted.approx(expected):
             print(self.diff(expected, converted))
             self.fail("converted glyph is different from expected")
 
diff --git a/tests/utils.py b/tests/utils.py
index 2706a71..b0d6c11 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -112,7 +112,7 @@ def __ne__(self, other):
         """Return True if 'other' glyph's outline is different from self."""
         return not (self == other)
 
-    def approx(self, other):
+    def approx(self, other, rel_tol=1e-12):
         if hasattr(other, 'outline'):
             outline2 == other.outline
         elif hasattr(other, 'draw'):
@@ -132,7 +132,10 @@ def approx(self, other):
                     if not arg2 or not isinstance(arg2[0], tuple):
                         return False
                     for (x1, y1), (x2, y2) in zip(arg1, arg2):
-                        if not isclose(x1, x2) or not isclose(y1, y2):
+                        if (
+                            not isclose(x1, x2, rel_tol=rel_tol) or
+                            not isclose(y1, y2, rel_tol=rel_tol)
+                        ):
                             return False
                 elif arg1 != arg2:
                     return False
@@ -208,9 +211,12 @@ def _repr_pen_commands(commands):
     for cmd, args, kwargs in commands:
         if args:
             if isinstance(args[0], tuple):
-                # cast float to int if there're no digits after decimal point
-                args = [tuple((int(v) if int(v) == v else v) for v in pt)
-                        for pt in args]
+                # cast float to int if there're no digits after decimal point,
+                # and round floats to 12 decimal digits (more than enough)
+                args = [
+                    tuple((int(v) if int(v) == v else round(v, 12)) for v in pt)
+                    for pt in args
+                ]
             args = ", ".join(repr(a) for a in args)
         if kwargs:
             kwargs = ", ".join("%s=%r" % (k, v)