diff options
| author | Robert Morris <rtm@csail.mit.edu> | 2023-08-15 18:04:27 -0400 | 
|---|---|---|
| committer | Robert Morris <rtm@csail.mit.edu> | 2023-08-15 18:04:27 -0400 | 
| commit | 9ffdd55f1013700062859c3c8ff60bfb25db9731 (patch) | |
| tree | 594cd26faba9fdd0883ff66da5b64166d0e96645 /grade-lab-util | |
| parent | 74c1eba516fdb0ec1a17b16be7e76613ccba92bf (diff) | |
| download | xv6-labs-9ffdd55f1013700062859c3c8ff60bfb25db9731.tar.gz xv6-labs-9ffdd55f1013700062859c3c8ff60bfb25db9731.tar.bz2 xv6-labs-9ffdd55f1013700062859c3c8ff60bfb25db9731.zip | |
x
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() | 
