summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--yaksh/base_evaluator.py9
-rw-r--r--yaksh/bash_code_evaluator.py39
-rw-r--r--yaksh/bash_files/sample.args2
-rwxr-xr-xyaksh/bash_files/sample.sh2
-rw-r--r--yaksh/bash_files/sample1.args1
-rwxr-xr-xyaksh/bash_files/sample1.sh2
-rwxr-xr-xyaksh/bash_files/sample2.args1
-rwxr-xr-xyaksh/bash_files/sample2.sh2
-rw-r--r--yaksh/c_cpp_files/file_data.c25
-rwxr-xr-xyaksh/c_cpp_files/main.cpp32
-rwxr-xr-xyaksh/c_cpp_files/main2.c30
-rwxr-xr-xyaksh/c_cpp_files/main_array_check.cpp34
-rwxr-xr-xyaksh/c_cpp_files/main_array_check_all.cpp34
-rwxr-xr-xyaksh/c_cpp_files/main_array_sum.cpp34
-rwxr-xr-xyaksh/c_cpp_files/main_blackJack.cpp41
-rwxr-xr-xyaksh/c_cpp_files/main_check_digit.cpp32
-rwxr-xr-xyaksh/c_cpp_files/main_count667.cpp42
-rwxr-xr-xyaksh/c_cpp_files/main_count7.cpp42
-rwxr-xr-xyaksh/c_cpp_files/main_fact.cpp32
-rwxr-xr-xyaksh/c_cpp_files/main_greatest.cpp44
-rwxr-xr-xyaksh/c_cpp_files/main_hello_name.c29
-rwxr-xr-xyaksh/c_cpp_files/main_lessThan9.cpp38
-rwxr-xr-xyaksh/c_cpp_files/main_mean.cpp38
-rwxr-xr-xyaksh/c_cpp_files/main_palindrome.cpp32
-rwxr-xr-xyaksh/c_cpp_files/main_roundTo10.cpp41
-rwxr-xr-xyaksh/c_cpp_files/main_specialSum.cpp41
-rwxr-xr-xyaksh/c_cpp_files/main_within.cpp38
-rw-r--r--yaksh/cpp_code_evaluator.py16
-rw-r--r--yaksh/cpp_stdio_evaluator.py2
-rw-r--r--yaksh/evaluator_tests/test_bash_evaluation.py49
-rw-r--r--yaksh/evaluator_tests/test_c_cpp_evaluation.py133
-rw-r--r--yaksh/evaluator_tests/test_java_evaluation.py120
-rw-r--r--yaksh/evaluator_tests/test_scilab_evaluation.py35
-rw-r--r--yaksh/java_code_evaluator.py19
-rw-r--r--yaksh/java_files/main_array_sum.java36
-rw-r--r--yaksh/java_files/main_fact.java29
-rw-r--r--yaksh/java_files/main_great.java39
-rw-r--r--yaksh/java_files/main_hello_name.java29
-rw-r--r--yaksh/java_files/main_lastDigit.java36
-rw-r--r--yaksh/java_files/main_moreThan30.java36
-rw-r--r--yaksh/java_files/main_palindrome.java29
-rw-r--r--yaksh/java_files/main_square.java32
-rw-r--r--yaksh/java_files/read_file.java26
-rw-r--r--yaksh/models.py20
-rw-r--r--yaksh/scilab_code_evaluator.py13
-rw-r--r--yaksh/scilab_files/test_add.sce29
-rw-r--r--yaksh/templates/yaksh/add_question.html3
-rw-r--r--yaksh/templates/yaksh/question.html4
-rw-r--r--yaksh/test_models.py2
49 files changed, 388 insertions, 1086 deletions
diff --git a/yaksh/base_evaluator.py b/yaksh/base_evaluator.py
index ce1647f..071008f 100644
--- a/yaksh/base_evaluator.py
+++ b/yaksh/base_evaluator.py
@@ -62,15 +62,6 @@ class BaseEvaluator(object):
submit_f.write(user_answer.lstrip())
submit_f.close()
- def _set_test_code_file_path(self, ref_path=None, test_case_path=None):
- if ref_path and not ref_path.startswith('/'):
- ref_path = join(MY_DIR, ref_path)
-
- if test_case_path and not test_case_path.startswith('/'):
- test_case_path = join(MY_DIR, test_case_path)
-
- return ref_path, test_case_path
-
def _set_file_as_executable(self, fname):
os.chmod(fname, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
| stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
diff --git a/yaksh/bash_code_evaluator.py b/yaksh/bash_code_evaluator.py
index 1f02fdb..a4f1389 100644
--- a/yaksh/bash_code_evaluator.py
+++ b/yaksh/bash_code_evaluator.py
@@ -17,6 +17,9 @@ class BashCodeEvaluator(BaseEvaluator):
# Private Protocol ##########
def __init__(self, metadata, test_case_data):
self.files = []
+ self.submit_code_path = ""
+ self.test_code_path = ""
+ self.tc_args_path= ""
# Set metadata values
self.user_answer = metadata.get('user_answer')
@@ -25,11 +28,18 @@ class BashCodeEvaluator(BaseEvaluator):
# Set test case data values
self.test_case = test_case_data.get('test_case')
+ self.test_case_args = test_case_data.get('test_case_args')
+
self.weight = test_case_data.get('weight')
def teardown(self):
# Delete the created file.
- os.remove(self.submit_code_path)
+ if os.path.exists(self.submit_code_path):
+ os.remove(self.submit_code_path)
+ if os.path.exists(self.test_code_path):
+ os.remove(self.test_code_path)
+ if os.path.exists(self.tc_args_path):
+ os.remove(self.tc_args_path)
if self.files:
delete_files(self.files)
@@ -58,18 +68,20 @@ class BashCodeEvaluator(BaseEvaluator):
Returns (False, error_msg, 0.0): If mandatory arguments are not files or if
the required permissions are not given to the file(s).
"""
- ref_code_path = self.test_case
success = False
mark_fraction = 0.0
-
self.submit_code_path = self.create_submit_code_file('submit.sh')
self._set_file_as_executable(self.submit_code_path)
-
- get_ref_path, get_test_case_path = ref_code_path.strip().split(',')
- get_ref_path = get_ref_path.strip()
- get_test_case_path = get_test_case_path.strip()
- clean_ref_code_path, clean_test_case_path = \
- self._set_test_code_file_path(get_ref_path, get_test_case_path)
+ self.test_code_path = self.create_submit_code_file('main.sh')
+ self._set_file_as_executable(self.test_code_path)
+ if self.test_case_args:
+ self.tc_args_path = self.create_submit_code_file('main.args')
+ self.write_to_submit_code_file(self.tc_args_path, self.test_case_args)
+ self.user_answer = self.user_answer.replace("\r", "")
+ self.test_case = self.test_case.replace("\r", "")
+ self.write_to_submit_code_file(self.submit_code_path, self.user_answer)
+ self.write_to_submit_code_file(self.test_code_path, self.test_case)
+ clean_ref_code_path, clean_test_case_path = self.test_code_path, self.tc_args_path
if self.file_paths:
self.files = copy_files(self.file_paths)
@@ -86,10 +98,7 @@ class BashCodeEvaluator(BaseEvaluator):
msg = "Script %s is not executable" % self.submit_code_path
return False, msg, 0.0
- self.user_answer = self.user_answer.replace("\r", "")
- self.write_to_submit_code_file(self.submit_code_path, self.user_answer)
-
- if clean_test_case_path is None or "":
+ if not clean_test_case_path:
ret = self._run_command(clean_ref_code_path,
stdin=None,
stdout=subprocess.PIPE,
@@ -106,8 +115,8 @@ class BashCodeEvaluator(BaseEvaluator):
mark_fraction = 1.0 if self.partial_grading else 0.0
return True, None, mark_fraction
else:
- err = "Error: expected %s, got %s" % (inst_stderr,
- stdnt_stderr
+ err = "Error: expected %s, got %s" % (inst_stdout + inst_stderr,
+ stdnt_stdout + stdnt_stderr
)
return False, err, 0.0
else:
diff --git a/yaksh/bash_files/sample.args b/yaksh/bash_files/sample.args
deleted file mode 100644
index 4d9f00d..0000000
--- a/yaksh/bash_files/sample.args
+++ /dev/null
@@ -1,2 +0,0 @@
-1 2
-2 1
diff --git a/yaksh/bash_files/sample.sh b/yaksh/bash_files/sample.sh
deleted file mode 100755
index e935cb3..0000000
--- a/yaksh/bash_files/sample.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-[[ $# -eq 2 ]] && echo $(( $1 + $2 )) && exit $(( $1 + $2 ))
diff --git a/yaksh/bash_files/sample1.args b/yaksh/bash_files/sample1.args
deleted file mode 100644
index 541cb64..0000000
--- a/yaksh/bash_files/sample1.args
+++ /dev/null
@@ -1 +0,0 @@
-test.txt \ No newline at end of file
diff --git a/yaksh/bash_files/sample1.sh b/yaksh/bash_files/sample1.sh
deleted file mode 100755
index 965874b..0000000
--- a/yaksh/bash_files/sample1.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-cat $1
diff --git a/yaksh/bash_files/sample2.args b/yaksh/bash_files/sample2.args
deleted file mode 100755
index cf4499d..0000000
--- a/yaksh/bash_files/sample2.args
+++ /dev/null
@@ -1 +0,0 @@
-file1.csv file2.csv file3.csv
diff --git a/yaksh/bash_files/sample2.sh b/yaksh/bash_files/sample2.sh
deleted file mode 100755
index 5dc55b8..0000000
--- a/yaksh/bash_files/sample2.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-cat $1 | cut -d: -f2 | paste -d: $3 - $2
diff --git a/yaksh/c_cpp_files/file_data.c b/yaksh/c_cpp_files/file_data.c
deleted file mode 100644
index 1c0ab12..0000000
--- a/yaksh/c_cpp_files/file_data.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int ans();
-
-template <class T>
-void check(T expect,T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (0);
- }
-}
-
-int main(void)
-{
- int result;
- result = ans();
- check(50, result);
-}
diff --git a/yaksh/c_cpp_files/main.cpp b/yaksh/c_cpp_files/main.cpp
deleted file mode 100755
index ebe1f08..0000000
--- a/yaksh/c_cpp_files/main.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int add(int, int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",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\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main2.c b/yaksh/c_cpp_files/main2.c
deleted file mode 100755
index a62195f..0000000
--- a/yaksh/c_cpp_files/main2.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int add(int, int, int);
-
-template <class T>
-void check(T expect,T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- result = add(0,0,0);
- printf("Input submitted to the function: 0, 0, 0");
- check(0, result);
- result = add(2,3,3);
- printf("Input submitted to the function: 2, 3, 3");
- check(8,result);
- printf("All Correct\n");
-}
diff --git a/yaksh/c_cpp_files/main_array_check.cpp b/yaksh/c_cpp_files/main_array_check.cpp
deleted file mode 100755
index ea34fdd..0000000
--- a/yaksh/c_cpp_files/main_array_check.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern bool array_check(int [], int);
-
-template <class T>
-
-void check(T expect,T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- bool result;
- int a[] = {1,2,3,0,0};
- result = array_check(a, 2);
- printf("Input submitted to the function: {1, 2, 3, 0, 0} and index 2");
- check(false, result);
- int b[] = {1,2,3,4,5};
- result = array_check(b, 3);
- printf("Input submitted to the function: {1, 2, 3, 4, 5} and index 3");
- check(true, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_array_check_all.cpp b/yaksh/c_cpp_files/main_array_check_all.cpp
deleted file mode 100755
index 140578e..0000000
--- a/yaksh/c_cpp_files/main_array_check_all.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern bool array_check_all(int []);
-
-template <class T>
-
-void check(T expect,T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- bool result;
- int a[] = {1,2,3,2,8};
- result = array_check_all(a);
- printf("Input submitted to the function: {1, 2, 3, 2, 8}");
- check(false, result);
- int b[] = {4,2,32,4,56};
- result = array_check_all(b);
- printf("Input submitted to the function: {4, 2, 32, 4, 56}");
- check(true, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_array_sum.cpp b/yaksh/c_cpp_files/main_array_sum.cpp
deleted file mode 100755
index 55b2ebf..0000000
--- a/yaksh/c_cpp_files/main_array_sum.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int array_sum(int []);
-
-template <class T>
-
-void check(T expect,T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- int a[] = {1,2,3,0,0};
- result = array_sum(a);
- printf("Input submitted to the function: {1, 2, 3, 0, 0}");
- check(6, result);
- int b[] = {1,2,3,4,5};
- result = array_sum(b);
- printf("Input submitted to the function: {1, 2, 3, 4, 5}");
- check(15,result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_blackJack.cpp b/yaksh/c_cpp_files/main_blackJack.cpp
deleted file mode 100755
index cc54e78..0000000
--- a/yaksh/c_cpp_files/main_blackJack.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int blackJack(int, int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- result = blackJack(11, 12);
- printf("Input submitted to the function: 11, 12");
- check(12, result);
- result = blackJack(15, 19);
- printf("Input submitted to the function: 15, 19");
- check(19, result);
- result = blackJack(10, 21);
- printf("Input submitted to the function: 10, 21");
- check(21, result);
- result = blackJack(31, 22);
- printf("Input submitted to the function: 31, 22");
- check(0, result);
- result = blackJack(91, 61);
- printf("Input submitted to the function: 91, 61");
- check(0, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_check_digit.cpp b/yaksh/c_cpp_files/main_check_digit.cpp
deleted file mode 100755
index d3bf3d6..0000000
--- a/yaksh/c_cpp_files/main_check_digit.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern bool check_digit(int, int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- bool result;
- result = check_digit(12, 23);
- printf("Input submitted to the function: 12, 23");
- check(true, result);
- result = check_digit(22, 11);
- printf("Input submitted to the function: 121");
- check(false, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_count667.cpp b/yaksh/c_cpp_files/main_count667.cpp
deleted file mode 100755
index f146e8c..0000000
--- a/yaksh/c_cpp_files/main_count667.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int count667(int[]);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- int arr[5] = {2,6,4,5,6};
- result = count667(arr);
- printf("Input submitted to the function: [2, 6, 4, 5,6]");
- check(0, result);
- int arr2[5] = {6,6,2,17,9};
- result = count667(arr2);
- printf("Input submitted to the function: [6, 6, 2, 17, 9]");
- check(1, result);
- int arr3[5] = {6,6,6,7,1};
- result = count667(arr3);
- printf("Input submitted to the function: [6, 6, 7, 2, 1]");
- check(3, result);
- int arr4[5] = {6,7,7,6,6};
- result = count667(arr4);
- printf("Input submitted to the function: [6, 7, 7, 6, 6]");
- check(2, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_count7.cpp b/yaksh/c_cpp_files/main_count7.cpp
deleted file mode 100755
index 982e930..0000000
--- a/yaksh/c_cpp_files/main_count7.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int count7(int[]);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- int arr[4] = {2,3,4,5};
- result = count7(arr);
- printf("Input submitted to the function: [2, 3, 4, 5]");
- check(0, result);
- int arr2[4] = {1,2,17,9};
- result = count7(arr2);
- printf("Input submitted to the function: [1, 2, 17, 9]");
- check(0, result);
- int arr3[4] = {7,9,2,1};
- result = count7(arr3);
- printf("Input submitted to the function: [7, 9, 2, 1]");
- check(1, result);
- int arr4[4] = {1,7,7,7};
- result = count7(arr4);
- printf("Input submitted to the function: [1, 7, 7, 7]");
- check(3, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_fact.cpp b/yaksh/c_cpp_files/main_fact.cpp
deleted file mode 100755
index a4ff230..0000000
--- a/yaksh/c_cpp_files/main_fact.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int factorial(int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- result = factorial(0);
- printf("Input submitted to the function: 0");
- check(1, result);
- result = factorial(3);
- printf("Input submitted to the function: 3");
- check(6, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_greatest.cpp b/yaksh/c_cpp_files/main_greatest.cpp
deleted file mode 100755
index 6d0a7c2..0000000
--- a/yaksh/c_cpp_files/main_greatest.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int greatest(int, int, int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- result = greatest(1, 2, 3);
- printf("Input submitted to the function: 1, 2, 3");
- check(3, result);
- result = greatest(5, 9, 2);
- printf("Input submitted to the function: 5, 9, 2");
- check(9, result);
- result = greatest(7, 2, 4);
- printf("Input submitted to the function: 7, 2, 4");
- check(7, result);
- result = greatest(11, 2, 45);
- printf("Input submitted to the function: 11, 2, 45");
- check(45, result);
- result = greatest(2, 7, 0);
- printf("Input submitted to the function: 2, 7, 0");
- check(7, result);
- result = greatest(9, 6, 5);
- printf("Input submitted to the function: 9, 6, 5");
- check(9, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_hello_name.c b/yaksh/c_cpp_files/main_hello_name.c
deleted file mode 100755
index 71b83a2..0000000
--- a/yaksh/c_cpp_files/main_hello_name.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-
-void check(char expect[], char result[])
-{
- if (expect == result)
- {
- printf("Correct:expected %s got %s \n",expect,result);
- }
- else
- {
- printf("ERROR:expected %s got %s \n",expect,result);
- exit (0);
- }
-}
-
-int main(void)
-{
- char result[20];
- char A[20]=" pratham";
- char B[20]=" sir";
- result[20] = message(A);
- printf("%s",result);
- check("hello pratham", result);
- result[20] = message(B);
- check("hello sir",result);
- printf("All Correct\n");
-}
diff --git a/yaksh/c_cpp_files/main_lessThan9.cpp b/yaksh/c_cpp_files/main_lessThan9.cpp
deleted file mode 100755
index 722b4bb..0000000
--- a/yaksh/c_cpp_files/main_lessThan9.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern bool lessThan9(int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- bool result;
- result = lessThan9(10);
- printf("Input submitted to the function: 10");
- check(false, result);
- result = lessThan9(17);
- printf("Input submitted to the function: 17");
- check(true, result);
- result = lessThan9(16);
- printf("Input submitted to the function: 16");
- check(true, result);
- result = lessThan9(15);
- printf("Input submitted to the function: 15");
- check(false, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_mean.cpp b/yaksh/c_cpp_files/main_mean.cpp
deleted file mode 100755
index 21a4b1a..0000000
--- a/yaksh/c_cpp_files/main_mean.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern bool mean(int, int , int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- bool result;
- result = mean(11, 11, 11);
- printf("Input submitted to the function: 11, 121, 11");
- check(true, result);
- result = mean(16, 12, 9);
- printf("Input submitted to the function: 16, 144, 9");
- check(true, result);
- result = mean(19, 221, 9);
- printf("Input submitted to the function: 19, 221, 9");
- check(false, result);
- result = mean(34, 12, 3);
- printf("Input submitted to the function: 11, 121, 11");
- check(false, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_palindrome.cpp b/yaksh/c_cpp_files/main_palindrome.cpp
deleted file mode 100755
index 0e66928..0000000
--- a/yaksh/c_cpp_files/main_palindrome.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern bool palindrome(int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- bool result;
- result = palindrome(123);
- printf("Input submitted to the function: 123");
- check(false, result);
- result = palindrome(121);
- printf("Input submitted to the function: 121");
- check(true, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_roundTo10.cpp b/yaksh/c_cpp_files/main_roundTo10.cpp
deleted file mode 100755
index 12c961d..0000000
--- a/yaksh/c_cpp_files/main_roundTo10.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int roundTo10(int,int,int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- result = roundTo10(10, 22, 39);
- printf("Input submitted to the function: 10, 22, 39");
- check(70, result);
- result = roundTo10(45, 42, 39);
- printf("Input submitted to the function: 45, 42, 39");
- check(130, result);
- result = roundTo10(7, 3, 9);
- printf("Input submitted to the function: 7, 3, 9");
- check(20, result);
- result = roundTo10(1, 2, 3);
- printf("Input submitted to the function: 1, 2, 3");
- check(0, result);
- result = roundTo10(30, 40, 50);
- printf("Input submitted to the function: 30, 40, 50");
- check(120, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_specialSum.cpp b/yaksh/c_cpp_files/main_specialSum.cpp
deleted file mode 100755
index d614536..0000000
--- a/yaksh/c_cpp_files/main_specialSum.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern int specialSum(int,int,int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- int result;
- result = specialSum(10, 2, 9);
- printf("Input submitted to the function: 10, 2, 9");
- check(21, result);
- result = specialSum(1, 21, 9);
- printf("Input submitted to the function: 1, 21, 9");
- check(1, result);
- result = specialSum(21, 2, 3);
- printf("Input submitted to the function: 21, 2, 3");
- check(0, result);
- result = specialSum(10, 2, 21);
- printf("Input submitted to the function: 10, 2, 21");
- check(12, result);
- result = specialSum(10, 2, 6);
- printf("Input submitted to the function: 10, 2, 6");
- check(18, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/c_cpp_files/main_within.cpp b/yaksh/c_cpp_files/main_within.cpp
deleted file mode 100755
index 50f9ad0..0000000
--- a/yaksh/c_cpp_files/main_within.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern bool within(int, int, int);
-
-template <class T>
-
-void check(T expect, T result)
-{
- if (expect == result)
- {
- printf("\nCorrect:\n Expected %d got %d \n",expect,result);
- }
- else
- {
- printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (1);
- }
-}
-
-int main(void)
-{
- bool result;
- result = within(12, 3, 20);
- printf("Input submitted to the function: 12, 3, 20");
- check(true, result);
- result = within(12, 13, 20);
- printf("Input submitted to the function: 12, 13, 20");
- check(false, result);
- result = within(29, 13, 120);
- printf("Input submitted to the function: 29, 13, 120");
- check(true, result);
- result = within(12, 12, 20);
- printf("Input submitted to the function: 12, 3, 20");
- check(false, result);
- printf("All Correct\n");
- return 0;
-}
diff --git a/yaksh/cpp_code_evaluator.py b/yaksh/cpp_code_evaluator.py
index 4811b89..4c8e938 100644
--- a/yaksh/cpp_code_evaluator.py
+++ b/yaksh/cpp_code_evaluator.py
@@ -15,11 +15,12 @@ class CppCodeEvaluator(BaseEvaluator):
"""Tests the C code obtained from Code Server"""
def __init__(self, metadata, test_case_data):
self.files = []
- self.submit_code_path = ''
self.compiled_user_answer = None
self.compiled_test_code = None
self.user_output_path = ""
self.ref_output_path = ""
+ self.submit_code_path = ""
+ self.test_code_path = ""
# Set metadata values
self.user_answer = metadata.get('user_answer')
@@ -32,11 +33,14 @@ class CppCodeEvaluator(BaseEvaluator):
def teardown(self):
# Delete the created file.
- os.remove(self.submit_code_path)
+ if os.path.exists(self.submit_code_path):
+ os.remove(self.submit_code_path)
if os.path.exists(self.ref_output_path):
os.remove(self.ref_output_path)
if os.path.exists(self.user_output_path):
os.remove(self.user_output_path)
+ if os.path.exists(self.test_code_path):
+ os.remove(self.test_code_path)
if self.files:
delete_files(self.files)
@@ -59,10 +63,11 @@ class CppCodeEvaluator(BaseEvaluator):
if self.compiled_user_answer and self.compiled_test_code:
return None
else:
- ref_code_path = self.test_case
- clean_ref_code_path, clean_test_case_path = \
- self._set_test_code_file_path(ref_code_path)
self.submit_code_path = self.create_submit_code_file('submit.c')
+ self.test_code_path = self.create_submit_code_file('main.c')
+ self.write_to_submit_code_file(self.submit_code_path, self.user_answer)
+ self.write_to_submit_code_file(self.test_code_path, self.test_case)
+ clean_ref_code_path = self.test_code_path
if self.file_paths:
self.files = copy_files(self.file_paths)
if not isfile(clean_ref_code_path):
@@ -72,7 +77,6 @@ class CppCodeEvaluator(BaseEvaluator):
msg = "No file at %s or Incorrect path" % self.submit_code_path
return False, msg
- self.write_to_submit_code_file(self.submit_code_path, self.user_answer)
self.user_output_path, self.ref_output_path = self.set_file_paths()
self.compile_command, self.compile_main = self.get_commands(
clean_ref_code_path,
diff --git a/yaksh/cpp_stdio_evaluator.py b/yaksh/cpp_stdio_evaluator.py
index 978f1b1..b302fa4 100644
--- a/yaksh/cpp_stdio_evaluator.py
+++ b/yaksh/cpp_stdio_evaluator.py
@@ -13,7 +13,6 @@ class CppStdIOEvaluator(StdIOEvaluator):
"""Evaluates C StdIO based code"""
def __init__(self, metadata, test_case_data):
self.files = []
- self.submit_code_path = self.create_submit_code_file('submit.c')
# Set metadata values
self.user_answer = metadata.get('user_answer')
@@ -43,6 +42,7 @@ class CppStdIOEvaluator(StdIOEvaluator):
return compile_command, compile_main
def compile_code(self):
+ self.submit_code_path = self.create_submit_code_file('submit.c')
if self.file_paths:
self.files = copy_files(file_paths)
if not isfile(self.submit_code_path):
diff --git a/yaksh/evaluator_tests/test_bash_evaluation.py b/yaksh/evaluator_tests/test_bash_evaluation.py
index abadf26..4b551d7 100644
--- a/yaksh/evaluator_tests/test_bash_evaluation.py
+++ b/yaksh/evaluator_tests/test_bash_evaluation.py
@@ -13,10 +13,17 @@ from textwrap import dedent
class BashAssertionEvaluationTestCases(EvaluatorBaseTest):
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'))
+ self.tc_data = dedent("""
+ #!/bin/bash
+ [[ $# -eq 2 ]] && echo $(( $1 + $2 )) && exit $(( $1 + $2 ))
+ """)
+ self.tc_data_args = "1 2\n2 1"
self.test_case_data = [
- {"test_case": "bash_files/sample.sh,bash_files/sample.args",
+ {"test_case": self.tc_data,
+ "test_case_args": self.tc_data_args,
"test_case_type": "standardtestcase",
"weight": 0.0
}
@@ -28,10 +35,11 @@ class BashAssertionEvaluationTestCases(EvaluatorBaseTest):
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 = ("#!/bin/bash\n[[ $# -eq 2 ]]"
" && echo $(( $1 + $2 )) && exit $(( $1 + $2 ))"
)
@@ -45,12 +53,15 @@ class BashAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_error(self):
+ # Given
user_answer = ("#!/bin/bash\n[[ $# -eq 2 ]] "
"&& echo $(( $1 - $2 )) && exit $(( $1 - $2 ))")
kwargs = {
@@ -63,13 +74,16 @@ class BashAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output("Error", result.get("error"))
def test_infinite_loop(self):
+ # Given
user_answer = ("#!/bin/bash\nwhile [ 1 ] ;"
" do echo "" > /dev/null ; done")
kwargs = {
@@ -82,16 +96,25 @@ class BashAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output(self.timeout_msg, result.get("error"))
def test_file_based_assert(self):
- self.file_paths = [('/tmp/test.txt', False)]
+ # Given
+ self.file_paths = [(self.f_path, False)]
+ self.tc_data = dedent("""
+ #!/bin/bash
+ cat $1
+ """)
+ self.tc_data_args = "test.txt"
self.test_case_data = [
- {"test_case": "bash_files/sample1.sh,bash_files/sample1.args",
+ {"test_case": self.tc_data,
+ "test_case_args": self.tc_data_args,
"test_case_type": "standardtestcase",
"weight": 0.0
}
@@ -107,9 +130,11 @@ class BashAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get("success"))
class BashStdIOEvaluationTestCases(EvaluatorBaseTest):
@@ -122,6 +147,7 @@ class BashStdIOEvaluationTestCases(EvaluatorBaseTest):
def test_correct_answer(self):
+ # Given
user_answer = dedent(""" #!/bin/bash
read A
read B
@@ -143,12 +169,15 @@ class BashStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_array_input(self):
+ # Given
user_answer = dedent(""" readarray arr;
COUNTER=0
while [ $COUNTER -lt 3 ]; do
@@ -172,12 +201,15 @@ class BashStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_incorrect_answer(self):
+ # Given
user_answer = dedent(""" #!/bin/bash
read A
read B
@@ -199,12 +231,16 @@ class BashStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+
+ # Then
self.assert_correct_output("Incorrect", result.get('error'))
self.assertFalse(result.get('success'))
def test_stdout_only(self):
+ # Given
user_answer = dedent(""" #!/bin/bash
A=6
B=4
@@ -226,8 +262,11 @@ class BashStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+
+ # Then
self.assertTrue(result.get('success'))
if __name__ == '__main__':
diff --git a/yaksh/evaluator_tests/test_c_cpp_evaluation.py b/yaksh/evaluator_tests/test_c_cpp_evaluation.py
index ec59a6b..d734cf2 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(EvaluatorBaseTest):
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(EvaluatorBaseTest):
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,12 +80,15 @@ class CAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_incorrect_answer(self):
+ # Given
user_answer = "int add(int a, int b)\n{return a-b;}"
kwargs = {
'metadata': {
@@ -61,15 +100,18 @@ class CAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
lines_of_error = len(result.get('error')[0].splitlines())
self.assertFalse(result.get('success'))
self.assert_correct_output("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': {
@@ -81,13 +123,16 @@ class CAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output("Compilation Error", result.get("error"))
def test_infinite_loop(self):
+ # Given
user_answer = "int add(int a, int b)\n{while(1>0){}}"
kwargs = {
'metadata': {
@@ -99,15 +144,45 @@ class CAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output(self.timeout_msg, result.get("error"))
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
}]
@@ -133,11 +208,14 @@ class CAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
+
class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
def setUp(self):
self.test_case_data = [{'expected_output': '11',
@@ -151,7 +229,11 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
" 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){
@@ -169,12 +251,15 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
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,
@@ -199,12 +284,15 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_string_input(self):
+ # Given
self.test_case_data = [{'expected_output': 'abc',
'expected_input': 'abc',
'weight': 0.0,
@@ -227,12 +315,15 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_incorrect_answer(self):
+ # Given
user_answer = dedent("""
#include<stdio.h>
int main(void){
@@ -249,15 +340,18 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
lines_of_error = len(result.get('error')[0].splitlines())
self.assertFalse(result.get('success'))
self.assert_correct_output("Incorrect", result.get('error'))
self.assertTrue(lines_of_error > 1)
def test_error(self):
+ # Given
user_answer = dedent("""
#include<stdio.h>
int main(void){
@@ -274,13 +368,16 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output("Compilation Error", result.get("error"))
def test_infinite_loop(self):
+ # Given
user_answer = dedent("""
#include<stdio.h>
int main(void){
@@ -297,13 +394,16 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output(self.timeout_msg, result.get("error"))
def test_only_stdout(self):
+ # Given
self.test_case_data = [{'expected_output': '11',
'expected_input': '',
'weight': 0.0,
@@ -325,12 +425,15 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_cpp_correct_answer(self):
+ # Given
user_answer = dedent("""
#include<iostream>
using namespace std;
@@ -349,12 +452,15 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
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,
@@ -380,12 +486,15 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
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,
@@ -409,12 +518,15 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_cpp_incorrect_answer(self):
+ # Given
user_answer = dedent("""
#include<iostream>
using namespace std;
@@ -432,15 +544,18 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
lines_of_error = len(result.get('error')[0].splitlines())
self.assertFalse(result.get('success'))
self.assert_correct_output("Incorrect", result.get('error'))
self.assertTrue(lines_of_error > 1)
def test_cpp_error(self):
+ # Given
user_answer = dedent("""
#include<iostream>
using namespace std;
@@ -458,13 +573,16 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output("Compilation Error", result.get("error"))
def test_cpp_infinite_loop(self):
+ # Given
user_answer = dedent("""
#include<iostream>
using namespace std;
@@ -482,13 +600,16 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output(self.timeout_msg, result.get("error"))
def test_cpp_only_stdout(self):
+ # Given
self.test_case_data = [{'expected_output': '11',
'expected_input': '',
'weight': 0.0,
@@ -511,9 +632,11 @@ class CppStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
if __name__ == '__main__':
diff --git a/yaksh/evaluator_tests/test_java_evaluation.py b/yaksh/evaluator_tests/test_java_evaluation.py
index bfba38f..b53d8aa 100644
--- a/yaksh/evaluator_tests/test_java_evaluation.py
+++ b/yaksh/evaluator_tests/test_java_evaluation.py
@@ -15,11 +15,47 @@ from yaksh.evaluator_tests.test_python_evaluation import EvaluatorBaseTest
class JavaAssertionEvaluationTestCases(EvaluatorBaseTest):
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.tc_data = dedent("""
+ class main
+ {
+ public static <E> void check(E expect, E result)
+ {
+ if(result.equals(expect))
+ {
+ System.out.println("Correct:Output expected "+expect+" and got "+result);
+ }
+ else
+ {
+ System.out.println("Incorrect:Output expected "+expect+" but got "+result);
+ System.exit(1);
+ }
+ }
+ public static void main(String arg[])
+ {
+ Test t = new Test();
+ int result, input, output;
+ input = 0; output = 0;
+ result = t.square_num(input);
+ System.out.println("Input submitted to the function: "+input);
+ check(output, result);
+ input = 5; output = 25;
+ result = t.square_num(input);
+ System.out.println("Input submitted to the function: "+input);
+ check(output, result);
+ input = 6; output = 36;
+ result = t.square_num(input);
+ System.out.println("Input submitted to the function: "+input);
+ check(output, result);
+ }
+ }
+ """)
+
self.test_case_data = [
- {"test_case": "java_files/main_square.java",
+ {"test_case": self.tc_data,
"test_case_type": "standardtestcase",
"weight": 0.0
}
@@ -34,10 +70,11 @@ class JavaAssertionEvaluationTestCases(EvaluatorBaseTest):
def tearDown(self):
gd.SERVER_TIMEOUT = 4
- os.remove('/tmp/test.txt')
+ os.remove(self.f_path)
shutil.rmtree(self.in_dir)
def test_correct_answer(self):
+ # Given
user_answer = "class Test {\n\tint square_num(int a) {\n\treturn a*a;\n\t}\n}"
kwargs = {
'metadata': {
@@ -49,12 +86,15 @@ class JavaAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_incorrect_answer(self):
+ # Given
user_answer = "class Test {\n\tint square_num(int a) {\n\treturn a;\n\t}\n}"
kwargs = {
'metadata': {
@@ -66,9 +106,11 @@ class JavaAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get('success'))
lines_of_error = len(result.get('error')[0].splitlines())
self.assertFalse(result.get('success'))
@@ -76,6 +118,7 @@ class JavaAssertionEvaluationTestCases(EvaluatorBaseTest):
self.assertTrue(lines_of_error > 1)
def test_error(self):
+ # Given
user_answer = "class Test {\n\tint square_num(int a) {\n\treturn a*a"
kwargs = {
'metadata': {
@@ -87,13 +130,16 @@ class JavaAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output("Error", result.get("error"))
def test_infinite_loop(self):
+ # Given
user_answer = "class Test {\n\tint square_num(int a) {\n\t\twhile(0==0){\n\t\t}\n\t}\n}"
kwargs = {
'metadata': {
@@ -105,16 +151,47 @@ class JavaAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output(self.timeout_msg, result.get("error"))
def test_file_based_assert(self):
- self.file_paths = [("/tmp/test.txt", False)]
+ # Given
+ self.file_paths = [(self.f_path, False)]
+ self.tc_data = dedent("""
+ class main
+ {
+ public static <E> void check(E expect, E result)
+ {
+ if(result.equals(expect))
+ {
+ System.out.println("Correct:Output expected "+expect+" and got "+result);
+ }
+ else
+ {
+ System.out.println("Incorrect:Output expected "+expect+" but got "+result);
+ System.exit(1);
+ }
+ }
+ public static void main(String arg[])
+ {
+ String result = "";
+ Test t = new Test();
+ try{
+ result = t.readFile();}
+ catch(Exception e){
+ System.out.print(e);
+ }
+ check("2", result);
+ }
+ }
+ """)
self.test_case_data = [
- {"test_case": "java_files/read_file.java",
+ {"test_case": self.tc_data,
"test_case_type": "standardtestcase",
"weight": 0.0
}
@@ -147,14 +224,17 @@ class JavaAssertionEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get("success"))
class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
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.in_dir = tmp_in_dir_path
@@ -171,10 +251,11 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
def tearDown(self):
gd.SERVER_TIMEOUT = 4
- os.remove('/tmp/test.txt')
+ os.remove(self.f_path)
shutil.rmtree(self.in_dir)
def test_correct_answer(self):
+ # Given
user_answer = dedent("""
import java.util.Scanner;
class Test
@@ -194,12 +275,15 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_array_input(self):
+ # Given
self.test_case_data = [{'expected_output': '561',
'expected_input': '5\n6\n1',
'test_case_type': 'stdiobasedtestcase',
@@ -225,12 +309,15 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_incorrect_answer(self):
+ # Given
user_answer = dedent("""
import java.util.Scanner;
class Test
@@ -250,15 +337,18 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
lines_of_error = len(result.get('error')[0].splitlines())
self.assertFalse(result.get('success'))
self.assert_correct_output("Incorrect", result.get('error'))
self.assertTrue(lines_of_error > 1)
def test_error(self):
+ # Given
user_answer = dedent("""
class Test
{
@@ -274,13 +364,16 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
'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 '\n'.join(result.get("error")))
def test_infinite_loop(self):
+ # Given
user_answer = dedent("""
class Test
{public static void main(String[] args){
@@ -298,13 +391,16 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertFalse(result.get("success"))
self.assert_correct_output(self.timeout_msg, result.get("error"))
def test_only_stdout(self):
+ # Given
self.test_case_data = [{'expected_output': '11',
'expected_input': '',
'test_case_type': 'stdiobasedtestcase',
@@ -327,12 +423,15 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_string_input(self):
+ # Given
self.test_case_data = [{'expected_output': 'HelloWorld',
'expected_input': 'Hello\nWorld',
'test_case_type': 'stdiobasedtestcase',
@@ -357,13 +456,16 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get('success'))
def test_file_based_stdout(self):
- self.file_paths = [("/tmp/test.txt", False)]
+ # Given
+ self.file_paths = [(self.f_path, False)]
self.test_case_data = [{'expected_output': '2',
'expected_input': '',
'test_case_type': 'stdiobasedtestcase',
@@ -397,9 +499,11 @@ class JavaStdIOEvaluationTestCases(EvaluatorBaseTest):
'test_case_data': self.test_case_data,
}
+ # When
grader = Grader(self.in_dir)
result = grader.evaluate(kwargs)
+ # Then
self.assertTrue(result.get("success"))
diff --git a/yaksh/evaluator_tests/test_scilab_evaluation.py b/yaksh/evaluator_tests/test_scilab_evaluation.py
index 938d0e5..5a452a3 100644
--- a/yaksh/evaluator_tests/test_scilab_evaluation.py
+++ b/yaksh/evaluator_tests/test_scilab_evaluation.py
@@ -3,7 +3,7 @@ import unittest
import os
import shutil
import tempfile
-
+from textwrap import dedent
from yaksh import grader as gd
from yaksh.grader import Grader
from yaksh.scilab_code_evaluator import ScilabCodeEvaluator
@@ -13,7 +13,38 @@ from yaksh.evaluator_tests.test_python_evaluation import EvaluatorBaseTest
class ScilabEvaluationTestCases(EvaluatorBaseTest):
def setUp(self):
tmp_in_dir_path = tempfile.mkdtemp()
- self.test_case_data = [{"test_case": "scilab_files/test_add.sce",
+ self.tc_data = dedent("""
+ mode(-1)
+ exec("function.sci",-1);
+ i = 0
+ p = add(3,5);
+ correct = (p == 8);
+ if correct then
+ i=i+1
+ end
+ disp("Input submitted 3 and 5")
+ disp("Expected output 8 got " + string(p))
+ p = add(22,-20);
+ correct = (p==2);
+ if correct then
+ i=i+1
+ end
+ disp("Input submitted 22 and -20")
+ disp("Expected output 2 got " + string(p))
+ p =add(91,0);
+ correct = (p==91);
+ if correct then
+ i=i+1
+ end
+ disp("Input submitted 91 and 0")
+ disp("Expected output 91 got " + string(p))
+ if i==3 then
+ exit(5);
+ else
+ exit(3);
+ end
+ """)
+ self.test_case_data = [{"test_case": self.tc_data,
"test_case_type": "standardtestcase",
"weight": 0.0
}]
diff --git a/yaksh/java_code_evaluator.py b/yaksh/java_code_evaluator.py
index a1bb39e..e6dc628 100644
--- a/yaksh/java_code_evaluator.py
+++ b/yaksh/java_code_evaluator.py
@@ -26,18 +26,20 @@ class JavaCodeEvaluator(BaseEvaluator):
self.user_answer = metadata.get('user_answer')
self.file_paths = metadata.get('file_paths')
self.partial_grading = metadata.get('partial_grading')
-
# Set test case data values
self.test_case = test_case_data.get('test_case')
self.weight = test_case_data.get('weight')
def teardown(self):
# Delete the created file.
- os.remove(self.submit_code_path)
+ if os.path.exists(self.submit_code_path):
+ os.remove(self.submit_code_path)
if os.path.exists(self.user_output_path):
os.remove(self.user_output_path)
if os.path.exists(self.ref_output_path):
os.remove(self.ref_output_path)
+ if os.path.exists(self.test_code_path):
+ os.remove(self.test_code_path)
if self.files:
delete_files(self.files)
@@ -57,10 +59,14 @@ class JavaCodeEvaluator(BaseEvaluator):
if self.compiled_user_answer and self.compiled_test_code:
return None
else:
+ # create student code and moderator code file
self.submit_code_path = self.create_submit_code_file('Test.java')
- ref_code_path = self.test_case
- clean_ref_code_path, clean_test_case_path = \
- self._set_test_code_file_path(ref_code_path)
+ self.test_code_path = self.create_submit_code_file('main.java')
+ self.write_to_submit_code_file(self.submit_code_path,
+ self.user_answer
+ )
+ self.write_to_submit_code_file(self.test_code_path, self.test_case)
+ clean_ref_code_path = self.test_code_path
if self.file_paths:
self.files = copy_files(self.file_paths)
if not isfile(clean_ref_code_path):
@@ -71,9 +77,6 @@ class JavaCodeEvaluator(BaseEvaluator):
return False, msg
user_code_directory = os.getcwd() + '/'
- self.write_to_submit_code_file(self.submit_code_path,
- self.user_answer
- )
ref_file_name = (clean_ref_code_path.split('/')[-1]).split('.')[0]
self.user_output_path = self.set_file_paths(user_code_directory,
'Test'
diff --git a/yaksh/java_files/main_array_sum.java b/yaksh/java_files/main_array_sum.java
deleted file mode 100644
index 5eae299..0000000
--- a/yaksh/java_files/main_array_sum.java
+++ /dev/null
@@ -1,36 +0,0 @@
-class main_array_sum
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result);
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result);
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- int result;
- Test t = new Test();
- int x[] = {0,0,0,0,0};
- result = t.array_sum(x);
- System.out.println("Input submitted to the function: {0,0,0,0,0}");
- check(0, result);
- int a[] = {1,2,3,4,5};
- result = t.array_sum(a);
- System.out.println("Input submitted to the function: {1,2,3,4,5}");
- check(15, result);
- int b[] = {1,2,3,0,0};
- result = t.array_sum(b);
- System.out.println("Input submitted to the function: {1,2,3,0,0}");
- check(6, result);
- int c[] = {1,1,1,1,1};
- result = t.array_sum(c);
- System.out.println("Input submitted to the function: {1,1,1,1,1}");
- check(5, result);
- }
-}
diff --git a/yaksh/java_files/main_fact.java b/yaksh/java_files/main_fact.java
deleted file mode 100644
index 325dab6..0000000
--- a/yaksh/java_files/main_fact.java
+++ /dev/null
@@ -1,29 +0,0 @@
-class main_fact
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result);
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result);
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- Test t = new Test();
- int result;
- result = t.factorial(0);
- System.out.println("Input submitted to the function: 0");
- check(1, result);
- result = t.factorial(3);
- System.out.println("Input submitted to the function: 3");
- check(6, result);
- result = t.factorial(4);
- System.out.println("Input submitted to the function: 4");
- check(24, result);
- }
-}
diff --git a/yaksh/java_files/main_great.java b/yaksh/java_files/main_great.java
deleted file mode 100644
index 4bfcb1f..0000000
--- a/yaksh/java_files/main_great.java
+++ /dev/null
@@ -1,39 +0,0 @@
-class main_great
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result);
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result);
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- Test t = new Test();
- int result;
- result = t.greatest(1, 3, 4);
- System.out.println("Input submitted to the function: 1, 3, 4");
- check(4, result);
- result = t.greatest(5, 10, 3);
- System.out.println("Input submitted to the function: 5, 10, 3");
- check(10, result);
- result = t.greatest(6, 1, 4);
- System.out.println("Input submitted to the function: 6, 1, 4");
- check(6, result);
- result = t.greatest(6, 11, 14);
- System.out.println("Input submitted to the function: 6, 11, 14");
- check(14, result);
- result = t.greatest(3, 31, 4);
- System.out.println("Input submitted to the function: 3, 31, 4");
- check(31, result);
- result = t.greatest(26, 13, 3);
- System.out.println("Input submitted to the function: 26, 13, 3");
- check(26, result);
-
- }
-}
diff --git a/yaksh/java_files/main_hello_name.java b/yaksh/java_files/main_hello_name.java
deleted file mode 100644
index 84bb282..0000000
--- a/yaksh/java_files/main_hello_name.java
+++ /dev/null
@@ -1,29 +0,0 @@
-class main_hello_name
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result);
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result);
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- Test t = new Test();
- String result;
- result = t.hello_name("Raj");
- System.out.println("Input submitted to the function: 'Raj'");
- check("hello Raj", result);
- result = t.hello_name("Pratham");
- System.out.println("Input submitted to the function: 'Pratham'");
- check("hello Pratham", result);
- result = t.hello_name("Ram");
- System.out.println("Input submitted to the function: 'Ram'");
- check("hello Ram", result);
- }
-}
diff --git a/yaksh/java_files/main_lastDigit.java b/yaksh/java_files/main_lastDigit.java
deleted file mode 100644
index 05439e2..0000000
--- a/yaksh/java_files/main_lastDigit.java
+++ /dev/null
@@ -1,36 +0,0 @@
-class main_lastDigit
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result+"\n");
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result+"\n");
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- Test t = new Test();
- boolean result;
- result= t.lastDigit(12, 2, 13);
- System.out.println("Input submitted to the function: 12, 2, 13");
- check(true, result);
- result = t.lastDigit(11, 52, 32);
- System.out.println("Input submitted to the function: 11, 52, 32");
- check(true, result);
- result = t.lastDigit(6, 34, 22);
- System.out.println("Input submitted to the function: 6, 34, 22");
- check(false, result);
- result = t.lastDigit(6, 46, 26);
- System.out.println("Input submitted to the function: 63");
- check(true, result);
- result = t.lastDigit(91, 90, 92);
- System.out.println("Input submitted to the function: 91");
- check(false, result);
-
- }
-}
diff --git a/yaksh/java_files/main_moreThan30.java b/yaksh/java_files/main_moreThan30.java
deleted file mode 100644
index 7da31cb..0000000
--- a/yaksh/java_files/main_moreThan30.java
+++ /dev/null
@@ -1,36 +0,0 @@
-class main_moreThan30
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result+"\n");
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result+"\n");
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- Test t = new Test();
- boolean result;
- result= t.moreThan30(30);
- System.out.println("Input submitted to the function: 30");
- check(false, result);
- result = t.moreThan30(151);
- System.out.println("Input submitted to the function: 151");
- check(true, result);
- result = t.moreThan30(66);
- System.out.println("Input submitted to the function: 66");
- check(false, result);
- result = t.moreThan30(63);
- System.out.println("Input submitted to the function: 63");
- check(true, result);
- result = t.moreThan30(91);
- System.out.println("Input submitted to the function: 91");
- check(true, result);
-
- }
-}
diff --git a/yaksh/java_files/main_palindrome.java b/yaksh/java_files/main_palindrome.java
deleted file mode 100644
index c0745f9..0000000
--- a/yaksh/java_files/main_palindrome.java
+++ /dev/null
@@ -1,29 +0,0 @@
-class main_palindrome
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result+"\n");
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result+"\n");
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- Test t = new Test();
- boolean result;
- result= t.palindrome(123);
- System.out.println("Input submitted to the function: 123");
- check(false, result);
- result = t.palindrome(151);
- System.out.println("Input submitted to the function: 151");
- check(true, result);
- result = t.palindrome(23432);
- System.out.println("Input submitted to the function: 23432");
- check(true, result);
- }
-}
diff --git a/yaksh/java_files/main_square.java b/yaksh/java_files/main_square.java
deleted file mode 100644
index 5cb8c35..0000000
--- a/yaksh/java_files/main_square.java
+++ /dev/null
@@ -1,32 +0,0 @@
-class main_square
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result);
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result);
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- Test t = new Test();
- int result, input, output;
- input = 0; output = 0;
- result = t.square_num(input);
- System.out.println("Input submitted to the function: "+input);
- check(output, result);
- input = 5; output = 25;
- result = t.square_num(input);
- System.out.println("Input submitted to the function: "+input);
- check(output, result);
- input = 6; output = 36;
- result = t.square_num(input);
- System.out.println("Input submitted to the function: "+input);
- check(output, result);
- }
-}
diff --git a/yaksh/java_files/read_file.java b/yaksh/java_files/read_file.java
deleted file mode 100644
index 21a5836..0000000
--- a/yaksh/java_files/read_file.java
+++ /dev/null
@@ -1,26 +0,0 @@
-class read_file
-{
- public static <E> void check(E expect, E result)
- {
- if(result.equals(expect))
- {
- System.out.println("Correct:\nOutput expected "+expect+" and got "+result);
- }
- else
- {
- System.out.println("Incorrect:\nOutput expected "+expect+" but got "+result);
- System.exit(1);
- }
- }
- public static void main(String arg[])
- {
- String result = "";
- Test t = new Test();
- try{
- result = t.readFile();}
- catch(Exception e){
- System.out.print(e);
- }
- check("2", result);
- }
-}
diff --git a/yaksh/models.py b/yaksh/models.py
index 35999d3..2bf4a85 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -317,17 +317,14 @@ class Question(models.Model):
def get_test_cases(self, **kwargs):
tc_list = []
- for tc in self.testcase_set.all():
- test_case_type = tc.type
+ for tc in self.testcase_set.values_list("type", flat=True).distinct():
test_case_ctype = ContentType.objects.get(app_label="yaksh",
- model=test_case_type
- )
- test_case = test_case_ctype.get_object_for_this_type(
+ model=tc)
+ test_case = test_case_ctype.get_all_objects_for_this_type(
question=self,
**kwargs
)
- tc_list.append(test_case)
-
+ tc_list.extend(test_case)
return tc_list
def get_test_case(self, **kwargs):
@@ -1154,19 +1151,22 @@ class TestCase(models.Model):
class StandardTestCase(TestCase):
test_case = models.TextField()
weight = models.FloatField(default=1.0)
+ test_case_args = models.TextField(help_text="<b>Command Line arguments for bash only</b>",
+ blank=True)
def get_field_value(self):
return {"test_case_type": "standardtestcase",
"test_case": self.test_case,
- "weight": self.weight}
+ "weight": self.weight,
+ "test_case_args": self.test_case_args}
def __str__(self):
return u'Standard TestCase | Test Case: {0}'.format(self.test_case)
class StdIOBasedTestCase(TestCase):
- expected_input = models.CharField(max_length=100, blank=True)
- expected_output = models.CharField(max_length=100)
+ expected_input = models.TextField(max_length=100, blank=True)
+ expected_output = models.TextField(max_length=100)
weight = models.IntegerField(default=1.0)
def get_field_value(self):
diff --git a/yaksh/scilab_code_evaluator.py b/yaksh/scilab_code_evaluator.py
index 7d54e8b..f5c81b5 100644
--- a/yaksh/scilab_code_evaluator.py
+++ b/yaksh/scilab_code_evaluator.py
@@ -16,7 +16,8 @@ class ScilabCodeEvaluator(BaseEvaluator):
"""Tests the Scilab code obtained from Code Server"""
def __init__(self, metadata, test_case_data):
self.files = []
-
+ self.submit_code_path = ""
+ self.test_code_path = ""
# Set metadata values
self.user_answer = metadata.get('user_answer')
self.file_paths = metadata.get('file_paths')
@@ -28,23 +29,27 @@ class ScilabCodeEvaluator(BaseEvaluator):
def teardown(self):
# Delete the created file.
- os.remove(self.submit_code_path)
+ if os.path.exists(self.submit_code_path):
+ os.remove(self.submit_code_path)
+ if os.path.exists(self.test_code_path):
+ os.remove(self.test_code_path)
if self.files:
delete_files(self.files)
def check_code(self):
self.submit_code_path = self.create_submit_code_file('function.sci')
+ self.test_code_path = self.create_submit_code_file('main.sci')
if self.file_paths:
self.files = copy_files(self.file_paths)
ref_code_path = self.test_case
- clean_ref_path, clean_test_case_path = \
- self._set_test_code_file_path(ref_code_path)
+ clean_ref_path, clean_test_case_path = self.test_code_path, None
self.user_answer, terminate_commands = \
self._remove_scilab_exit(self.user_answer.lstrip())
success = False
mark_fraction = 0.0
self.write_to_submit_code_file(self.submit_code_path, self.user_answer)
+ self.write_to_submit_code_file(self.test_code_path, self.test_case)
# Throw message if there are commmands that terminates scilab
add_err = ""
if terminate_commands:
diff --git a/yaksh/scilab_files/test_add.sce b/yaksh/scilab_files/test_add.sce
deleted file mode 100644
index a317cdb..0000000
--- a/yaksh/scilab_files/test_add.sce
+++ /dev/null
@@ -1,29 +0,0 @@
-mode(-1)
-exec("function.sci",-1);
-i = 0
-p = add(3,5);
-correct = (p == 8);
-if correct then
- i=i+1
-end
-disp("Input submitted 3 and 5")
-disp("Expected output 8 got " + string(p))
-p = add(22,-20);
-correct = (p==2);
-if correct then
- i=i+1
-end
-disp("Input submitted 22 and -20")
-disp("Expected output 2 got " + string(p))
-p =add(91,0);
-correct = (p==91);
-if correct then
- i=i+1
-end
-disp("Input submitted 91 and 0")
-disp("Expected output 91 got " + string(p))
-if i==3 then
- exit(5);
-else
- exit(3);
-end
diff --git a/yaksh/templates/yaksh/add_question.html b/yaksh/templates/yaksh/add_question.html
index 57e5e78..77a7b3a 100644
--- a/yaksh/templates/yaksh/add_question.html
+++ b/yaksh/templates/yaksh/add_question.html
@@ -34,8 +34,9 @@
<input type="checkbox" name="extract" value="{{file.id}}" >{% if file.extract %} dont extract{% else %}
extract{% endif %}</input>&nbsp;&nbsp;
<input type="checkbox" name="hide" value="{{file.id}}" >{% if file.hide %} show{% else %}
- hide{% endif %}</input><br>
+ hide{% endif %}</input>
<a href="{{file.file.url}}">{{ file.file.name }}</a>
+ <br>
{% endfor %}{% endif %}
</table></center>
{% for formset in formsets %}
diff --git a/yaksh/templates/yaksh/question.html b/yaksh/templates/yaksh/question.html
index 0279f0d..8b2012c 100644
--- a/yaksh/templates/yaksh/question.html
+++ b/yaksh/templates/yaksh/question.html
@@ -140,9 +140,9 @@ function call_skip(url)
<div class="panel-heading">
<h4><u> {{ question.summary }}
{% if question.type == "mcq" %}
- (MCQ)
+ (Multiple Choice Questions)
{% elif question.type == "mcc" %}
- (MCC)
+ (Multiple Correct Choices)
{% elif question.type == "code" %}
(PROGRAMMING)
{% elif question.type == "upload" %}
diff --git a/yaksh/test_models.py b/yaksh/test_models.py
index 6764dd0..e95528b 100644
--- a/yaksh/test_models.py
+++ b/yaksh/test_models.py
@@ -145,6 +145,7 @@ class QuestionTestCases(unittest.TestCase):
self.user_answer = "demo_answer"
self.test_case_upload_data = [{"test_case": "assert fact(3)==6",
"test_case_type": "standardtestcase",
+ "test_case_args": "",
"weight": 1.0
}]
questions_data = [{"snippet": "def fact()", "active": True,
@@ -895,6 +896,7 @@ class TestCaseTestCases(unittest.TestCase):
},
'test_case_data': [{'test_case': 'assert myfunc(12, 13) == 15',
'test_case_type': 'standardtestcase',
+ 'test_case_args': "",
'weight': 1.0
}]
}