summaryrefslogtreecommitdiff
path: root/yaksh/evaluator_tests/test_c_cpp_evaluation.py
diff options
context:
space:
mode:
authoradityacp2016-12-23 11:41:31 +0530
committeradityacp2016-12-23 11:41:31 +0530
commit30f35a22e14e6e372a760676fddceb0807d22141 (patch)
tree5d06521225f7d4a1288fd88ac8e2498200d83435 /yaksh/evaluator_tests/test_c_cpp_evaluation.py
parent9d4e16cc5024b756d811e353714074d7d6066c2f (diff)
downloadonline_test-30f35a22e14e6e372a760676fddceb0807d22141.tar.gz
online_test-30f35a22e14e6e372a760676fddceb0807d22141.tar.bz2
online_test-30f35a22e14e6e372a760676fddceb0807d22141.zip
Add test cases based on moderator input code
Diffstat (limited to 'yaksh/evaluator_tests/test_c_cpp_evaluation.py')
-rw-r--r--yaksh/evaluator_tests/test_c_cpp_evaluation.py136
1 files changed, 131 insertions, 5 deletions
diff --git a/yaksh/evaluator_tests/test_c_cpp_evaluation.py b/yaksh/evaluator_tests/test_c_cpp_evaluation.py
index dc6fdc9..ac56142 100644
--- a/yaksh/evaluator_tests/test_c_cpp_evaluation.py
+++ b/yaksh/evaluator_tests/test_c_cpp_evaluation.py
@@ -15,10 +15,45 @@ from yaksh.settings import SERVER_TIMEOUT
class CAssertionEvaluationTestCases(unittest.TestCase):
def setUp(self):
- with open('/tmp/test.txt', 'wb') as f:
+ self.f_path = os.path.join(tempfile.gettempdir(), "test.txt")
+ with open(self.f_path, 'wb') as f:
f.write('2'.encode('ascii'))
tmp_in_dir_path = tempfile.mkdtemp()
- self.test_case_data = [{"test_case": "c_cpp_files/main.cpp",
+ self.tc_data = dedent("""
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ extern int add(int, int);
+
+ template <class T>
+
+ void check(T expect, T result)
+ {
+ if (expect == result)
+ {
+ printf("Correct: Expected %d got %d ",expect,result);
+ }
+ else
+ {
+ printf("Incorrect: Expected %d got %d ",expect,result);
+ exit (1);
+ }
+ }
+
+ int main(void)
+ {
+ int result;
+ result = add(0,0);
+ printf("Input submitted to the function: 0, 0");
+ check(0, result);
+ result = add(2,3);
+ printf("Input submitted to the function: 2 3");
+ check(5,result);
+ printf("All Correct");
+ return 0;
+ }
+ """)
+ self.test_case_data = [{"test_case": self.tc_data,
"test_case_type": "standardtestcase",
"weight": 0.0
}]
@@ -29,10 +64,11 @@ class CAssertionEvaluationTestCases(unittest.TestCase):
self.file_paths = None
def tearDown(self):
- os.remove('/tmp/test.txt')
+ os.remove(self.f_path)
shutil.rmtree(self.in_dir)
def test_correct_answer(self):
+ # Given
user_answer = "int add(int a, int b)\n{return a+b;}"
kwargs = {
'metadata': {
@@ -44,13 +80,16 @@ class CAssertionEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
self.assertEqual(result.get('error'), "Correct answer\n")
def test_incorrect_answer(self):
+ # Given
user_answer = "int add(int a, int b)\n{return a-b;}"
kwargs = {
'metadata': {
@@ -62,15 +101,19 @@ class CAssertionEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
lines_of_error = len(result.get('error').splitlines())
+
+ # Then
self.assertFalse(result.get('success'))
self.assertIn("Incorrect:", result.get('error'))
self.assertTrue(lines_of_error > 1)
def test_compilation_error(self):
+ # Given
user_answer = "int add(int a, int b)\n{return a+b}"
kwargs = {
'metadata': {
@@ -82,13 +125,16 @@ class CAssertionEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assertTrue("Compilation Error" in result.get("error"))
def test_infinite_loop(self):
+ # Given
user_answer = "int add(int a, int b)\n{while(1>0){}}"
kwargs = {
'metadata': {
@@ -100,15 +146,45 @@ class CAssertionEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assertEqual(result.get("error"), self.timeout_msg)
def test_file_based_assert(self):
- self.file_paths = [('/tmp/test.txt', False)]
- self.test_case_data = [{"test_case": "c_cpp_files/file_data.c",
+ # Given
+ self.file_paths = [(self.f_path, False)]
+ self.tc_data = dedent("""
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ extern int ans();
+
+ template <class T>
+ void check(T expect,T result)
+ {
+ if (expect == result)
+ {
+ printf("Correct: Expected %d got %d ",expect,result);
+ }
+ else
+ {
+ printf("Incorrect: Expected %d got %d ",expect,result);
+ exit (0);
+ }
+ }
+
+ int main(void)
+ {
+ int result;
+ result = ans();
+ check(50, result);
+ }
+ """)
+ self.test_case_data = [{"test_case": self.tc_data,
"test_case_type": "standardtestcase",
"weight": 0.0
}]
@@ -134,12 +210,15 @@ class CAssertionEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
self.assertEqual(result.get('error'), "Correct answer\n")
+
class CppStdIOEvaluationTestCases(unittest.TestCase):
def setUp(self):
self.test_case_data = [{'expected_output': '11',
@@ -153,7 +232,11 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
" your code.").format(SERVER_TIMEOUT)
self.file_paths = None
+ def tearDown(self):
+ shutil.rmtree(self.in_dir)
+
def test_correct_answer(self):
+ # Given
user_answer = dedent("""
#include<stdio.h>
int main(void){
@@ -171,13 +254,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertEqual(result.get('error'), "Correct answer\n")
self.assertTrue(result.get('success'))
def test_array_input(self):
+ # Given
self.test_case_data = [{'expected_output': '561',
'expected_input': '5\n6\n1',
'weight': 0.0,
@@ -202,13 +288,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertEqual(result.get('error'), "Correct answer\n")
self.assertTrue(result.get('success'))
def test_string_input(self):
+ # Given
self.test_case_data = [{'expected_output': 'abc',
'expected_input': 'abc',
'weight': 0.0,
@@ -231,13 +320,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertEqual(result.get('error'), "Correct answer\n")
self.assertTrue(result.get('success'))
def test_incorrect_answer(self):
+ # Given
user_answer = dedent("""
#include<stdio.h>
int main(void){
@@ -254,15 +346,19 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
lines_of_error = len(result.get('error').splitlines())
+
+ # Then
self.assertFalse(result.get('success'))
self.assertIn("Incorrect", result.get('error'))
self.assertTrue(lines_of_error > 1)
def test_error(self):
+ # Given
user_answer = dedent("""
#include<stdio.h>
int main(void){
@@ -279,13 +375,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assertTrue("Compilation Error" in result.get("error"))
def test_infinite_loop(self):
+ # Given
user_answer = dedent("""
#include<stdio.h>
int main(void){
@@ -302,13 +401,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assertEqual(result.get("error"), self.timeout_msg)
def test_only_stdout(self):
+ # Given
self.test_case_data = [{'expected_output': '11',
'expected_input': '',
'weight': 0.0,
@@ -330,13 +432,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertEqual(result.get('error'), "Correct answer\n")
self.assertTrue(result.get('success'))
def test_cpp_correct_answer(self):
+ # Given
user_answer = dedent("""
#include<iostream>
using namespace std;
@@ -355,13 +460,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertEqual(result.get('error'), "Correct answer\n")
self.assertTrue(result.get('success'))
def test_cpp_array_input(self):
+ # Given
self.test_case_data = [{'expected_output': '561',
'expected_input': '5\n6\n1',
'weight': 0.0,
@@ -387,13 +495,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertEqual(result.get('error'), "Correct answer\n")
self.assertTrue(result.get('success'))
def test_cpp_string_input(self):
+ # Given
self.test_case_data = [{'expected_output': 'abc',
'expected_input': 'abc',
'weight': 0.0,
@@ -417,13 +528,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertEqual(result.get('error'), "Correct answer\n")
self.assertTrue(result.get('success'))
def test_cpp_incorrect_answer(self):
+ # Given
user_answer = dedent("""
#include<iostream>
using namespace std;
@@ -441,15 +555,19 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
lines_of_error = len(result.get('error').splitlines())
+
+ # Then
self.assertFalse(result.get('success'))
self.assertIn("Incorrect", result.get('error'))
self.assertTrue(lines_of_error > 1)
def test_cpp_error(self):
+ # Given
user_answer = dedent("""
#include<iostream>
using namespace std;
@@ -467,13 +585,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assertTrue("Compilation Error" in result.get("error"))
def test_cpp_infinite_loop(self):
+ # Given
user_answer = dedent("""
#include<iostream>
using namespace std;
@@ -491,13 +612,16 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assertEqual(result.get("error"), self.timeout_msg)
def test_cpp_only_stdout(self):
+ # Given
self.test_case_data = [{'expected_output': '11',
'expected_input': '',
'weight': 0.0,
@@ -520,9 +644,11 @@ class CppStdIOEvaluationTestCases(unittest.TestCase):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertEqual(result.get('error'), "Correct answer\n")
self.assertTrue(result.get('success'))