-
Notifications
You must be signed in to change notification settings - Fork 228
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #60 from ankitjavalkar/add-missing-tests
Add missing evaluator tests
- Loading branch information
Showing
9 changed files
with
307 additions
and
13 deletions.
There are no files selected for viewing
This file contains 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
Empty file.
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import unittest | ||
import os | ||
from yaksh.bash_code_evaluator import BashCodeEvaluator | ||
from yaksh.settings import SERVER_TIMEOUT | ||
|
||
class BashEvaluationTestCases(unittest.TestCase): | ||
def setUp(self): | ||
self.language = "bash" | ||
self.ref_code_path = "bash_files/sample.sh,bash_files/sample.args" | ||
self.in_dir = "/tmp" | ||
self.test_case_data = [] | ||
self.timeout_msg = ("Code took more than {0} seconds to run. " | ||
"You probably have an infinite loop in your code.").format(SERVER_TIMEOUT) | ||
self.test = None | ||
|
||
def test_correct_answer(self): | ||
user_answer = "#!/bin/bash\n[[ $# -eq 2 ]] && echo $(( $1 + $2 )) && exit $(( $1 + $2 ))" | ||
get_class = BashCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertTrue(result.get("success")) | ||
self.assertEqual(result.get("error"), "Correct answer") | ||
|
||
def test_error(self): | ||
user_answer = "#!/bin/bash\n[[ $# -eq 2 ]] && echo $(( $1 - $2 )) && exit $(( $1 - $2 ))" | ||
get_class = BashCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertTrue("Error" in result.get("error")) | ||
|
||
def test_infinite_loop(self): | ||
user_answer = "#!/bin/bash\nwhile [ 1 ] ; do echo "" > /dev/null ; done" | ||
get_class = BashCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertEquals(result.get("error"), self.timeout_msg) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
import unittest | ||
import os | ||
from yaksh.cpp_code_evaluator import CppCodeEvaluator | ||
from yaksh.settings import SERVER_TIMEOUT | ||
|
||
class CEvaluationTestCases(unittest.TestCase): | ||
def setUp(self): | ||
self.language = "C" | ||
self.ref_code_path = "c_cpp_files/main.cpp" | ||
self.in_dir = "/tmp" | ||
self.test_case_data = [] | ||
self.timeout_msg = ("Code took more than {0} seconds to run. " | ||
"You probably have an infinite loop in your code.").format(SERVER_TIMEOUT) | ||
self.test = None | ||
|
||
def test_correct_answer(self): | ||
user_answer = "int add(int a, int b)\n{return a+b;}" | ||
get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertTrue(result.get("success")) | ||
self.assertEqual(result.get("error"), "Correct answer") | ||
|
||
def test_compilation_error(self): | ||
user_answer = "int add(int a, int b)\n{return a+b}" | ||
get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertTrue("Compilation Error" in result.get("error")) | ||
|
||
def test_infinite_loop(self): | ||
user_answer = "int add(int a, int b)\n{while(1>0){}}" | ||
get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertEquals(result.get("error"), self.timeout_msg) | ||
|
||
|
||
############################################################################### | ||
class CppEvaluationTestCases(unittest.TestCase): | ||
def setUp(self): | ||
self.language = "CPP" | ||
self.ref_code_path = "c_cpp_files/main.cpp" | ||
self.in_dir = "/tmp" | ||
self.test_case_data = [] | ||
self.timeout_msg = ("Code took more than {0} seconds to run. " | ||
"You probably have an infinite loop in your code.").format(SERVER_TIMEOUT) | ||
self.test = None | ||
|
||
def test_correct_answer(self): | ||
user_answer = "int add(int a, int b)\n{return a+b;}" | ||
get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertTrue(result.get("success")) | ||
self.assertEqual(result.get("error"), "Correct answer") | ||
|
||
def test_compilation_error(self): | ||
user_answer = "int add(int a, int b)\n{return a+b}" | ||
get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertTrue("Compilation Error" in result.get("error")) | ||
|
||
def test_infinite_loop(self): | ||
user_answer = "int add(int a, int b)\n{while(1>0){}}" | ||
get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertEquals(result.get("error"), self.timeout_msg) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import unittest | ||
import os | ||
from yaksh import python_code_evaluator | ||
from yaksh.language_registry import _LanguageRegistry, set_registry, get_registry | ||
from yaksh.settings import SERVER_TIMEOUT | ||
|
||
|
||
class RegistryTestCase(unittest.TestCase): | ||
def setUp(self): | ||
set_registry() | ||
self.registry_object = get_registry() | ||
self.language_registry = _LanguageRegistry() | ||
|
||
def test_set_register(self): | ||
class_name = getattr(python_code_evaluator, 'PythonCodeEvaluator') | ||
self.registry_object.register("python", "yaksh.python_code_evaluator.PythonCodeEvaluator") | ||
self.assertEquals(self.registry_object.get_class("python"), class_name) | ||
|
||
def tearDown(self): | ||
self.registry_object = None | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
import unittest | ||
import os | ||
from yaksh import code_evaluator as evaluator | ||
from yaksh.java_code_evaluator import JavaCodeEvaluator | ||
|
||
|
||
class JavaEvaluationTestCases(unittest.TestCase): | ||
def setUp(self): | ||
self.language = "java" | ||
self.ref_code_path = "java_files/main_square.java" | ||
self.in_dir = "/tmp" | ||
self.test_case_data = [] | ||
evaluator.SERVER_TIMEOUT = 9 | ||
self.timeout_msg = ("Code took more than {0} seconds to run. " | ||
"You probably have an infinite loop in " | ||
"your code.").format(evaluator.SERVER_TIMEOUT) | ||
self.test = None | ||
|
||
def tearDown(self): | ||
evaluator.SERVER_TIMEOUT = 2 | ||
|
||
def test_correct_answer(self): | ||
user_answer = "class Test {\n\tint square_num(int a) {\n\treturn a*a;\n\t}\n}" | ||
get_class = JavaCodeEvaluator(self.test_case_data, self.test, | ||
self.language, user_answer, | ||
self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertTrue(result.get("success")) | ||
self.assertEqual(result.get("error"), "Correct answer") | ||
|
||
def test_error(self): | ||
user_answer = "class Test {\n\tint square_num(int a) {\n\treturn a*a" | ||
get_class = JavaCodeEvaluator(self.test_case_data, self.test, | ||
self.language, user_answer, | ||
self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertTrue("Error" in result.get("error")) | ||
|
||
def test_infinite_loop(self): | ||
user_answer = "class Test {\n\tint square_num(int a) {\n\t\twhile(0==0){\n\t\t}\n\t}\n}" | ||
get_class = JavaCodeEvaluator(self.test_case_data, self.test, | ||
self.language, user_answer, | ||
self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertEquals(result.get("error"), self.timeout_msg) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
import unittest | ||
import os | ||
from yaksh.python_code_evaluator import PythonCodeEvaluator | ||
from yaksh.settings import SERVER_TIMEOUT | ||
|
||
class PythonEvaluationTestCases(unittest.TestCase): | ||
def setUp(self): | ||
self.language = "Python" | ||
self.test = None | ||
self.test_case_data = [{"func_name": "add", | ||
"expected_answer": "5", | ||
"test_id": u'null', | ||
"pos_args": ["3", "2"], | ||
"kw_args": {} | ||
}] | ||
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 = "def add(a, b):\n\treturn a + b""" | ||
get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None) | ||
result = get_class.evaluate() | ||
self.assertTrue(result.get("success")) | ||
self.assertEqual(result.get("error"), "Correct answer") | ||
|
||
def test_incorrect_answer(self): | ||
user_answer = "def add(a, b):\n\treturn a - b" | ||
test_case_data = [{"func_name": "add", | ||
"expected_answer": "5", | ||
"test_id": u'null', | ||
"pos_args": ["3", "2"], | ||
"kw_args": {} | ||
}] | ||
get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None) | ||
result = get_class.evaluate() | ||
self.assertFalse(result.get("success")) | ||
self.assertEqual(result.get("error"), "AssertionError in: assert add(3, 2) == 5") | ||
|
||
def test_infinite_loop(self): | ||
user_answer = "def add(a, b):\n\twhile True:\n\t\tpass""" | ||
test_case_data = [{"func_name": "add", | ||
"expected_answer": "5", | ||
"test_id": u'null', | ||
"pos_args": ["3", "2"], | ||
"kw_args": {} | ||
}] | ||
get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None) | ||
result = get_class.evaluate() | ||
self.assertFalse(result.get("success")) | ||
self.assertEquals(result.get("error"), self.timeout_msg) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import unittest | ||
import os | ||
from yaksh.scilab_code_evaluator import ScilabCodeEvaluator | ||
from yaksh.settings import SERVER_TIMEOUT | ||
|
||
class ScilabEvaluationTestCases(unittest.TestCase): | ||
def setUp(self): | ||
self.language = "scilab" | ||
self.ref_code_path = "scilab_files/test_add.sce" | ||
self.in_dir = "/tmp" | ||
self.test_case_data = [] | ||
self.timeout_msg = ("Code took more than {0} seconds to run. " | ||
"You probably have an infinite loop in your code.").format(SERVER_TIMEOUT) | ||
self.test = None | ||
|
||
def test_correct_answer(self): | ||
user_answer = "funcprot(0)\nfunction[c]=add(a,b)\n\tc=a+b;\nendfunction" | ||
get_class = ScilabCodeEvaluator(self.test_case_data, self.test, | ||
self.language, user_answer, | ||
self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertTrue(result.get("success")) | ||
self.assertEqual(result.get("error"), "Correct answer") | ||
|
||
def test_error(self): | ||
user_answer = "funcprot(0)\nfunction[c]=add(a,b)\n\tc=a+b;\ndis(\tendfunction" | ||
get_class = ScilabCodeEvaluator(self.test_case_data, self.test, | ||
self.language, user_answer, | ||
self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertTrue("error" in result.get("error")) | ||
|
||
def test_infinite_loop(self): | ||
user_answer = "funcprot(0)\nfunction[c]=add(a,b)\n\tc=a;\nwhile(1==1)\nend\nendfunction" | ||
get_class = ScilabCodeEvaluator(self.test_case_data, self.test, | ||
self.language, user_answer, | ||
self.ref_code_path, self.in_dir) | ||
result = get_class.evaluate() | ||
|
||
self.assertFalse(result.get("success")) | ||
self.assertEquals(result.get("error"), self.timeout_msg) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains 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