oslab/grade/grade-phase5
2023-02-11 16:48:16 +08:00

106 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import re
import subprocess
from gradelib import *
STOPS = [stop_on_line(".*failed!.*"),
stop_on_line(".*Abort @.*")]
r = Runner(save("qemu.out"))
@test(30, "readfile")
def test_readfile():
s = """
$ cat words.txt
hello world
nihao shijie
ohayou seikai
$ head adashima.txt
 こっそり覗く桜さんの横顔は、みんなが言うように氷で築き上げられたようだった。
 興味という熱のない瞳は、目の前の景色を映すばかりの鏡のようだった。
 中学三年、春。進級してクラスが替わって自己主張を控えていたら、いつの間にか図書委員に割り当てられていた。正確には文化委員とか、そういう言い方だったけど内容が図書室の当番なのだから図書委員でいいかなと思う。そして早速、一回目の当番を命じられた。
 カウンターには私と、そして桜さんが座っている。
 正直、緊張していた。
 桜さんとは一年生の時も同じクラスだったけど、話したことがない。でもどういう人かは遠くから見ていても分かっていた。愛想の欠片もなくて、冷淡で、口数が少なくて。
 そして、その横顔は透き通るように綺麗だ。
 だから、氷の彫像とでも評されるのだと思う。今、私もそれを実感してしまった。
 とはいえいつまでも、その横顔に見惚れるように眺めているわけにもいかない。
 深呼吸の後、意を決する。
$ grep v=80 qemu.log
3: v=80 e=0000 i=1 cpl=3 IP=001b:080486b5 pc=080486b5 SP=0023:bffffcac env->regs[R_EAX]=00000000
4: v=80 e=0000 i=1 cpl=3 IP=001b:080486d7 pc=080486d7 SP=0023:bffffe9c env->regs[R_EAX]=00000001
$ wc brother.txt
1 113 605 brother.txt
$ wc number.txt
1 300000 1988890 number.txt
$ cat nosuchfile
cat: cannot open nosuchfile
$ echo OK
OK
"""
script, exps, isregs = parse_script(s)
r.run_qemu(*STOPS, shell_script(script))
r.match(*exps, isregs=isregs, continued=True)
@test(20, "readtest")
def test_readtest():
s = """
$ readtest
readtest start
readtest passed!
$ echo OK
OK
"""
script, exps, isregs = parse_script(s)
r.run_qemu(*STOPS, shell_script(script))
r.match(*exps, isregs=isregs, continued=True)
@test(30, "redirect")
def test_redirect():
s = """
$ echo hello > /dev/serial
hello
$ echo bye > /dev/null
$ xargs echo 114514 < words.txt
114514 hello world
114514 nihao shijie
114514 ohayou seikai
$ wc < nijika.txt
60 231 7260
$ grep o.*o < words.txt
hello world
ohayou seikai
$ cat < adashima.txt > /dev/null
$ cat < nosuchfile
open nosuchfile failed
$ echo OK
OK
"""
script, exps, isregs = parse_script(s)
r.run_qemu(*STOPS, shell_script(script))
r.match(*exps, isregs=isregs, continued=True)
@test(20, "stat")
def test_stat():
s = r"""
$ ls adashima.txt
^adashima\.txt 1 17513 \d+
$ ls watanare.txt
^watanare\.txt 1 28179 \d+
$ ls number.txt
^number\.txt 1 1988890 \d+
$ ls qemu.log
^qemu\.log 1 40095 \d+
$ ls /dev/serial
serial 3 0 0
$ ls /dev/null
null 3 0 0
"""
script, exps, isregs = parse_script(s)
r.run_qemu(*STOPS, shell_script(script))
r.match(*exps, isregs=isregs, continued=True)
run_tests()