diff --git a/249053812/test/whitebox/loop_testing/break_loop_test.py b/249053812/test/whitebox/loop_testing/break_loop_test.py new file mode 100644 index 00000000..77c48eb5 --- /dev/null +++ b/249053812/test/whitebox/loop_testing/break_loop_test.py @@ -0,0 +1,48 @@ +import unittest + +from src.lexer import Lexer +from src.parser import Parser +from src.evaluator import evaluate + + +def evaluate_expr(program: str): + expressions = Parser(Lexer(program)).run() + return evaluate(expressions) + + +class TestBreakLoopTesting(unittest.TestCase): + # Case 1: Zero iterations + def test_break_zero_iterations(self): + program = """ + for(let i = 0; i < 0; i = i + 1) { + break; + } + i; + """ + self.assertEqual(evaluate_expr(program), 0) + + # Case 2: One iteration + def test_break_one_iteration(self): + program = """ + for(let i = 0; i < 5; i = i + 1) { + break; + } + i; + """ + self.assertEqual(evaluate_expr(program), 0) + + # Case 3: Multiple iterations + def test_break_multiple_iterations(self): + program = """ + for(let i = 0; i < 10; i = i + 1) { + if (i == 3) { + break; + } + } + i; + """ + self.assertEqual(evaluate_expr(program), 3) + + +if __name__ == "__main__": + unittest.main() diff --git a/249053812/test/whitebox/loop_testing/continue_loop_test.py b/249053812/test/whitebox/loop_testing/continue_loop_test.py new file mode 100644 index 00000000..a6fcba29 --- /dev/null +++ b/249053812/test/whitebox/loop_testing/continue_loop_test.py @@ -0,0 +1,54 @@ +import unittest + +from src.lexer import Lexer +from src.parser import Parser +from src.evaluator import evaluate + + +def evaluate_expr(program: str): + expressions = Parser(Lexer(program)).run() + return evaluate(expressions) + + +class TestContinueLoopTesting(unittest.TestCase): + # Case 1: Zero iterations (continue not executed) + def test_continue_zero_iterations(self): + program = """ + let sum = 0; + for(let i = 0; i < 0; i = i + 1) { + sum = sum + i; + continue; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 0) + + # Case 2: One iteration with continue + def test_continue_one_iteration(self): + program = """ + let sum = 0; + for(let i = 0; i < 1; i = i + 1) { + sum = sum + i; + continue; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 0) + + # Case 3: Multiple iterations with continue + def test_continue_multiple_iterations(self): + program = """ + let sum = 0; + for(let i = 0; i < 5; i = i + 1) { + if (i == 2) { + continue; + } + sum = sum + i; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 0 + 1 + 3 + 4) # 8 + + +if __name__ == "__main__": + unittest.main() diff --git a/249053812/test/whitebox/loop_testing/for_loop_test.py b/249053812/test/whitebox/loop_testing/for_loop_test.py new file mode 100644 index 00000000..4dc560a9 --- /dev/null +++ b/249053812/test/whitebox/loop_testing/for_loop_test.py @@ -0,0 +1,49 @@ +import unittest + +from src.lexer import Lexer +from src.parser import Parser +from src.evaluator import evaluate + + +def evaluate_expr(program: str): + expressions = Parser(Lexer(program)).run() + return evaluate(expressions) + + +class TestForLoopTesting(unittest.TestCase): + # Case 1: Zero iterations + def test_for_zero_iterations(self): + program = """ + let sum = 0; + for(let i = 0; i < 0; i = i + 1) { + sum = sum + i; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 0) + + # Case 2: One iteration + def test_for_one_iteration(self): + program = """ + let sum = 0; + for(let i = 0; i < 1; i = i + 1) { + sum = sum + i; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 0) + + # Case 3: Multiple iterations + def test_for_multiple_iterations(self): + program = """ + let sum = 0; + for(let i = 0; i < 5; i = i + 1) { + sum = sum + i; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 10) # 0+1+2+3+4=10 + + +if __name__ == "__main__": + unittest.main() diff --git a/249053812/test/whitebox/loop_testing/while_loop_test.py b/249053812/test/whitebox/loop_testing/while_loop_test.py new file mode 100644 index 00000000..5bcb6ee5 --- /dev/null +++ b/249053812/test/whitebox/loop_testing/while_loop_test.py @@ -0,0 +1,55 @@ +import unittest + +from src.lexer import Lexer +from src.parser import Parser +from src.evaluator import evaluate + + +def evaluate_expr(program: str): + expressions = Parser(Lexer(program)).run() + return evaluate(expressions) + + +class TestWhileLoopTesting(unittest.TestCase): + # Case 1: Zero iterations + def test_while_zero_iterations(self): + program = """ + let sum = 0; + let i = 0; + while(i < 0) { + sum = sum + i; + i = i + 1; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 0) + + # Case 2: One iteration + def test_while_one_iteration(self): + program = """ + let sum = 0; + let i = 0; + while(i < 1) { + sum = sum + i; + i = i + 1; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 0) + + # Case 3: Multiple iterations + def test_while_multiple_iterations(self): + program = """ + let sum = 0; + let i = 0; + while(i < 5) { + sum = sum + i; + i = i + 1; + } + sum; + """ + self.assertEqual(evaluate_expr(program), 10) # 0+1+2+3+4=10 + + +if __name__ == "__main__": + unittest.main()