Skip to content

Commit

Permalink
Fixed a bug with atan2 and with mathtrig tests. Fixes #9
Browse files Browse the repository at this point in the history
  • Loading branch information
leonelcamara committed Aug 21, 2021
1 parent 82022a1 commit 15ff875
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 14 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## 0.0.15

* Fixed bugs in FLOOR function.
* Fixed bugs in ATAN2

## 0.0.14

Expand Down
6 changes: 4 additions & 2 deletions hotxlfp/formulas/mathtrig.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,12 @@ def ATAN2(x_num, y_num):
x_num = utils.parse_number(x_num)
if isinstance(x_num, error.XLError):
return x_num
y_num = utils.parse_number(x_num)
y_num = utils.parse_number(y_num)
if isinstance(y_num, error.XLError):
return y_num
return math.atan2(x_num, y_num)
if y_num == 0:
return error.DIV_ZERO
return math.atan2(y_num, x_num)


@dispatcher.register_for('ATANH')
Expand Down
30 changes: 18 additions & 12 deletions tests/test_mathtrig.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def test_acoth(self):
def test_sin(self):
p = Parser(debug=True)
ret = p.parse('SIN(PI()/2)')
self.assertTrue(['result'], 1)
self.assertEqual(ret['result'], 1)
self.assertEqual(ret['error'], None)
ret = p.parse('SIN(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -72,7 +72,7 @@ def test_sin(self):
def test_sinh(self):
p = Parser(debug=True)
ret = p.parse('2.868*SINH(0.0342*1.03)')
self.assertTrue(['result'], 0.1010491)
self.assertAlmostEqual(ret['result'], 0.1010491, places=7)
self.assertEqual(ret['error'], None)
ret = p.parse('SINH(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -81,7 +81,7 @@ def test_sinh(self):
def test_asin(self):
p = Parser(debug=True)
ret = p.parse('ASIN(-0.5)')
self.assertTrue(['result'], -0.523598776)
self.assertAlmostEqual(ret['result'], -0.523598776, places=9)
self.assertEqual(ret['error'], None)
ret = p.parse('ASIN(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -90,7 +90,7 @@ def test_asin(self):
def test_asinh(self):
p = Parser(debug=True)
ret = p.parse('ASINH(-2.5)')
self.assertTrue(['result'], -1.647231146)
self.assertAlmostEqual(ret['result'], -1.647231146, places=9)
self.assertEqual(ret['error'], None)
ret = p.parse('ASINH(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -99,7 +99,7 @@ def test_asinh(self):
def test_cos(self):
p = Parser(debug=True)
ret = p.parse('COS(0)')
self.assertTrue(['result'], 1)
self.assertEqual(ret['result'], 1)
self.assertEqual(ret['error'], None)
ret = p.parse('COS(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -108,7 +108,7 @@ def test_cos(self):
def test_cosh(self):
p = Parser(debug=True)
ret = p.parse('COSH(4)')
self.assertTrue(['result'], 27.308233)
self.assertAlmostEqual(ret['result'], 27.308233, places=6)
self.assertEqual(ret['error'], None)
ret = p.parse('COSH(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -129,7 +129,7 @@ def test_cot(self):
def test_tan(self):
p = Parser(debug=True)
ret = p.parse('TAN(45*PI()/180)')
self.assertTrue(['result'], 1)
self.assertAlmostEqual(ret['result'], 1, places=9)
self.assertEqual(ret['error'], None)
ret = p.parse('TAN(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -138,7 +138,7 @@ def test_tan(self):
def test_tanh(self):
p = Parser(debug=True)
ret = p.parse('TANH(0.5)')
self.assertTrue(['result'], 0.462117)
self.assertAlmostEqual(ret['result'], 0.462117, places=6)
self.assertEqual(ret['error'], None)
ret = p.parse('TANH(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -147,7 +147,7 @@ def test_tanh(self):
def test_atan(self):
p = Parser(debug=True)
ret = p.parse('ATAN(1)*180/PI()')
self.assertTrue(['result'], 1)
self.assertEqual(ret['result'], 45)
self.assertEqual(ret['error'], None)
ret = p.parse('ATAN(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -156,13 +156,19 @@ def test_atan(self):
def test_atan2(self):
p = Parser(debug=True)
ret = p.parse('ATAN2(1, 1)')
self.assertTrue(['result'], 0.785398163)
self.assertAlmostEqual(ret['result'], 0.785398163, places=9)
self.assertEqual(ret['error'], None)
ret = p.parse('ATAN2(1, 0.8)')
self.assertAlmostEqual(ret['result'], 0.674740942, places=9)
self.assertEqual(ret['error'], None)
ret = p.parse('ATAN2(0, 0)')
self.assertEqual(ret['result'], None)
self.assertEqual(ret['error'], '#DIV/0!')

def test_atanh(self):
p = Parser(debug=True)
ret = p.parse('ATANH(0.76159416)')
self.assertTrue(['result'], 1.00000001)
self.assertAlmostEqual(ret['result'], 1.00000001, places=9)
self.assertEqual(ret['error'], None)
ret = p.parse('ATANH(1/0)')
self.assertEqual(ret['result'], None)
Expand All @@ -171,7 +177,7 @@ def test_atanh(self):
def test_sqrt(self):
p = Parser(debug=True)
ret = p.parse('SQRT(16)')
self.assertTrue(['result'], 4)
self.assertEqual(ret['result'], 4)
self.assertEqual(ret['error'], None)
ret = p.parse('SQRT(1/0)')
self.assertEqual(ret['result'], None)
Expand Down

0 comments on commit 15ff875

Please sign in to comment.