def test_b_createToken_given_8_expect_return_operand_token(self): expressionList = ["8"] # createToken(listIndex, expressionList, previousToken) tokenCreated = sY.createToken(0, expressionList, None) self.assertEqual(8, tokenCreated.num) self.assertEqual("int", tokenCreated.numType) self.assertEqual("OPERAND_TOKEN", tokenCreated.tokenType)
def test_d_isStacksReadyForOperation_given_1_plus_in_stack_expect_no(self): expressionList = [ "1", "+", "2" ] # The function uses next character to determine affix type operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) token1 = sY.createToken(0, expressionList, None) # pushStack(stack, data) st.pushStack(operandStack, token1) token2 = sY.createToken(1, expressionList, token1) # isStacksReadyForOperation(operandStack, operatorStack, token) self.assertEqual( "NO", sY.isStacksReadyForOperation(operandStack, operatorStack, token2))
def test_b_isNoOfTokensValidForOperation_given_1_operand_and_no_operator_expect_true( self): expressionList = [ "-", "2" ] # The function uses next character to determine affix type operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) token1 = sY.createToken(0, expressionList, None) # pushStack(stack, data) st.pushStack(operandStack, token1) token2 = sY.createToken(1, expressionList, token1) st.pushStack(operatorStack, token2) # isNoOfTokensValidForOperation(operandStack, operatorStack) self.assertEqual( False, sY.isNoOfTokensValidForOperation(operandStack, operatorStack))
def test_c_isStacksReadyForOperation_given_1_plus_minus_3_token_is_minus_expect_same_precedence_but_xready( self): expressionList = [ "1", "+", "-", "3" ] # The function uses next character to determine affix type operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) token1 = sY.createToken(0, expressionList, None) # pushStack(stack, data) st.pushStack(operandStack, token1) token2 = sY.createToken(1, expressionList, token1) st.pushStack(operatorStack, token2) token3 = sY.createToken(2, expressionList, token1) # isStacksReadyForOperation(operandStack, operatorStack, token) self.assertEqual( "SAME_PRECEDENCE_BUT_XREADY", sY.isStacksReadyForOperation(operandStack, operatorStack, token3))
def test_b_calculateAnsAndPushToOperandStack_given_10_divide_2_expect_5_in_operand_stack( self): expressionList = [ "10", "/", "2" ] # The function uses next character to determine affix type operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) token1 = sY.createToken(0, expressionList, None) # pushStack(stack, data) st.pushStack(operandStack, token1) token2 = sY.createToken(1, expressionList, token1) st.pushStack(operatorStack, token2) token3 = sY.createToken(2, expressionList, token2) st.pushStack(operandStack, token3) # calculateAnsAndPushToOperandStack(operandStack, operatorStack) sY.calculateAnsAndPushToOperandStack(operandStack, operatorStack) self.assertEqual(10 / 2, operandStack[0].num)
def test_a_pushTokenToStack_given_operand_1_expect_token_pushed(self): expressionList = ["1"] operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) tokenCreated = sY.createToken(0, expressionList, None) # pushTokenToStack(token, operandStack, operatorStack) sY.pushTokenToStack(tokenCreated, operandStack, operatorStack) self.assertEqual(1, operandStack[0].num) self.assertEqual("int", operandStack[0].numType) self.assertEqual("OPERAND_TOKEN", operandStack[0].tokenType)
def test_a_createToken_given_operand_expect_return_operand_token(self): # createToken(listIndex, expressionList, previousToken) listIndex = 0 expressionList = ["1"] previousToken = None tokenCreated = sY.createToken(listIndex, expressionList, previousToken) # Test for token i self.assertEqual(1, tokenCreated.num) # First token so index is 0 self.assertEqual("int", tokenCreated.numType) self.assertEqual("OPERAND_TOKEN", tokenCreated.tokenType) self.assertEqual(0, tokenCreated.tokenId)
def test_a_isStacksReadyForOperation_given_1_multiply_2_token_is_minus_expect_yes( self): expressionList = [ "1", "*", "2", "-", "3" ] # The function uses next character to determine affix type operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) token1 = sY.createToken(0, expressionList, None) # pushStack(stack, data) st.pushStack(operandStack, token1) token2 = sY.createToken(1, expressionList, token1) st.pushStack(operatorStack, token2) token3 = sY.createToken(2, expressionList, token1) st.pushStack(operandStack, token3) token4 = sY.createToken(3, expressionList, token1) # isStacksReadyForOperation(operandStack, operatorStack, token) self.assertEqual( "YES", sY.isStacksReadyForOperation(operandStack, operatorStack, token4))
def test_d_calculateAndReturnAnsToken_given_10p5_divide_5point1_expect_return_token_with_correct_num__and_correct_token_attributes( self): expressionList = [ "10.5", "/", 5.1 ] # The function uses next character to determine affix type operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) token1 = sY.createToken(0, expressionList, None) # pushStack(stack, data) st.pushStack(operandStack, token1) token2 = sY.createToken(1, expressionList, token1) st.pushStack(operatorStack, token2) token3 = sY.createToken(2, expressionList, token2) st.pushStack(operandStack, token3) # calculateAndReturnAnsToken(operandStack, operatorStack) ansToken = sY.calculateAndReturnAnsToken(operandStack, operatorStack) self.assertEqual(10.5 / 5.1, ansToken.num) self.assertEqual("float", ansToken.numType) self.assertEqual("OPERAND_TOKEN", ansToken.tokenType)
def test_a_calculateAndReturnAnsToken_given_2_plus_100_expect_return_token_with_num_and_correct_token_attributes( self): expressionList = [ "2", "+", "100" ] # The function uses next character to determine affix type operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) token1 = sY.createToken(0, expressionList, None) # pushStack(stack, data) st.pushStack(operandStack, token1) token2 = sY.createToken(1, expressionList, token1) st.pushStack(operatorStack, token2) token3 = sY.createToken(2, expressionList, token2) st.pushStack(operandStack, token3) # calculateAndReturnAnsToken(operandStack, operatorStack) ansToken = sY.calculateAndReturnAnsToken(operandStack, operatorStack) self.assertEqual(2 + 100, ansToken.num) self.assertEqual("int", ansToken.numType) self.assertEqual("OPERAND_TOKEN", ansToken.tokenType)
def test_a_createToken_given_prefix_plus_expect_return_operator_token( self): expressionList = [ "+", "0" ] # The function uses next character to determine affix type # createToken(listIndex, expressionList, previousToken) tokenCreated = sY.createToken(0, expressionList, None) self.assertEqual("+", tokenCreated.symbol) self.assertEqual(DictConstant.RIGHT_TO_LEFT, tokenCreated.associativity) self.assertEqual(DictConstant.STRONG, tokenCreated.precedence) self.assertEqual("PREFIX", tokenCreated.affix)
def test_b_pushTokenToStack_given_operand_open_bracket_expect_token_pushed( self): expressionList = [ "(", "1" ] # The function uses next character to determine affix type operandStack = [] operatorStack = [] # createToken(listIndex, expressionList, previousToken) tokenCreated = sY.createToken(0, expressionList, None) # pushTokenToStack(token, operandStack, operatorStack) sY.pushTokenToStack(tokenCreated, operandStack, operatorStack) self.assertEqual("(", operatorStack[0].symbol) self.assertEqual(DictConstant.LEFT_TO_RIGHT, operatorStack[0].associativity) self.assertEqual(DictConstant.WEAK, operatorStack[0].precedence) self.assertEqual(None, operatorStack[0].affix)