Changing pya.CplxTrans.angle test from assertEqual to assertAlmostEqual

Rationale:
pya.CplxTrans.angle is computed by doing atan2(m_sin, m_cos), but the algorithm used both in C and python for sin, cos and atan2 are not as precise as IEEE's float.

In python, for example, this happens:

``` python
>>> from math import pi, cos, sin, atan2
>>> atan2(sin(45*pi/180), cos(45*pi/180)) * 180 / pi == 45
False
>>> atan2(sin(45*pi/180), cos(45*pi/180)) * 180 / pi, 45
(44.99999999999999, 45)
```
This commit is contained in:
Thomas Ferreira de Lima 2018-09-22 15:15:33 -04:00
parent 2236a7662d
commit 214662997c
No known key found for this signature in database
GPG Key ID: 43E98870EAA0A86E
1 changed files with 7 additions and 7 deletions

View File

@ -150,7 +150,7 @@ class DBTransTests(unittest.TestCase):
self.assertEqual( c.is_mirror(), True )
self.assertEqual( c.rot(), pya.DCplxTrans.M135.rot() )
self.assertEqual( str(c.s_trans()), "m135 0,0" )
self.assertEqual( c.angle, 270 )
self.assertAlmostEqual( c.angle, 270 )
self.assertEqual( str(c.trans( pya.Edge(0, 1, 2, 3) )), "(-1,0;-3,-2)" )
self.assertEqual( str(( c * pya.Edge(0, 1, 2, 3) )), "(-1,0;-3,-2)" )
@ -174,7 +174,7 @@ class DBTransTests(unittest.TestCase):
self.assertEqual( c.is_mirror(), False )
self.assertEqual( c.rot(), pya.DCplxTrans.R0.rot() )
self.assertEqual( str(c.s_trans()), "r0 0,0" )
self.assertEqual( c.angle, 0 )
self.assertAlmostEqual( c.angle, 0 )
c = pya.DCplxTrans( 0.75, 45, True, 2.5, -12.5 )
self.assertEqual( str(c), "m22.5 *0.75 2.5,-12.5" )
@ -185,7 +185,7 @@ class DBTransTests(unittest.TestCase):
self.assertEqual( c.is_mag(), True )
self.assertEqual( c.rot(), pya.DCplxTrans.M0.rot() )
self.assertEqual( str(c.s_trans()), "m0 2.5,-12.5" )
self.assertEqual( c.angle, 45 )
self.assertAlmostEqual( c.angle, 45 )
self.assertEqual( str(c.ctrans( 5 )), "3.75" )
self.assertEqual( str(c.trans( pya.DPoint( 12, 16 ) )), "17.3492424049,-14.6213203436" )
@ -335,7 +335,7 @@ class DBTransTests(unittest.TestCase):
self.assertEqual( c.is_mirror(), True )
self.assertEqual( c.rot(), pya.CplxTrans.M135.rot() )
self.assertEqual( str(c.s_trans()), "m135 0,0" )
self.assertEqual( c.angle, 270 )
self.assertAlmostEqual( c.angle, 270 )
c = pya.CplxTrans.from_dtrans( pya.DCplxTrans.M135 )
self.assertEqual( str(c), "m135 *1 0,0" )
@ -348,7 +348,7 @@ class DBTransTests(unittest.TestCase):
self.assertEqual( c.is_mirror(), False )
self.assertEqual( c.rot(), pya.CplxTrans.R0.rot() )
self.assertEqual( str(c.s_trans()), "r0 0,0" )
self.assertEqual( c.angle, 0 )
self.assertAlmostEqual( c.angle, 0 )
c = pya.CplxTrans( 0.75, 45, True, 2.5, -12.5 )
self.assertEqual( str(c), "m22.5 *0.75 2.5,-12.5" )
@ -360,7 +360,7 @@ class DBTransTests(unittest.TestCase):
self.assertEqual( c.is_mag(), True )
self.assertEqual( c.rot(), pya.CplxTrans.M0.rot() )
self.assertEqual( str(c.s_trans()), "m0 3,-13" )
self.assertEqual( c.angle, 45 )
self.assertAlmostEqual( c.angle, 45 )
self.assertEqual( str(c.ctrans( 5 )), "3.75" )
self.assertEqual( str(c.trans( pya.Point( 12, 16 ) )), "17.3492424049,-14.6213203436" )
@ -517,7 +517,7 @@ class DBTransTests(unittest.TestCase):
self.assertEqual(t1 < t4, True)
self.assertEqual(t4 < t1, False)
# Hash values
# Hash values
def test_5_Trans_Hash(self):
t1 = pya.DTrans( pya.DTrans.M135, pya.DPoint( 17, 5 ))