Created
November 19, 2022 00:57
-
-
Save machkouroke/96271cbb0973d81117437ca7eb05c63f to your computer and use it in GitHub Desktop.
Test For scala Calculator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.scalatest.funsuite.AnyFunSuite | |
class MainTest extends AnyFunSuite : | |
private val UNKNOWN_VARIABLE = "Unknown variable" | |
private val INVALID_IDENTIFIER = "Invalid identifier" | |
private val INVALID_ASSIGNMENT = "Invalid assignment" | |
test("Simple Operation") { | |
assert(Main.evaluator("4 + 4") == "8") | |
assert(Main.evaluator("+4") == "4") | |
assert(Main.evaluator("-5") == "-5") | |
assert(Main.evaluator("") == "") | |
assert(Main.evaluator("8 + 7 - 4") == "11") | |
assert(Main.evaluator("4 ++ 4") == "8") | |
assert(Main.evaluator("10 -- 4") == "14") | |
assert(Main.evaluator("10 --- 4") == "6") | |
} | |
test("Invalid Expression") { | |
assert(Main.evaluator("123+") == "Invalid expression") | |
assert(Main.evaluator("18 22") == "Invalid expression") | |
assert(Main.evaluator("18 22") == "Invalid expression") | |
assert(Main.evaluator("4 * (2 + 3") == "Invalid expression") | |
assert(Main.evaluator("3 *** 5") == "Invalid expression") | |
assert(Main.evaluator("4+3)") == "Invalid expression") | |
} | |
test("Command") { | |
assert(Main.evaluator("/help") == "The program calculates the sum of numbers") | |
assert(Main.evaluator("/exit") == "Bye!") | |
assert(Main.evaluator("/bad") == "Unknown Command") | |
} | |
test("Affectation") { | |
val finalVariable = Map("n" -> 9, "m" -> 4, "a" -> 5, "b" -> 5, "v" -> 7, "count" -> 10, "c" -> 5) | |
Main.variables = Map.empty[String, Int] | |
assert(Main.evaluator("n = 3") == "") | |
assert(Main.evaluator("m=4") == "") | |
assert(Main.evaluator("a = 5") == "") | |
assert(Main.evaluator("b = a") == "") | |
assert(Main.evaluator("v= 7") == "") | |
assert(Main.evaluator("n =9") == "") | |
assert(Main.evaluator("c= a ") == "") | |
assert(Main.evaluator("count = 10") == "") | |
assert(Main.variables == finalVariable) | |
} | |
test("Invalid Affectation") { | |
Main.variables = Map.empty[String, Int] | |
assert(Main.evaluator("b = c") == UNKNOWN_VARIABLE) | |
assert(Main.evaluator("b = c") == UNKNOWN_VARIABLE) | |
assert(Main.evaluator("e") == UNKNOWN_VARIABLE) | |
assert(Main.evaluator("Variable") == UNKNOWN_VARIABLE) | |
assert(Main.evaluator("a1 = 8") == INVALID_IDENTIFIER) | |
assert(Main.evaluator("n1 = a2a") == INVALID_IDENTIFIER) | |
assert(Main.evaluator("n = a2a") == INVALID_ASSIGNMENT) | |
assert(Main.evaluator("a = 7 = 8") == INVALID_ASSIGNMENT) | |
} | |
test("postfixToInfix") { | |
val answer = Map("3 + 2 * 4" -> "3 2 4 * +", | |
"2 * (3 + 4) + 1" -> "2 3 4 + * 1 +", | |
"8 * 3 + 12 * (4 - 2)" -> "8 3 * 12 4 2 - * +", | |
"2 * 2 ^ 3" -> "2 2 3 ^ *") | |
for { | |
key <- answer.keys | |
} { | |
val computer = new Computation(key, Map()) | |
computer.init() | |
val postfix = computer.infixToPostfix(computer.operand) | |
assert(postfix == answer(key).split("\\s+").toList) | |
} | |
} | |
test("postfixToAnswer") { | |
val answer = Map( | |
"8 * 3 + 12 * (4 - 2)" -> "48", | |
"2 * 2 ^ 3" -> "16") | |
for { | |
key <- answer.keys | |
} { | |
val computer = new Computation(key, Map()) | |
computer.init() | |
val postfix = computer.infixToPostfix(computer.operand) | |
val result = computer.eval(postfix) | |
assert(result == answer(key).toInt) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment