Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Codio-Eval - An enhanced test-case based student-program evaluation for Codio.com

This project provides eval.py, an evaluation script which provides an approximate equivalent of Codio's built-in Standard Code Test assessment, but with finer-grained control.

The enhancements over Codio's Standard Code Test are:

  • per-testcase points
  • per-testcase time limits, with partial credit if just at/above the time limit
  • per-testcase control over whether to show difference between expected and actual output
  • per-testcase control over whether to show input if the output is incorrect
  • parallel evaluation if the test case is small enough

The per-testcase control permits a single Run button in the Guide to process both sample and hidden test cases, while parallel evaluation reduces the wait for results when test cases take multiple seconds each to execute.

Setup

To use codio-eval, you will need to

  • copy the evaluation script eval.py into .guides/secure
  • create input and expected-output files for each test case in an appriopriate subdirectory of .guides/secure
  • create or adapt a bash script to invoke eval.py with appropriate arguments (samples for Java, Python, and JavaScript [nodejs] are included)
  • create an Advanced Code Test assessment which invokes the wrapper bash script

Copy Evaluation Script

All files in this repository are already in the correct subdirectory for a Codio workspace, so one approach is to download the Github-generated tarball and simple extract it in your assignment's workspace. Or you can manually copy .guides/secure/eval.py in this repo to the same subdirectory in your assignment.

Create Input/Output Files

For each test case, you will need to create two files - an input file and an expected output file. You may optionally create a third file containing feedback text, which will be displayed if the actual output differs from the expected output.

The input files are specified in the invocation of eval.py. The script finds the corresponding output file for each input by replacing "in" in the file's base name by "out". Feedback files are similarly found by first attempting to replace "input" by "feedback" and then just "in" by feedback.

It is highly recommended that all of the testcase files and the wrapper script (next section) for a particular coding problem be placed in a problem-specific subdirectory of .guides/secure/.

Create/Adapt Wrapper Script

The wrapper script is used to perform any pre-execution tasks such as compiling the student's submission or restoring any files the student should not change, and then invoke eval.py to perform the actual program runs and comparison of actual output against expected output. See .guides/*_example/eval.sh for sample wrapper scripts.

Create Advanced Code Test Assessment

To run the test cases you have set up above, you will need to add one or more Advanced Code Test assessments to the guide page for the coding problem.

Configure each assessment as follows:

  • "General" tab: name and instructions as desired

  • "Execution" tab:

-- Language = Custom

-- Command = "bash .guides/secure/{SUBDIR}/eval.sh"

