From f5ea9ecf903360c2860293639d1c6ba7a78b2339 Mon Sep 17 00:00:00 2001 From: adityacp Date: Thu, 2 Jun 2016 14:24:57 +0530 Subject: c,cpp,java evaluators with test cases --- yaksh/evaluator_tests/test_c_cpp_evaluation.py | 262 +++++++++++++++++++++++++ 1 file changed, 262 insertions(+) (limited to 'yaksh/evaluator_tests/test_c_cpp_evaluation.py') diff --git a/yaksh/evaluator_tests/test_c_cpp_evaluation.py b/yaksh/evaluator_tests/test_c_cpp_evaluation.py index 71fb843..7a87d87 100644 --- a/yaksh/evaluator_tests/test_c_cpp_evaluation.py +++ b/yaksh/evaluator_tests/test_c_cpp_evaluation.py @@ -1,7 +1,10 @@ import unittest import os from yaksh.cpp_code_evaluator import CppCodeEvaluator +from yaksh.cpp_stdio_evaluator import CppStdioEvaluator from yaksh.settings import SERVER_TIMEOUT +from textwrap import dedent + class CEvaluationTestCases(unittest.TestCase): def setUp(self): @@ -52,5 +55,264 @@ class CEvaluationTestCases(unittest.TestCase): self.assertFalse(result.get("success")) self.assertEquals(result.get("error"), self.timeout_msg) + +class CStdioEvaluationTestCases(unittest.TestCase): + + def setUp(self): + self.test_case_data = [{'expected_output': '11', 'expected_input': '5\n6'}] + self.timeout_msg = ("Code took more than {0} seconds to run. " + "You probably have an infinite loop in" + " your code.").format(SERVER_TIMEOUT) + + def test_correct_answer(self): + user_answer = dedent(""" + #include + int main(void){ + int a,b; + scanf("%d%d",&a,&b); + printf("%d",a+b); + }""") + get_class = CppStdioEvaluator() + kwargs = {'user_answer': user_answer, + 'test_case_data': self.test_case_data + } + result = get_class.evaluate(**kwargs) + self.assertEquals(result.get('error'), "Correct Answer") + self.assertTrue(result.get('success')) + + def test_array_input(self): + self.test_case_data = [{'expected_output': '561', + 'expected_input': '5,6,1'}] + user_answer = dedent(""" + #include + int main(void){ + int a[3],i; + for(i=0;i<3;i++){ + scanf("%d",&a[i]);} + for(i=0;i<3;i++){ + printf("%d",a[i]);} + }""") + get_class = CppStdioEvaluator() + kwargs = {'user_answer': user_answer, + 'test_case_data': self.test_case_data + } + result = get_class.evaluate(**kwargs) + self.assertEquals(result.get('error'), "Correct Answer") + self.assertTrue(result.get('success')) + + def test_string_input(self): + self.test_case_data = [{'expected_output': 'abc', + 'expected_input': 'abc'}] + user_answer = dedent(""" + #include + int main(void){ + char a[4]; + scanf("%s",a); + printf("%s",a); + }""") + get_class = CppStdioEvaluator() + kwargs = {'user_answer': user_answer, + 'test_case_data': self.test_case_data + } + result = get_class.evaluate(**kwargs) + self.assertEquals(result.get('error'), "Correct Answer") + self.assertTrue(result.get('success')) + + def test_incorrect_answer(self): + user_answer = dedent(""" + #include + int main(void){ + int a=10; + printf("%d",a); + }""") + get_class = CppStdioEvaluator() + kwargs = {'user_answer': user_answer, + 'test_case_data': self.test_case_data + } + result = get_class.evaluate(**kwargs) + self.assertFalse(result.get('success')) + self.assertIn("Incorrect", result.get('error')) + self.assertTrue(result.get('error').splitlines > 1) + + def test_error(self): + user_answer = dedent(""" + #include + int main(void){ + int a=10; + printf("%d",a) + }""") + get_class = CppStdioEvaluator() + kwargs = {'user_answer': user_answer, + 'test_case_data': self.test_case_data + } + result = get_class.evaluate(**kwargs) + self.assertFalse(result.get("success")) + self.assertTrue("Compilation Error" in result.get("error")) + + def test_infinite_loop(self): + user_answer = dedent(""" + #include + int main(void){ + while(0==0){ + printf("abc");} + }""") + get_class = CppStdioEvaluator() + kwargs = {'user_answer': user_answer, + 'test_case_data': self.test_case_data + } + result = get_class.evaluate(**kwargs) + self.assertFalse(result.get("success")) + self.assertEquals(result.get("error"), self.timeout_msg) + + def test_only_stdout(self): + self.test_case_data = [{'expected_output': '11', + 'expected_input': ''}] + user_answer = dedent(""" + #include + int main(void){ + int a=5,b=6; + printf("%d",a+b); + }""") + get_class = CppStdioEvaluator() + kwargs = {'user_answer': user_answer, + 'test_case_data': self.test_case_data + } + result = get_class.evaluate(**kwargs) + self.assertEquals(result.get('error'), "Correct Answer") + self.assertTrue(result.get('success')) + + +class CppStdioEvaluationTestCases(unittest.TestCase): + + def setUp(self): + self.test_case_data = [{'expected_output': '11', 'expected_input': '5\n6'}] + self.timeout_msg = ("Code took more than {0} seconds to run. " + "You probably have an infinite loop in" + " your code.").format(SERVER_TIMEOUT) + + def test_correct_answer(self): + user_answer = dedent(""" + #include + using namespace std; + int main(void){ + int a,b; + cin>>a>>b; + cout< + using namespace std; + int main(void){ + int a[3],i; + for(i=0;i<3;i++){ + cin>>a[i];} + for(i=0;i<3;i++){ + cout< + using namespace std; + int main(void){ + char a[4]; + cin>>a; + cout< + using namespace std; + int main(void){ + int a=10; + cout< 1) + + def test_error(self): + user_answer = dedent(""" + #include + using namespace std; + int main(void){ + int a=10; + cout< + using namespace std; + int main(void){ + while(0==0){ + cout<<"abc";} + }""") + get_class = CppStdioEvaluator() + kwargs = {'user_answer': user_answer, + 'test_case_data': self.test_case_data + } + result = get_class.evaluate(**kwargs) + self.assertFalse(result.get("success")) + self.assertEquals(result.get("error"), self.timeout_msg) + + def test_only_stdout(self): + self.test_case_data = [{'expected_output': '11', + 'expected_input': ''}] + user_answer = dedent(""" + #include + using namespace std; + int main(void){ + int a=5,b=6; + cout< using namespace std; @@ -207,9 +198,9 @@ class CppStdioEvaluationTestCases(unittest.TestCase): self.assertEquals(result.get('error'), "Correct Answer") self.assertTrue(result.get('success')) - def test_array_input(self): + def test_cpp_array_input(self): self.test_case_data = [{'expected_output': '561', - 'expected_input': '5,6,1'}] + 'expected_input': '5\n6\n1'}] user_answer = dedent(""" #include using namespace std; @@ -228,7 +219,7 @@ class CppStdioEvaluationTestCases(unittest.TestCase): self.assertEquals(result.get('error'), "Correct Answer") self.assertTrue(result.get('success')) - def test_string_input(self): + def test_cpp_string_input(self): self.test_case_data = [{'expected_output': 'abc', 'expected_input': 'abc'}] user_answer = dedent(""" @@ -247,7 +238,7 @@ class CppStdioEvaluationTestCases(unittest.TestCase): self.assertEquals(result.get('error'), "Correct Answer") self.assertTrue(result.get('success')) - def test_incorrect_answer(self): + def test_cpp_incorrect_answer(self): user_answer = dedent(""" #include using namespace std; @@ -264,7 +255,7 @@ class CppStdioEvaluationTestCases(unittest.TestCase): self.assertIn("Incorrect", result.get('error')) self.assertTrue(result.get('error').splitlines > 1) - def test_error(self): + def test_cpp_error(self): user_answer = dedent(""" #include using namespace std; @@ -280,7 +271,7 @@ class CppStdioEvaluationTestCases(unittest.TestCase): self.assertFalse(result.get("success")) self.assertTrue("Compilation Error" in result.get("error")) - def test_infinite_loop(self): + def test_cpp_infinite_loop(self): user_answer = dedent(""" #include using namespace std; @@ -296,7 +287,7 @@ class CppStdioEvaluationTestCases(unittest.TestCase): self.assertFalse(result.get("success")) self.assertEquals(result.get("error"), self.timeout_msg) - def test_only_stdout(self): + def test_cpp_only_stdout(self): self.test_case_data = [{'expected_output': '11', 'expected_input': ''}] user_answer = dedent(""" -- cgit From 9411ab221e007a6c3e2901ce34f38f2267288b6e Mon Sep 17 00:00:00 2001 From: adityacp Date: Thu, 28 Jul 2016 00:12:51 +0530 Subject: rebase changes and changed expected input format in cpp tests --- yaksh/evaluator_tests/test_c_cpp_evaluation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'yaksh/evaluator_tests/test_c_cpp_evaluation.py') diff --git a/yaksh/evaluator_tests/test_c_cpp_evaluation.py b/yaksh/evaluator_tests/test_c_cpp_evaluation.py index a2fc51f..ff3cddf 100644 --- a/yaksh/evaluator_tests/test_c_cpp_evaluation.py +++ b/yaksh/evaluator_tests/test_c_cpp_evaluation.py @@ -82,7 +82,7 @@ class CppStdioEvaluationTestCases(unittest.TestCase): def test_array_input(self): self.test_case_data = [{'expected_output': '561', - 'expected_input': '5,6,1'}] + 'expected_input': '5\n6\n1'}] user_answer = dedent(""" #include int main(void){ -- cgit