summaryrefslogtreecommitdiff
path: root/yaksh/compare_stdio.py
diff options
context:
space:
mode:
authormahesh2017-05-13 02:14:13 +0530
committermahesh2017-05-13 02:14:13 +0530
commit3bbaa1e17778fb3790a9546d365444c38df31e1a (patch)
tree1c10670f92fb52e7eba6e11e12c3cb9d03825dd4 /yaksh/compare_stdio.py
parentd6a757f14d6b76c8124d52057cc981403d28d71a (diff)
downloadonline_test-3bbaa1e17778fb3790a9546d365444c38df31e1a.tar.gz
online_test-3bbaa1e17778fb3790a9546d365444c38df31e1a.tar.bz2
online_test-3bbaa1e17778fb3790a9546d365444c38df31e1a.zip
added pretty stdio functionality for all languages.
Diffstat (limited to 'yaksh/compare_stdio.py')
-rw-r--r--yaksh/compare_stdio.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/yaksh/compare_stdio.py b/yaksh/compare_stdio.py
new file mode 100644
index 0000000..ba258c3
--- /dev/null
+++ b/yaksh/compare_stdio.py
@@ -0,0 +1,43 @@
+try:
+ from itertools import zip_longest
+except ImportError:
+ from itertools import izip_longest as zip_longest
+
+class CompareOutputs(object):
+
+ def _incorrect_user_lines(self, exp_lines, user_lines):
+ err_line_no = []
+ for i, (expected_line, user_line) in enumerate(zip_longest(exp_lines, user_lines)):
+ if not user_line or not expected_line:
+ err_line_no.append(i)
+ else:
+ if user_line.strip() != expected_line.strip():
+ err_line_no.append(i)
+ return err_line_no
+
+ def compare_outputs(self, expected_output, user_output,given_input=None):
+ given_lines = user_output.splitlines()
+ exp_lines = expected_output.splitlines()
+ # if given_input:
+ # given_input = given_input.splitlines()
+ msg = {"given_input":given_input,
+ "expected_output": exp_lines,
+ "user_output":given_lines
+ }
+ ng = len(given_lines)
+ ne = len(exp_lines)
+ if ng != ne:
+ err_line_no = self._incorrect_user_lines(exp_lines, given_lines)
+ msg["error_no"] = err_line_no
+ msg["error"] = "We had expected {0} number of lines. We got {1} number of lines.".format(ne, ng)
+ return False, msg
+ else:
+ err_line_no = self._incorrect_user_lines(exp_lines, given_lines)
+ if err_line_no:
+ msg["error_no"] = err_line_no
+ msg["error"] = "Line number(s) {0} did not match."\
+ .format(", ".join(map(str,[x+1 for x in err_line_no])))
+ return False, msg
+ else:
+ msg["error"] = "Correct answer"
+ return True, msg