From 74558caac9000b936ed6fd3e44e78739dd73852f Mon Sep 17 00:00:00 2001 From: Vatsal Chaudhari Date: Fri, 2 Jan 2026 23:38:09 +0000 Subject: [PATCH 1/2] test(loop-test): perform loop testing --- .../whitebox/loop_testing/break_loop_test.py | 48 ++++++++++++++++ .../loop_testing/continue_loop_test.py | 54 ++++++++++++++++++ .../whitebox/loop_testing/for_loop_test.py | 49 +++++++++++++++++ .../whitebox/loop_testing/while_loop_test.py | 55 +++++++++++++++++++ 4 files changed, 206 insertions(+) create mode 100644 249053812/test/whitebox/loop_testing/break_loop_test.py create mode 100644 249053812/test/whitebox/loop_testing/continue_loop_test.py create mode 100644 249053812/test/whitebox/loop_testing/for_loop_test.py create mode 100644 249053812/test/whitebox/loop_testing/while_loop_test.py 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..40764af9 --- /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() \ No newline at end of file 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..e048da8e --- /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() \ No newline at end of file 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..1fdbd272 --- /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() \ No newline at end of file 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..9090c6a1 --- /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() \ No newline at end of file From ba78b804ba3315232f071dce9985cef3f97d4ac9 Mon Sep 17 00:00:00 2001 From: Vatsal Chaudhari Date: Fri, 2 Jan 2026 23:42:21 +0000 Subject: [PATCH 2/2] fix: formatting --- 249053812/test/whitebox/loop_testing/break_loop_test.py | 2 +- 249053812/test/whitebox/loop_testing/continue_loop_test.py | 2 +- 249053812/test/whitebox/loop_testing/for_loop_test.py | 2 +- 249053812/test/whitebox/loop_testing/while_loop_test.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/249053812/test/whitebox/loop_testing/break_loop_test.py b/249053812/test/whitebox/loop_testing/break_loop_test.py index 40764af9..77c48eb5 100644 --- a/249053812/test/whitebox/loop_testing/break_loop_test.py +++ b/249053812/test/whitebox/loop_testing/break_loop_test.py @@ -45,4 +45,4 @@ def test_break_multiple_iterations(self): if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() diff --git a/249053812/test/whitebox/loop_testing/continue_loop_test.py b/249053812/test/whitebox/loop_testing/continue_loop_test.py index e048da8e..a6fcba29 100644 --- a/249053812/test/whitebox/loop_testing/continue_loop_test.py +++ b/249053812/test/whitebox/loop_testing/continue_loop_test.py @@ -51,4 +51,4 @@ def test_continue_multiple_iterations(self): if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() diff --git a/249053812/test/whitebox/loop_testing/for_loop_test.py b/249053812/test/whitebox/loop_testing/for_loop_test.py index 1fdbd272..4dc560a9 100644 --- a/249053812/test/whitebox/loop_testing/for_loop_test.py +++ b/249053812/test/whitebox/loop_testing/for_loop_test.py @@ -46,4 +46,4 @@ def test_for_multiple_iterations(self): if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() diff --git a/249053812/test/whitebox/loop_testing/while_loop_test.py b/249053812/test/whitebox/loop_testing/while_loop_test.py index 9090c6a1..5bcb6ee5 100644 --- a/249053812/test/whitebox/loop_testing/while_loop_test.py +++ b/249053812/test/whitebox/loop_testing/while_loop_test.py @@ -52,4 +52,4 @@ def test_while_multiple_iterations(self): if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main()