Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 50 additions & 30 deletions calculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,15 @@ def __init__(self):
def err(self):
self.error = True

def eval_function(self, x: str) -> float:
def eval_function(self, x: str):
"""
evaluates x to return a result
"""
return eval(x)
try:
result = eval(x)
return result
except:
return "Err"



Expand Down Expand Up @@ -103,18 +107,18 @@ def square_root(self, x):
return math.sqrt(x)


def inv(self, x):
def invert(self, x):
"""
INVERSES A NUMBER AND RETURNS RESULT
:param x:
:return:
"""
try:
result = 1/x
return result
except:
self.err()
return "Err"
print(1 / x)


def deg_rad_swap(self):
Expand All @@ -130,69 +134,85 @@ def sin(self, x):
:param x:
:return:
"""
if self.degrees:
x = math.radians(x)
return math.sin(x)
try:
if self.degrees:
x = math.radians(x)
return math.sin(x)
except:
return "Err"

def cosine(self, x):
"""
FINDS COSINE OF NUMBER AND RETURNS RESULT
:param x:
:return:
"""
if self.degrees:
x = math.degrees(math.cos(x))
else:
try:
if self.degrees:
x = math.radians(x)
x = math.cos(x)
return x
return x
except:
return "Err"

def tangent(self, x):
"""
FINDS TANGENT OF NUMBER AND RETURNS RESULT
:param x:
:return:
"""
if self.degrees:
x = math.degrees(math.tan(x))
else:
try:
if self.degrees:
x = math.radians(x)
x = math.tan(x)
return x
return x
except:
return "Err"

def inverse_sine(self, x):
"""
FINDS INVERSE SINE OF NUMBER AND RETURNS RESULT
:param x:
:return:
"""
if self.degrees:
x = math.degrees(math.asin(x))
else:
x = math.asin(x)
return x
try:
if self.degrees:
x = math.degrees(math.asin(x))
else:
x = math.asin(x)
return x
except:
return "Err"

def inverse_cosine(self, x):
"""
FINDS INVERSE COSINE OF NUMBER AND RETURNS RESULT
:param x:
:return:
"""
if self.degrees:
x = math.degrees(math.acos(x))
else:
x = math.acos(x)
return x
try:
if self.degrees:
x = math.degrees(math.acos(x))
else:
x = math.acos(x)
return x
except:
return "Err"

def inverse_tangent(self, x):
"""
FINDS INVERSE TANGENT OF NUMBER AND RETURNS RESULT
:param x:
:return:
"""
if self.degrees:
x = math.degrees(math.atan(x))
else:
x = math.atan(x)
return x
try:
if self.degrees:
x = math.degrees(math.atan(x))
else:
x = math.atan(x)
return x
except:
return "Err"

##SECONDARY FORMULAS

Expand Down
2 changes: 1 addition & 1 deletion main_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def screen_options():
print("Inverse")
print("Enter the number: ")
x = enter_num()
calc.result = calc.inv(x)
calc.result = calc.invert(x)
return calc.result

##TRIG FUNCTIONS
Expand Down
108 changes: 78 additions & 30 deletions test_calculator.py
Original file line number Diff line number Diff line change
@@ -1,55 +1,63 @@
import unittest
import math
from calculator import Calculator



def runTest(self, prompt_str, expected_out):
with patch('builtins.input', return_value=prompt_str), patch('sys.stdout', new=StringIO()) as fake_out:
answer()
self.assertEqual(enter_num(), expected_out)


class TestStringMethods(unittest.TestCase):

def test_add(self):
c = Calculator()
self.assertEqual(c.add(3, 4), 7)
self.assertEqual(c.add(-3,-4), -7)
self.assertTrue(c.add(3,-4), -1)
self.assertEqual(c.add(-3, -4), -7)
self.assertTrue(c.add(3, -4), -1)

def test_eval_function(self):
c = Calculator()
self.assertEqual(c.eval_function("qw+2"), "Err")
self.assertEqual(c.eval_function("1 + 2"), 3)

def test_subtract(self):
c = Calculator()
self.assertEqual(c.subtract(3, 4), -1)
self.assertEqual(c.subtract(-3,-4), 1)
self.assertTrue(c.subtract(3,-4), 7)
self.assertEqual(c.subtract(-3, -4), 1)
self.assertTrue(c.subtract(3, -4), 7)

def test_multiply(self):
c = Calculator()
self.assertEqual(c.multiply(3, 4), 12)
self.assertEqual(c.multiply(-3,-4), 12)
self.assertTrue(c.multiply(3,-4), -12)
self.assertEqual(c.multiply(-3, -4), 12)
self.assertTrue(c.multiply(3, -4), -12)

def test_divide(self):
c = Calculator()
self.assertEqual(c.divide(3, 4), .75)
self.assertEqual(c.divide(-3,-4), .75)
self.assertEqual(c.divide(3,-4), -.75)
self.assertEqual(c.divide(3,0),"Err")
self.assertEqual(c.divide(-3, -4), .75)
self.assertEqual(c.divide(3, -4), -.75)
self.assertEqual(c.divide(3, 0), "Err")

def test_square(self):
c = Calculator()
self.assertEqual(c.square(3), 9)
self.assertEqual(c.square(-4), 16)
self.assertEqual(c.square(0), 0)

def test_exp(self):
c = Calculator()
self.assertEqual(c.exp(3, 4), 81)
self.assertEqual(c.exp(3, -4), (1/3)*(1/3)*(1/3)*(1/3))
self.assertEqual(c.exp(-3, -4), (-(1/3))*(-(1/3))*(-(1/3))*(-(1/3)))
self.assertEqual(c.exp(3, -4), (1 / 3) * (1 / 3) * (1 / 3) * (1 / 3))
self.assertEqual(c.exp(-3, -4), (-(1 / 3)) * (-(1 / 3)) * (-(1 / 3)) * (-(1 / 3)))
self.assertEqual(c.exp(0, 0), 1)

def test_square_root(self):
c = Calculator()
self.assertEqual(c.square_root(-2), "Err")
self.assertEqual(c.square_root(9), 3)
self.assertEqual(c.square_root(0),0)
self.assertEqual(c.square_root(0), 0)

# def test_invert(self):
# c = Calculator()
# self.assertEqual(c.invert(2), 0.2)
# # self.assertEqual(c.inv(0),"Err")

def test_add2(self):
c = Calculator()
Expand All @@ -67,25 +75,65 @@ def test_divide2(self):
c = Calculator()
self.assertEqual(c.add(5, 8), 13)

def test_inv(self):
def test_invert(self):
c = Calculator()
self.assertEqual(c.inv(5), .2)
self.assertEqual(c.inv(0), "Err")
self.assertEqual(c.inv(-5), -.2)
self.assertEqual(c.invert(5), .2)
self.assertEqual(c.invert(0), "Err")
self.assertEqual(c.invert(-5), -.2)

def test_sine(self):
pass
def test_sin(self):
c = Calculator()
c.degrees = False
half_pi = .5 * math.pi
self.assertEqual(c.sin(half_pi),1)
self.assertEqual(c.sin("sdf"),"Err")
c.degrees = True
self.assertEqual(c.sin(90), 1)

def test_cosine(self):
pass
c = Calculator()
c.degrees = False
half_pi = .5 * math.pi
self.assertAlmostEqual(c.cosine(half_pi),0)
self.assertEqual(c.cosine("sdf"),"Err")
c.degrees = True
self.assertAlmostEqual(c.cosine(90), 0)

def test_tangent(self):
pass
c = Calculator()
c.degrees = False
quarter_pi = .25 * math.pi
self.assertAlmostEqual(c.tangent(quarter_pi),1)
self.assertEqual(c.tangent("sdf"),"Err")
c.degrees = True
self.assertAlmostEqual(c.tangent(45), 1)

def test_invsine(self):
pass


c = Calculator()
c.degrees = False
half_pi = .5 * math.pi
self.assertEqual(c.inverse_sine(1),half_pi)
self.assertEqual(c.inverse_sine("sdfsdf"),"Err")
c.degrees = True
self.assertEqual(c.inverse_sine(1),90)

def test_inverse_cosine(self):
c = Calculator()
c.degrees = False
half_pi = .5 * math.pi
self.assertEqual(c.inverse_cosine(0),half_pi)
self.assertEqual(c.inverse_cosine("sdfsdf"),"Err")
c.degrees = True
self.assertEqual(c.inverse_cosine(0),90)

def test_inverse_tangent(self):
c = Calculator()
c.degrees = False
quarter_pi = .25 * math.pi
self.assertEqual(c.inverse_tangent(1),quarter_pi)
self.assertEqual(c.inverse_tangent("sdfsdf"),"Err")
c.degrees = True
self.assertEqual(c.inverse_tangent(1),45)


if __name__ == '__main__':
Expand Down