-- Timeout = 3 * sum of per-testcase timeouts or higher (the script re-runs a test case twice if it takes between 100% and 110% of the specified time limit)

  • "Grading" tab: Enable "Allow Partial Points". Set points, options, and rationale as desired.

  • "Parameters" tab: normally left blank

  • "Metadata" tab: fill out as usual

  • "Files" tab: be sure to include .guides/secure/eval.py, .guides/secure/{SUBDIR}/*, as well as "run.sh" and "input" in the problem's subdirectory under the workspace top-level directory (if using the optional Run or Debug options detailed below).

Optional: Run on Custom Input

Create a file named "input" in the subdirectory containing the code files to be edited by the student, and fill it with whatever default value is appropriate (such as the first example input described in the instructions). Add an invocation like

{Run with custom input}(bash {subdir}/run.sh)

to the guide.

Optional: Configure Debugger

In the menu Tools|Debugger Settings, create a new entry named e.g. Example, and set it to run the student's code with file "{subdir}/input". Then add

{Debug with custom input|debugger}(Example)

to the guide.

Optional: Code Visualizer

If the code for the problem is in a supported language, can be set up such that it can be run without input (some examples follow), and is sufficiently small (fewer than about 300 program steps), you can add a button to run the student's code under the visualizer. Add

[Code Visualizer](open_tutor {subdir}/MainFile.ext)

to the guide.

About

Student submission evaluation script for codio.com assignments

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Codio-Eval - An enhanced test-case based student-program evaluation for Codio.com

This project provides eval.py, an evaluation script which provides an approximate equivalent of Codio's built-in Standard Code Test assessment, but with finer-grained control.

The enhancements over Codio's Standard Code Test are:

  • per-testcase points
  • per-testcase time limits, with partial credit if just at/above the time limit
  • per-testcase control over whether to show difference between expected and actual output
  • per-testcase control over whether to show input if the output is incorrect
  • parallel evaluation if the test case is small enough

The per-testcase control permits a single Run button in the Guide to process both sample and hidden test cases, while parallel evaluation reduces the wait for results when test cases take multiple seconds each to execute.

Setup

To use codio-eval, you will need to

  • copy the evaluation script eval.py into .guides/secure
  • create input and expected-output files for each test case in an appriopriate subdirectory of .guides/secure
  • create or adapt a bash script to invoke eval.py with appropriate arguments (samples for Java, Python, and JavaScript [nodejs] are included)
  • create an Advanced Code Test assessment which invokes the wrapper bash script

Copy Evaluation Script

All files in this repository are already in the correct subdirectory for a Codio workspace, so one approach is to download the Github-generated tarball and simple extract it in your assignment's workspace. Or you can manually copy .guides/secure/eval.py in this repo to the same subdirectory in your assignment.

Create Input/Output Files

For each test case, you will need to create two files - an input file and an expected output file. You may optionally create a third file containing feedback text, which will be displayed if the actual output differs from the expected output.

The input files are specified in the invocation of eval.py. The script finds the corresponding output file for each input by replacing "in" in the file's base name by "out". Feedback files are similarly found by first attempting to replace "input" by "feedback" and then just "in" by feedback.

It is highly recommended that all of the testcase files and the wrapper script (next section) for a particular coding problem be placed in a problem-specific subdirectory of .guides/secure/.

Create/Adapt Wrapper Script

The wrapper script is used to perform any pre-execution tasks such as compiling the student's submission or restoring any files the student should not change, and then invoke eval.py to perform the actual program runs and comparison of actual output against expected output. See .guides/*_example/eval.sh for sample wrapper scripts.

Create Advanced Code Test Assessment

To run the test cases you have set up above, you will need to add one or more Advanced Code Test assessments to the guide page for the coding problem.

Configure each assessment as follows:

  • "General" tab: name and instructions as desired

  • "Execution" tab:

-- Language = Custom

-- Command = "bash .guides/secure/{SUBDIR}/eval.sh"

-- Timeout = 3 * sum of per-testcase timeouts or higher (the script re-runs a test case twice if it takes between 100% and 110% of the specified time limit)

  • "Grading" tab: Enable "Allow Partial Points". Set points, options, and rationale as desired.

  • "Parameters" tab: normally left blank

  • "Metadata" tab: fill out as usual

  • "Files" tab: be sure to include .guides/secure/eval.py, .guides/secure/{SUBDIR}/*, as well as "run.sh" and "input" in the problem's subdirectory under the workspace top-level directory (if using the optional Run or Debug options detailed below).

Optional: Run on Custom Input

Create a file named "input" in the subdirectory containing the code files to be edited by the student, and fill it with whatever default value is appropriate (such as the first example input described in the instructions). Add an invocation like

{Run with custom input}(bash {subdir}/run.sh)

to the guide.

Optional: Configure Debugger

In the menu Tools|Debugger Settings, create a new entry named e.g. Example, and set it to run the student's code with file "{subdir}/input". Then add

{Debug with custom input|debugger}(Example)

to the guide.

Optional: Code Visualizer

If the code for the problem is in a supported language, can be set up such that it can be run without input (some examples follow), and is sufficiently small (fewer than about 300 program steps), you can add a button to run the student's code under the visualizer. Add

[Code Visualizer](open_tutor {subdir}/MainFile.ext)

to the guide.

About

Student submission evaluation script for codio.com assignments

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Codio-Eval - An enhanced test-case based student-program evaluation for Codio.com

This project provides eval.py, an evaluation script which provides an approximate equivalent of Codio's built-in Standard Code Test assessment, but with finer-grained control.

The enhancements over Codio's Standard Code Test are:

  • per-testcase points
  • per-testcase time limits, with partial credit if just at/above the time limit
  • per-testcase control over whether to show difference between expected and actual output
  • per-testcase control over whether to show input if the output is incorrect
  • parallel evaluation if the test case is small enough

The per-testcase control permits a single Run button in the Guide to process both sample and hidden test cases, while parallel evaluation reduces the wait for results when test cases take multiple seconds each to execute.

Setup

To use codio-eval, you will need to

  • copy the evaluation script eval.py into .guides/secure
  • create input and expected-output files for each test case in an appriopriate subdirectory of .guides/secure
  • create or adapt a bash script to invoke eval.py with appropriate arguments (samples for Java, Python, and JavaScript [nodejs] are included)
  • create an Advanced Code Test assessment which invokes the wrapper bash script

Copy Evaluation Script

All files in this repository are already in the correct subdirectory for a Codio workspace, so one approach is to download the Github-generated tarball and simple extract it in your assignment's workspace. Or you can manually copy .guides/secure/eval.py in this repo to the same subdirectory in your assignment.

Create Input/Output Files

For each test case, you will need to create two files - an input file and an expected output file. You may optionally create a third file containing feedback text, which will be displayed if the actual output differs from the expected output.

The input files are specified in the invocation of eval.py. The script finds the corresponding output file for each input by replacing "in" in the file's base name by "out". Feedback files are similarly found by first attempting to replace "input" by "feedback" and then just "in" by feedback.

It is highly recommended that all of the testcase files and the wrapper script (next section) for a particular coding problem be placed in a problem-specific subdirectory of .guides/secure/.

Create/Adapt Wrapper Script

The wrapper script is used to perform any pre-execution tasks such as compiling the student's submission or restoring any files the student should not change, and then invoke eval.py to perform the actual program runs and comparison of actual output against expected output. See .guides/*_example/eval.sh for sample wrapper scripts.

Create Advanced Code Test Assessment

To run the test cases you have set up above, you will need to add one or more Advanced Code Test assessments to the guide page for the coding problem.

Configure each assessment as follows:

  • "General" tab: name and instructions as desired

  • "Execution" tab:

-- Language = Custom

-- Command = "bash .guides/secure/{SUBDIR}/eval.sh"

-- Timeout = 3 * sum of per-testcase timeouts or higher (the script re-runs a test case twice if it takes between 100% and 110% of the specified time limit)

  • "Grading" tab: Enable "Allow Partial Points". Set points, options, and rationale as desired.

  • "Parameters" tab: normally left blank

  • "Metadata" tab: fill out as usual

  • "Files" tab: be sure to include .guides/secure/eval.py, .guides/secure/{SUBDIR}/*, as well as "run.sh" and "input" in the problem's subdirectory under the workspace top-level directory (if using the optional Run or Debug options detailed below).

Optional: Run on Custom Input

Create a file named "input" in the subdirectory containing the code files to be edited by the student, and fill it with whatever default value is appropriate (such as the first example input described in the instructions). Add an invocation like

{Run with custom input}(bash {subdir}/run.sh)

to the guide.

Optional: Configure Debugger

In the menu Tools|Debugger Settings, create a new entry named e.g. Example, and set it to run the student's code with file "{subdir}/input". Then add

{Debug with custom input|debugger}(Example)

to the guide.

Optional: Code Visualizer

If the code for the problem is in a supported language, can be set up such that it can be run without input (some examples follow), and is sufficiently small (fewer than about 300 program steps), you can add a button to run the student's code under the visualizer. Add

[Code Visualizer](open_tutor {subdir}/MainFile.ext)

to the guide.

About

Student submission evaluation script for codio.com assignments

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Codio-Eval - An enhanced test-case based student-program evaluation for Codio.com

This project provides eval.py, an evaluation script which provides an approximate equivalent of Codio's built-in Standard Code Test assessment, but with finer-grained control.

The enhancements over Codio's Standard Code Test are:

  • per-testcase points
  • per-testcase time limits, with partial credit if just at/above the time limit
  • per-testcase control over whether to show difference between expected and actual output
  • per-testcase control over whether to show input if the output is incorrect
  • parallel evaluation if the test case is small enough

The per-testcase control permits a single Run button in the Guide to process both sample and hidden test cases, while parallel evaluation reduces the wait for results when test cases take multiple seconds each to execute.

Setup

To use codio-eval, you will need to

  • copy the evaluation script eval.py into .guides/secure
  • create input and expected-output files for each test case in an appriopriate subdirectory of .guides/secure
  • create or adapt a bash script to invoke eval.py with appropriate arguments (samples for Java, Python, and JavaScript [nodejs] are included)
  • create an Advanced Code Test assessment which invokes the wrapper bash script

Copy Evaluation Script

All files in this repository are already in the correct subdirectory for a Codio workspace, so one approach is to download the Github-generated tarball and simple extract it in your assignment's workspace. Or you can manually copy .guides/secure/eval.py in this repo to the same subdirectory in your assignment.

Create Input/Output Files

For each test case, you will need to create two files - an input file and an expected output file. You may optionally create a third file containing feedback text, which will be displayed if the actual output differs from the expected output.

The input files are specified in the invocation of eval.py. The script finds the corresponding output file for each input by replacing "in" in the file's base name by "out". Feedback files are similarly found by first attempting to replace "input" by "feedback" and then just "in" by feedback.

It is highly recommended that all of the testcase files and the wrapper script (next section) for a particular coding problem be placed in a problem-specific subdirectory of .guides/secure/.

Create/Adapt Wrapper Script

The wrapper script is used to perform any pre-execution tasks such as compiling the student's submission or restoring any files the student should not change, and then invoke eval.py to perform the actual program runs and comparison of actual output against expected output. See .guides/*_example/eval.sh for sample wrapper scripts.

Create Advanced Code Test Assessment

To run the test cases you have set up above, you will need to add one or more Advanced Code Test assessments to the guide page for the coding problem.

Configure each assessment as follows:

  • "General" tab: name and instructions as desired

  • "Execution" tab:

-- Language = Custom

-- Command = "bash .guides/secure/{SUBDIR}/eval.sh"

-- Timeout = 3 * sum of per-testcase timeouts or higher (the script re-runs a test case twice if it takes between 100% and 110% of the specified time limit)

  • "Grading" tab: Enable "Allow Partial Points". Set points, options, and rationale as desired.

  • "Parameters" tab: normally left blank

  • "Metadata" tab: fill out as usual

  • "Files" tab: be sure to include .guides/secure/eval.py, .guides/secure/{SUBDIR}/*, as well as "run.sh" and "input" in the problem's subdirectory under the workspace top-level directory (if using the optional Run or Debug options detailed below).

Optional: Run on Custom Input

Create a file named "input" in the subdirectory containing the code files to be edited by the student, and fill it with whatever default value is appropriate (such as the first example input described in the instructions). Add an invocation like

{Run with custom input}(bash {subdir}/run.sh)

to the guide.

Optional: Configure Debugger

In the menu Tools|Debugger Settings, create a new entry named e.g. Example, and set it to run the student's code with file "{subdir}/input". Then add

{Debug with custom input|debugger}(Example)

to the guide.

Optional: Code Visualizer

If the code for the problem is in a supported language, can be set up such that it can be run without input (some examples follow), and is sufficiently small (fewer than about 300 program steps), you can add a button to run the student's code under the visualizer. Add

[Code Visualizer](open_tutor {subdir}/MainFile.ext)

to the guide.

About

Student submission evaluation script for codio.com assignments

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Codio-Eval - An enhanced test-case based student-program evaluation for Codio.com

This project provides eval.py, an evaluation script which provides an approximate equivalent of Codio's built-in Standard Code Test assessment, but with finer-grained control.

The enhancements over Codio's Standard Code Test are:

  • per-testcase points
  • per-testcase time limits, with partial credit if just at/above the time limit
  • per-testcase control over whether to show difference between expected and actual output
  • per-testcase control over whether to show input if the output is incorrect
  • parallel evaluation if the test case is small enough

The per-testcase control permits a single Run button in the Guide to process both sample and hidden test cases, while parallel evaluation reduces the wait for results when test cases take multiple seconds each to execute.

Setup

To use codio-eval, you will need to

  • copy the evaluation script eval.py into .guides/secure
  • create input and expected-output files for each test case in an appriopriate subdirectory of .guides/secure
  • create or adapt a bash script to invoke eval.py with appropriate arguments (samples for Java, Python, and JavaScript [nodejs] are included)
  • create an Advanced Code Test assessment which invokes the wrapper bash script

Copy Evaluation Script

All files in this repository are already in the correct subdirectory for a Codio workspace, so one approach is to download the Github-generated tarball and simple extract it in your assignment's workspace. Or you can manually copy .guides/secure/eval.py in this repo to the same subdirectory in your assignment.

Create Input/Output Files

For each test case, you will need to create two files - an input file and an expected output file. You may optionally create a third file containing feedback text, which will be displayed if the actual output differs from the expected output.

The input files are specified in the invocation of eval.py. The script finds the corresponding output file for each input by replacing "in" in the file's base name by "out". Feedback files are similarly found by first attempting to replace "input" by "feedback" and then just "in" by feedback.

It is highly recommended that all of the testcase files and the wrapper script (next section) for a particular coding problem be placed in a problem-specific subdirectory of .guides/secure/.

Create/Adapt Wrapper Script

The wrapper script is used to perform any pre-execution tasks such as compiling the student's submission or restoring any files the student should not change, and then invoke eval.py to perform the actual program runs and comparison of actual output against expected output. See .guides/*_example/eval.sh for sample wrapper scripts.

Create Advanced Code Test Assessment

To run the test cases you have set up above, you will need to add one or more Advanced Code Test assessments to the guide page for the coding problem.

Configure each assessment as follows:

  • "General" tab: name and instructions as desired

  • "Execution" tab:

-- Language = Custom

-- Command = "bash .guides/secure/{SUBDIR}/eval.sh"

-- Timeout = 3 * sum of per-testcase timeouts or higher (the script re-runs a test case twice if it takes between 100% and 110% of the specified time limit)

  • "Grading" tab: Enable "Allow Partial Points". Set points, options, and rationale as desired.

  • "Parameters" tab: normally left blank

  • "Metadata" tab: fill out as usual

  • "Files" tab: be sure to include .guides/secure/eval.py, .guides/secure/{SUBDIR}/*, as well as "run.sh" and "input" in the problem's subdirectory under the workspace top-level directory (if using the optional Run or Debug options detailed below).

Optional: Run on Custom Input

Create a file named "input" in the subdirectory containing the code files to be edited by the student, and fill it with whatever default value is appropriate (such as the first example input described in the instructions). Add an invocation like

{Run with custom input}(bash {subdir}/run.sh)

to the guide.

Optional: Configure Debugger

In the menu Tools|Debugger Settings, create a new entry named e.g. Example, and set it to run the student's code with file "{subdir}/input". Then add

{Debug with custom input|debugger}(Example)

to the guide.

Optional: Code Visualizer

If the code for the problem is in a supported language, can be set up such that it can be run without input (some examples follow), and is sufficiently small (fewer than about 300 program steps), you can add a button to run the student's code under the visualizer. Add

[Code Visualizer](open_tutor {subdir}/MainFile.ext)

to the guide.

About

Student submission evaluation script for codio.com assignments

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Codio-Eval - An enhanced test-case based student-program evaluation for Codio.com

This project provides eval.py, an evaluation script which provides an approximate equivalent of Codio's built-in Standard Code Test assessment, but with finer-grained control.

The enhancements over Codio's Standard Code Test are:

  • per-testcase points
  • per-testcase time limits, with partial credit if just at/above the time limit
  • per-testcase control over whether to show difference between expected and actual output
  • per-testcase control over whether to show input if the output is incorrect
  • parallel evaluation if the test case is small enough

The per-testcase control permits a single Run button in the Guide to process both sample and hidden test cases, while parallel evaluation reduces the wait for results when test cases take multiple seconds each to execute.

Setup

To use codio-eval, you will need to

  • copy the evaluation script eval.py into .guides/secure
  • create input and expected-output files for each test case in an appriopriate subdirectory of .guides/secure
  • create or adapt a bash script to invoke eval.py with appropriate arguments (samples for Java, Python, and JavaScript [nodejs] are included)
  • create an Advanced Code Test assessment which invokes the wrapper bash script

Copy Evaluation Script

All files in this repository are already in the correct subdirectory for a Codio workspace, so one approach is to download the Github-generated tarball and simple extract it in your assignment's workspace. Or you can manually copy .guides/secure/eval.py in this repo to the same subdirectory in your assignment.

Create Input/Output Files

For each test case, you will need to create two files - an input file and an expected output file. You may optionally create a third file containing feedback text, which will be displayed if the actual output differs from the expected output.

The input files are specified in the invocation of eval.py. The script finds the corresponding output file for each input by replacing "in" in the file's base name by "out". Feedback files are similarly found by first attempting to replace "input" by "feedback" and then just "in" by feedback.

It is highly recommended that all of the testcase files and the wrapper script (next section) for a particular coding problem be placed in a problem-specific subdirectory of .guides/secure/.

Create/Adapt Wrapper Script

The wrapper script is used to perform any pre-execution tasks such as compiling the student's submission or restoring any files the student should not change, and then invoke eval.py to perform the actual program runs and comparison of actual output against expected output. See .guides/*_example/eval.sh for sample wrapper scripts.

Create Advanced Code Test Assessment

To run the test cases you have set up above, you will need to add one or more Advanced Code Test assessments to the guide page for the coding problem.

Configure each assessment as follows:

  • "General" tab: name and instructions as desired

  • "Execution" tab:

-- Language = Custom

-- Command = "bash .guides/secure/{SUBDIR}/eval.sh"

-- Timeout = 3 * sum of per-testcase timeouts or higher (the script re-runs a test case twice if it takes between 100% and 110% of the specified time limit)

  • "Grading" tab: Enable "Allow Partial Points". Set points, options, and rationale as desired.

  • "Parameters" tab: normally left blank

  • "Metadata" tab: fill out as usual

  • "Files" tab: be sure to include .guides/secure/eval.py, .guides/secure/{SUBDIR}/*, as well as "run.sh" and "input" in the problem's subdirectory under the workspace top-level directory (if using the optional Run or Debug options detailed below).

Optional: Run on Custom Input

Create a file named "input" in the subdirectory containing the code files to be edited by the student, and fill it with whatever default value is appropriate (such as the first example input described in the instructions). Add an invocation like

{Run with custom input}(bash {subdir}/run.sh)

to the guide.

Optional: Configure Debugger

In the menu Tools|Debugger Settings, create a new entry named e.g. Example, and set it to run the student's code with file "{subdir}/input". Then add

{Debug with custom input|debugger}(Example)

to the guide.

Optional: Code Visualizer

If the code for the problem is in a supported language, can be set up such that it can be run without input (some examples follow), and is sufficiently small (fewer than about 300 program steps), you can add a button to run the student's code under the visualizer. Add

[Code Visualizer](open_tutor {subdir}/MainFile.ext)

to the guide.

About

Student submission evaluation script for codio.com assignments

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Codio-Eval - An enhanced test-case based student-program evaluation for Codio.com

This project provides eval.py, an evaluation script which provides an approximate equivalent of Codio's built-in Standard Code Test assessment, but with finer-grained control.

The enhancements over Codio's Standard Code Test are:

  • per-testcase points
  • per-testcase time limits, with partial credit if just at/above the time limit
  • per-testcase control over whether to show difference between expected and actual output
  • per-testcase control over whether to show input if the output is incorrect
  • parallel evaluation if the test case is small enough

The per-testcase control permits a single Run button in the Guide to process both sample and hidden test cases, while parallel evaluation reduces the wait for results when test cases take multiple seconds each to execute.

Setup

To use codio-eval, you will need to

  • copy the evaluation script eval.py into .guides/secure
  • create input and expected-output files for each test case in an appriopriate subdirectory of .guides/secure
  • create or adapt a bash script to invoke eval.py with appropriate arguments (samples for Java, Python, and JavaScript [nodejs] are included)
  • create an Advanced Code Test assessment which invokes the wrapper bash script

Copy Evaluation Script

All files in this repository are already in the correct subdirectory for a Codio workspace, so one approach is to download the Github-generated tarball and simple extract it in your assignment's workspace. Or you can manually copy .guides/secure/eval.py in this repo to the same subdirectory in your assignment.

Create Input/Output Files

For each test case, you will need to create two files - an input file and an expected output file. You may optionally create a third file containing feedback text, which will be displayed if the actual output differs from the expected output.

The input files are specified in the invocation of eval.py. The script finds the corresponding output file for each input by replacing "in" in the file's base name by "out". Feedback files are similarly found by first attempting to replace "input" by "feedback" and then just "in" by feedback.

It is highly recommended that all of the testcase files and the wrapper script (next section) for a particular coding problem be placed in a problem-specific subdirectory of .guides/secure/.

Create/Adapt Wrapper Script

The wrapper script is used to perform any pre-execution tasks such as compiling the student's submission or restoring any files the student should not change, and then invoke eval.py to perform the actual program runs and comparison of actual output against expected output. See .guides/*_example/eval.sh for sample wrapper scripts.

Create Advanced Code Test Assessment

To run the test cases you have set up above, you will need to add one or more Advanced Code Test assessments to the guide page for the coding problem.

Configure each assessment as follows:

  • "General" tab: name and instructions as desired

  • "Execution" tab:

-- Language = Custom

-- Command = "bash .guides/secure/{SUBDIR}/eval.sh"

-- Timeout = 3 * sum of per-testcase timeouts or higher (the script re-runs a test case twice if it takes between 100% and 110% of the specified time limit)

  • "Grading" tab: Enable "Allow Partial Points". Set points, options, and rationale as desired.

  • "Parameters" tab: normally left blank

  • "Metadata" tab: fill out as usual

  • "Files" tab: be sure to include .guides/secure/eval.py, .guides/secure/{SUBDIR}/*, as well as "run.sh" and "input" in the problem's subdirectory under the workspace top-level directory (if using the optional Run or Debug options detailed below).

Optional: Run on Custom Input

Create a file named "input" in the subdirectory containing the code files to be edited by the student, and fill it with whatever default value is appropriate (such as the first example input described in the instructions). Add an invocation like

{Run with custom input}(bash {subdir}/run.sh)

to the guide.

Optional: Configure Debugger

In the menu Tools|Debugger Settings, create a new entry named e.g. Example, and set it to run the student's code with file "{subdir}/input". Then add

{Debug with custom input|debugger}(Example)

to the guide.

Optional: Code Visualizer

If the code for the problem is in a supported language, can be set up such that it can be run without input (some examples follow), and is sufficiently small (fewer than about 300 program steps), you can add a button to run the student's code under the visualizer. Add

[Code Visualizer](open_tutor {subdir}/MainFile.ext)

to the guide.

About

Student submission evaluation script for codio.com assignments

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Codio-Eval - An enhanced test-case based student-program evaluation for Codio.com

This project provides eval.py, an evaluation script which provides an approximate equivalent of Codio's built-in Standard Code Test assessment, but with finer-grained control.

The enhancements over Codio's Standard Code Test are:

  • per-testcase points
  • per-testcase time limits, with partial credit if just at/above the time limit
  • per-testcase control over whether to show difference between expected and actual output
  • per-testcase control over whether to show input if the output is incorrect
  • parallel evaluation if the test case is small enough

The per-testcase control permits a single Run button in the Guide to process both sample and hidden test cases, while parallel evaluation reduces the wait for results when test cases take multiple seconds each to execute.

Setup

To use codio-eval, you will need to

  • copy the evaluation script eval.py into .guides/secure
  • create input and expected-output files for each test case in an appriopriate subdirectory of .guides/secure
  • create or adapt a bash script to invoke eval.py with appropriate arguments (samples for Java, Python, and JavaScript [nodejs] are included)
  • create an Advanced Code Test assessment which invokes the wrapper bash script

Copy Evaluation Script

All files in this repository are already in the correct subdirectory for a Codio workspace, so one approach is to download the Github-generated tarball and simple extract it in your assignment's workspace. Or you can manually copy .guides/secure/eval.py in this repo to the same subdirectory in your assignment.

Create Input/Output Files

For each test case, you will need to create two files - an input file and an expected output file. You may optionally create a third file containing feedback text, which will be displayed if the actual output differs from the expected output.

The input files are specified in the invocation of eval.py. The script finds the corresponding output file for each input by replacing "in" in the file's base name by "out". Feedback files are similarly found by first attempting to replace "input" by "feedback" and then just "in" by feedback.

It is highly recommended that all of the testcase files and the wrapper script (next section) for a particular coding problem be placed in a problem-specific subdirectory of .guides/secure/.

Create/Adapt Wrapper Script

The wrapper script is used to perform any pre-execution tasks such as compiling the student's submission or restoring any files the student should not change, and then invoke eval.py to perform the actual program runs and comparison of actual output against expected output. See .guides/*_example/eval.sh for sample wrapper scripts.

Create Advanced Code Test Assessment

To run the test cases you have set up above, you will need to add one or more Advanced Code Test assessments to the guide page for the coding problem.

Configure each assessment as follows:

  • "General" tab: name and instructions as desired

  • "Execution" tab:

-- Language = Custom

-- Command = "bash .guides/secure/{SUBDIR}/eval.sh"

-- Timeout = 3 * sum of per-testcase timeouts or higher (the script re-runs a test case twice if it takes between 100% and 110% of the specified time limit)

  • "Grading" tab: Enable "Allow Partial Points". Set points, options, and rationale as desired.

  • "Parameters" tab: normally left blank

  • "Metadata" tab: fill out as usual

  • "Files" tab: be sure to include .guides/secure/eval.py, .guides/secure/{SUBDIR}/*, as well as "run.sh" and "input" in the problem's subdirectory under the workspace top-level directory (if using the optional Run or Debug options detailed below).

Optional: Run on Custom Input

Create a file named "input" in the subdirectory containing the code files to be edited by the student, and fill it with whatever default value is appropriate (such as the first example input described in the instructions). Add an invocation like

{Run with custom input}(bash {subdir}/run.sh)

to the guide.

Optional: Configure Debugger

In the menu Tools|Debugger Settings, create a new entry named e.g. Example, and set it to run the student's code with file "{subdir}/input". Then add

{Debug with custom input|debugger}(Example)

to the guide.

Optional: Code Visualizer

If the code for the problem is in a supported language, can be set up such that it can be run without input (some examples follow), and is sufficiently small (fewer than about 300 program steps), you can add a button to run the student's code under the visualizer. Add

[Code Visualizer](open_tutor {subdir}/MainFile.ext)

to the guide.

About

Student submission evaluation script for codio.com assignments

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages