diff options
Diffstat (limited to 'grade-lab-util')
-rwxr-xr-x | grade-lab-util | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/grade-lab-util b/grade-lab-util new file mode 100755 index 0000000..9032ea6 --- /dev/null +++ b/grade-lab-util @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 + +import re +from gradelib import * + +r = Runner(save("xv6.out")) + +@test(5, "sleep, no arguments") +def test_sleep_no_args(): + r.run_qemu(shell_script([ + 'sleep' + ])) + r.match(no=["exec .* failed", "$ sleep\n$"]) + +@test(5, "sleep, returns") +def test_sleep_no_args(): + r.run_qemu(shell_script([ + 'sleep', + 'echo OK' + ])) + r.match('^OK$', no=["exec .* failed", "$ sleep\n$"]) + +@test(10, "sleep, makes syscall") +def test_sleep(): + r.run_qemu(shell_script([ + 'sleep 10', + 'echo FAIL' + ]), stop_breakpoint('sys_sleep')) + r.match('\\$ sleep 10', no=['FAIL']) + +@test(20, "pingpong") +def test_pingpong(): + r.run_qemu(shell_script([ + 'pingpong', 'echo OK' + ])) + r.match('^\\d+: received ping$', '^\\d+: received pong$', '^OK$') + +@test(20, "primes") +def test_primes(): + r.run_qemu(shell_script([ + 'primes', 'echo OK' + ])) + args = ['prime %d' % i for i in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]] + args.append('^OK$') + r.match(*args) + +@test(10, "find, in current directory") +def test_find_curdir(): + fn = random_str() + r.run_qemu(shell_script([ + 'echo > %s' % fn, + 'find . %s' % fn + ])) + r.match('./%s' % fn) + +@test(10, "find, recursive") +def test_find_recursive(): + needle = random_str() + dirs = [random_str() for _ in range(3)] + r.run_qemu(shell_script([ + 'mkdir %s' % dirs[0], + 'echo > %s/%s' % (dirs[0], needle), + 'mkdir %s/%s' % (dirs[0], dirs[1]), + 'echo > %s/%s/%s' % (dirs[0], dirs[1], needle), + 'mkdir %s' % dirs[2], + 'echo > %s/%s' % (dirs[2], needle), + 'find . %s' % needle + ])) + r.match('./%s/%s' % (dirs[0], needle), + './%s/%s/%s' % (dirs[0], dirs[1], needle), + './%s/%s' % (dirs[2], needle)) + +@test(19, "xargs") +def test_xargs(): + r.run_qemu(shell_script([ + 'sh < xargstest.sh', + 'echo DONE', + ], 'DONE')) + matches = re.findall("hello", r.qemu.output) + assert_equal(len(matches), 3, "Number of appearances of 'hello'") + +@test(1, "time") +def test_time(): + check_time() + +run_tests() |