Skip to content

csapp/verify.sh ​

配套源码,运行方法见同目录 README。返回实验总览。

sh
#!/bin/sh
set -eu
cd "$(dirname "$0")"
./bits
actual=$(./cache_sim 1 1 2 traces/direct.trace)
[ "$actual" = 'hits:2 misses:5 evictions:4' ]
actual=$(./cache_sim 1 2 2 traces/lru.trace)
[ "$actual" = 'hits:1 misses:4 evictions:2' ]
actual=$(./cache_sim 1 1 2 traces/cross.trace)
[ "$actual" = 'hits:2 misses:2 evictions:0' ]
actual=$(./cache_sim 0 1 0 traces/cross.trace)
[ "$actual" = 'hits:0 misses:4 evictions:3' ]
if ./cache_sim 64 1 2 traces/direct.trace >/dev/null 2>&1; then
    echo 'invalid configuration was accepted' >&2; exit 1
fi
trace=$(mktemp)
trap 'rm -f "$trace"' EXIT HUP INT TERM
printf ' L ffffffffffffffff,2\n' > "$trace"
if ./cache_sim 1 1 2 "$trace" >/dev/null 2>&1; then
    echo 'overflowing address was accepted' >&2; exit 1
fi
printf 'cache: direct/LRU/cross-block/input checks passed\n'
./allocator
./process_demo
./sync_demo
actual=$(printf 'echo course-shell-ok\ncd /\npwd\nexit\n' | ./tiny_shell)
expected=$(printf 'course-shell-ok\n/')
[ "$actual" = "$expected" ]
printf 'shell: exec/cd/exit checks passed\n'
printf 'CSAPP teaching examples: all checks passed\n'