You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.1 KiB
86 lines
2.1 KiB
#!/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()
|
|
|