def testDivInt(self): S = RPNCalculator() S.push(8) S.push(4) S.divide() # print(S) self.assertTrue(str(S) == '[2*]' or str(S) =='[2.0*]')
def testPushOneBadType(self): S = RPNCalculator() try: S.push('5') self.assertTrue(False, 'RPN Calc push of non-number failed to raise exception') except Exception as e: self.assertTrue(isinstance(e, TypeError), 'RPN Calc exception on push of non-number not a TypeError')
def testPushTwoBadType(self): S = RPNCalculator() try: S.push(5) S.push("a") self.assertTrue(False, 'No exception on RPNCalc push of non-numeric') except Exception as e: self.assertTrue(isinstance(e, TypeError), 'RPN Calc exception on push of non-number not a TypeError')
def testBadAdd(self): S = RPNCalculator() try: val = S.evaluate('2 + 3') self.assertTrue(False, 'Evaluate of bad combo failed to raise exception') except Exception as e: if not isinstance(e, ValueError): raise self.fail('RPN eval raised exception that is not ValueError') self.assertTrue(True)
def testPushOneBadType(self): S = RPNCalculator() try: S.push('5') self.assertTrue( False, 'RPN Calc push of non-number failed to raise exception') except Exception as e: self.assertTrue( isinstance(e, TypeError), 'RPN Calc exception on push of non-number not a TypeError')
def testBadAdd(self): S = RPNCalculator() try: val = S.evaluate('2 + 3') self.assertTrue(False, 'Evaluate of bad combo failed to raise exception') except Exception as e: if not isinstance(e, ValueError): raise self.fail( 'RPN eval raised exception that is not ValueError') self.assertTrue(True)
def testPushOne(self): S = RPNCalculator() S.push(5) self.assertEqual(str(S), '[5*]') S = RPNCalculator() S.push(7.5) self.assertEqual(str(S), '[7.5*]')
def testAddThree(self): S = RPNCalculator() S.push(5) S.push(3) S.push(7) S.add() S.add() self.assertEqual(str(S), '[15*]')
def testEvalAdd(self): S = RPNCalculator() val = S.evaluate('3 5 +') self.assertEqual(val, 8) self.assertEqual(str(S), '[8*]') S = RPNCalculator() val = S.evaluate('3 5 + 2 +') self.assertEqual(val, 10) self.assertEqual(str(S), '[10*]') S = RPNCalculator() val = S.evaluate('2 3 5 + +') self.assertEqual(val, 10) self.assertEqual(str(S), '[10*]')
def testSimpleEval(self): S = RPNCalculator() val = S.evaluate('3') self.assertEqual(val, 3) self.assertEqual(str(S), '[3*]') S = RPNCalculator() val = S.evaluate('3 5') self.assertEqual(val, 5) self.assertEqual(str(S), '[5*, 3]') S = RPNCalculator() val = S.evaluate('3 5 7') self.assertEqual(val, 7) self.assertEqual(str(S), '[7*, 5, 3]')
def testDivInt(self): S = RPNCalculator() S.push(8) S.push(4) S.divide() # print(S) self.assertTrue(str(S) == '[2*]' or str(S) == '[2.0*]')
def testPushTwoBadType(self): S = RPNCalculator() try: S.push(5) S.push("a") self.assertTrue(False, 'No exception on RPNCalc push of non-numeric') except Exception as e: self.assertTrue( isinstance(e, TypeError), 'RPN Calc exception on push of non-number not a TypeError')
def testEmptyConstructor(self): S = RPNCalculator() self.assertEqual(str(S), '[]')
def testAddFloat(self): S = RPNCalculator() S.push(5.5) S.push(3.75) S.add() self.assertEqual(str(S), '[9.25*]')
def testSubInt(self): S = RPNCalculator() S.push(56) S.push(88) S.subtract() self.assertEqual(str(S), '[-32*]')
def testMulInt(self): S = RPNCalculator() S.push(5) S.push(3) S.multiply() self.assertEqual(str(S), '[15*]')
def testAddInt(self): S = RPNCalculator() S.push(5) S.push(3) S.add() self.assertEqual(str(S), '[8*]')
def testPushTwo(self): S = RPNCalculator() S.push(5) S.push(3) self.assertEqual(str(S), '[3*, 5]')
def testSimpleEvalWhitespace(self): S = RPNCalculator() val = S.evaluate(' 3') self.assertEqual(val, 3) self.assertEqual(str(S), '[3*]') S = RPNCalculator() val = S.evaluate('3 ') self.assertEqual(val, 3) self.assertEqual(str(S), '[3*]') S = RPNCalculator() val = S.evaluate(' 3 ') self.assertEqual(val, 3) self.assertEqual(str(S), '[3*]') S = RPNCalculator() val = S.evaluate('3\t5') self.assertEqual(val, 5) self.assertEqual(str(S), '[5*, 3]') S = RPNCalculator() val = S.evaluate('3 5') self.assertEqual(val, 5) self.assertEqual(str(S), '[5*, 3]') S = RPNCalculator() val = S.evaluate('3\t\t5') self.assertEqual(val, 5) self.assertEqual(str(S), '[5*, 3]')
def testEvalExample3(self): S = RPNCalculator() val = S.evaluate('3 5 + 7 * 8 11 * -') self.assertEqual(val, -32) self.assertEqual(str(S), '[-32*]')
class RPNCalculatorTest(unittest.TestCase): calc = None def setUp(self): self.calc = RPNCalculator() def test_add2(self): self.calc.input_work("1 2 +") self.assertEqual(self.calc.get_result(), 3) def test_multiple2(self): self.calc.input_work("3 2 *") self.assertEqual(self.calc.get_result(), 6) def test_minus2(self): self.calc.input_work("1.5 2.3 -") #self.assertEqual(round(self.calc.get_result(), 2), -0.8) self.assertAlmostEqual(self.calc.get_result(), -0.8) def test_div2(self): self.calc.input_work("10 3 /") #self.assertEqual(round(self.calc.get_result(), 2), 3.33) #use assertalmostequal method to avoid using round() func when doing calculation with float self.assertAlmostEqual(self.calc.get_result(), 3.33, places=2) def test_valuerror(self): self.calc.input_work("1 a +") self.assertEqual(self.calc.get_result(), "Cannot convert input to number.") def test_indexerror(self): self.calc.input_work("1 2 + *") self.assertEqual(self.calc.get_result(), "Math Error!") def test_add_minus_mul_div(self): self.calc.input_work(" 1 2 + 6 * 2 / 1 - ") #self.assertEqual(round(self.calc.get_result(), 2), 8) self.assertEqual(self.calc.get_result(), 8) def test_sin_number(self): self.calc.input_work("30 sin") #self.assertEqual(round(self.calc.get_result(), 2), -0.99) #using assertalmostequal we can use either places (how mang digits) or delta (diff between two elements) self.assertAlmostEqual(self.calc.get_result(), -0.99, msg="check sin() function in RNPCalculator", delta=0.01) @nottest def test_sin_degree(self): self.calc.input_work("30 d sin") self.assertEqual(round(self.calc.get_result(), 2), 0.5) #demo for how to use skip decorator to skip function not working for windows platform #(skip can be used for any methods in the test and even for the test class) @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_windows_support(self): self.assertFalse(False) @unittest.skipIf(sys.platform.startswith("win"), "cannot run on Windows") def test_not_windows_support(self): self.assertTrue(True)
def setUp(self): self.calc = RPNCalculator()