summaryrefslogtreecommitdiff
path: root/grade-lab-util
diff options
context:
space:
mode:
Diffstat (limited to 'grade-lab-util')
-rwxr-xr-xgrade-lab-util86
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()