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 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 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 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 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 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 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 testAddInt(self):
     S = RPNCalculator()
     S.push(5)
     S.push(3)
     S.add()
     self.assertEqual(str(S), '[8*]')
 def testMulInt(self):
     S = RPNCalculator()
     S.push(5)
     S.push(3)
     S.multiply()
     self.assertEqual(str(S), '[15*]')
 def testEvalExample3(self):
     S = RPNCalculator()
     val = S.evaluate('3 5 + 7 * 8 11 * -')
     self.assertEqual(val, -32)
     self.assertEqual(str(S), '[-32*]')
 def testSubInt(self):
     S = RPNCalculator()
     S.push(56)
     S.push(88)
     S.subtract()
     self.assertEqual(str(S), '[-32*]')
    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]')
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 testEvalExample3(self):
     S = RPNCalculator()
     val = S.evaluate('3 5 + 7 * 8 11 * -')
     self.assertEqual(val, -32)
     self.assertEqual(str(S), '[-32*]')
 def testPushTwo(self):
     S = RPNCalculator()
     S.push(5)
     S.push(3)
     self.assertEqual(str(S), '[3*, 5]')
	def setUp(self):
		self.calc = RPNCalculator()
 def testAddFloat(self):
     S = RPNCalculator()
     S.push(5.5)
     S.push(3.75)
     S.add()
     self.assertEqual(str(S), '[9.25*]')