11import unittest
2- from math import radians
2+ import os
3+ from math import radians , pi
34
45from geodepy .angles import (DECAngle , HPAngle , GONAngle , DMSAngle , DDMAngle ,
56 dec2hp , dec2hpa , dec2gon , dec2gona ,
8586
8687
8788class TestConvert (unittest .TestCase ):
89+ def setUp (self ):
90+ self .testData = []
91+ degreeValues = [0 , 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 , 256 ]
92+ dec_places = 13
93+ error = 10 ** - (dec_places - 4 )
94+ for deg in degreeValues :
95+ for min in range (60 ):
96+ for sec in range (60 ):
97+ if sec :
98+ hp_minus = float (f'{ deg :4d} .{ min :02d} { sec - 1 :02d} ' + '9' * (dec_places - 4 ))
99+ dec_minus = deg + (min / 60.0 + (sec - error ) / 3600.0 )
100+ gon_minus = 400.0 / 360.0 * dec_minus
101+ rad_minus = pi / 180.0 * dec_minus
102+ self .testData .append ([hp_minus , dec_minus , gon_minus , rad_minus ])
103+ hp = float (f'{ deg :4d} .{ min :02d} { sec :02d} ' )
104+ hp_plus = float (f'{ deg :4d} .{ min :02d} { sec :02d} ' + '0' * (dec_places - 5 ) + '1' )
105+ dec = deg + (min / 60.0 + sec / 3600.0 )
106+ gon = 400.0 / 360.0 * dec
107+ rad = pi / 180.0 * dec
108+ self .testData .append ([hp , dec , gon , rad ])
109+ dec_plus = deg + (min / 60.0 + (sec + error ) / 3600.0 )
110+ gon_plus = 400.0 / 360.0 * dec_plus
111+ rad_plus = pi / 180.0 * dec_plus
112+ self .testData .append ([hp_plus , dec_plus , gon_plus , rad_plus ])
113+
88114 def test_DECAngle (self ):
89115 # Test DECAngle Methods
90116 for num , ex in enumerate (deca_exs ):
@@ -465,6 +491,10 @@ def test_dec2hp(self):
465491 for num , ex in enumerate (hp_exs ):
466492 self .assertAlmostEqual (ex , dec2hp (dec_exs [num ]), 13 )
467493 self .assertAlmostEqual (- ex , dec2hp (- dec_exs [num ]), 13 )
494+ for check in self .testData :
495+ hp , dec , gon , rad = check
496+ self .assertAlmostEqual (hp , dec2hp (dec ), 13 )
497+ self .assertAlmostEqual (- hp , dec2hp (- dec ), 13 )
468498
469499 def test_dec2hpa (self ):
470500 for num , ex in enumerate (dec_exs ):
@@ -475,6 +505,10 @@ def test_dec2gon(self):
475505 for num , ex in enumerate (dec_exs ):
476506 self .assertAlmostEqual (dec2gon (ex ), gon_exs [num ], 13 )
477507 self .assertAlmostEqual (dec2gon (- ex ), - gon_exs [num ], 13 )
508+ for check in self .testData :
509+ hp , dec , gon , rad = check
510+ self .assertAlmostEqual (gon , dec2gon (dec ), 13 )
511+ self .assertAlmostEqual (- gon , dec2gon (- dec ), 13 )
478512
479513 def test_dec2gona (self ):
480514 for num , ex in enumerate (dec_exs ):
@@ -495,6 +529,13 @@ def test_hp2dec(self):
495529 for num , ex in enumerate (dec_exs ):
496530 self .assertAlmostEqual (ex , hp2dec (hp_exs [num ]), 13 )
497531 self .assertAlmostEqual (- ex , hp2dec (- hp_exs [num ]), 13 )
532+ for check in self .testData :
533+ hp , dec , gon , rad = check
534+ self .assertAlmostEqual (dec , hp2dec (hp ), 13 )
535+ self .assertAlmostEqual (- dec , hp2dec (- hp ), 13 )
536+
537+ self .assertAlmostEqual (0 , hp2dec (0 ), 13 )
538+ self .assertAlmostEqual (258 , hp2dec (258 ), 13 )
498539 self .assertAlmostEqual (hp2dec (hp_exs [0 ]) + hp2dec (hp_exs [1 ]),
499540 dec_exs [0 ] + dec_exs [1 ], 13 )
500541 # Test that invalid minutes and seconds components raise errors
@@ -523,6 +564,10 @@ def test_hp2gon(self):
523564 for num , ex in enumerate (hp_exs ):
524565 self .assertAlmostEqual (hp2gon (ex ), gon_exs [num ], 13 )
525566 self .assertAlmostEqual (hp2gon (- ex ), - gon_exs [num ], 13 )
567+ for check in self .testData :
568+ hp , dec , gon , rad = check
569+ self .assertAlmostEqual (gon , hp2gon (hp ), 13 )
570+ self .assertAlmostEqual (- gon , hp2gon (- hp ), 13 )
526571
527572 def test_hp2gona (self ):
528573 for num , ex in enumerate (hp_exs ):
@@ -531,8 +576,12 @@ def test_hp2gona(self):
531576
532577 def test_hp2rad (self ):
533578 for num , ex in enumerate (hp_exs ):
534- self .assertEqual (hp2rad (ex ), rad_exs [num ])
535- self .assertEqual (hp2rad (- ex ), - rad_exs [num ])
579+ self .assertAlmostEqual (hp2rad (ex ), rad_exs [num ], 15 )
580+ self .assertAlmostEqual (hp2rad (- ex ), - rad_exs [num ], 15 )
581+ for check in self .testData :
582+ hp , dec , gon , rad = check
583+ self .assertAlmostEqual (rad , hp2rad (hp ), 15 )
584+ self .assertAlmostEqual (- rad , hp2rad (- hp ), 15 )
536585
537586 def test_hp2dms (self ):
538587 self .assertEqual (dms_ex .degree , hp2dms (hp_ex ).degree )
@@ -552,6 +601,10 @@ def test_gon2dec(self):
552601 for num , ex in enumerate (gon_exs ):
553602 self .assertAlmostEqual (gon2dec (ex ), dec_exs [num ], 14 )
554603 self .assertAlmostEqual (gon2dec (- ex ), - dec_exs [num ], 14 )
604+ for check in self .testData :
605+ hp , dec , gon , rad = check
606+ self .assertAlmostEqual (dec , gon2dec (gon ), delta = 5.8e-14 )
607+ self .assertAlmostEqual (- dec , gon2dec (- gon ), delta = 5.8e-14 )
555608
556609 def test_gon2deca (self ):
557610 for num , ex in enumerate (gon_exs ):
@@ -562,6 +615,10 @@ def test_gon2hp(self):
562615 for num , ex in enumerate (gon_exs ):
563616 self .assertEqual (gon2hp (ex ), hp_exs [num ])
564617 self .assertEqual (gon2hp (- ex ), - hp_exs [num ])
618+ for check in self .testData :
619+ hp , dec , gon , rad = check
620+ self .assertAlmostEqual (hp , gon2hp (gon ), 13 )
621+ self .assertAlmostEqual (- hp , gon2hp (- gon ), 13 )
565622
566623 def test_gon2hpa (self ):
567624 for num , ex in enumerate (gon_exs ):
@@ -572,6 +629,10 @@ def test_gon2rad(self):
572629 for num , ex in enumerate (gon_exs ):
573630 self .assertAlmostEqual (gon2rad (ex ), rad_exs [num ], 15 )
574631 self .assertAlmostEqual (gon2rad (- ex ), - rad_exs [num ], 15 )
632+ for check in self .testData :
633+ hp , dec , gon , rad = check
634+ self .assertAlmostEqual (rad , gon2rad (gon ), 13 )
635+ self .assertAlmostEqual (- rad , gon2rad (- gon ), 13 )
575636
576637 def test_gon2dms (self ):
577638 for num , ex in enumerate (gon_exs ):
0 commit comments