Verification — Storage Primitives
The pass/fail checks for this lab. If all eight pass for all three implementations, you are done.
Per-Implementation Checks
For each of src/rust, src/go, src/cpp:
V1 — Builds
# Rust
( cd src/rust && cargo build --release ) && echo "RUST OK"
# Go
( cd src/go && go build ./... ) && echo "GO OK"
# C++
( cd src/cpp && cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release && cmake --build build ) && echo "CPP OK"
V2 — Unit Tests Pass
( cd src/rust && cargo test --release ) && echo "RUST TESTS OK"
( cd src/go && go test ./... ) && echo "GO TESTS OK"
( cd src/cpp/build && ctest --output-on-failure ) && echo "CPP TESTS OK"
V3 — Round-Trip
# Per binary:
$BIN write /tmp/v3.bin 5 "hello, lab"
$BIN read /tmp/v3.bin 5 | grep -q "^hello, lab$" && echo "V3 OK"
V4 — fsync Is Called (Linux only)
strace -e fsync,fdatasync -o /tmp/syscalls.log $BIN write /tmp/v4.bin 0 "x"
grep -E 'fsync|fdatasync' /tmp/syscalls.log && echo "V4 OK"
(Expected: at least one of fsync(...) or fdatasync(...) in the trace. On macOS substitute sudo dtruss -t fsync.)
Cross-Implementation Checks
V5 — Byte-Compatibility
Files written by one implementation must read identically with the others.
RUST=./src/rust/target/release/pagealloc
GO=./src/go/pagealloc-go
CPP=./src/cpp/build/pagealloc
$RUST write /tmp/v5.bin 3 "cross-lang ok"
$GO read /tmp/v5.bin 3 | grep -q "^cross-lang ok$" && echo "GO read RUST OK"
$CPP read /tmp/v5.bin 3 | grep -q "^cross-lang ok$" && echo "CPP read RUST OK"
$GO write /tmp/v5.bin 7 "go writes"
$CPP read /tmp/v5.bin 7 | grep -q "^go writes$" && echo "CPP read GO OK"
$RUST read /tmp/v5.bin 7 | grep -q "^go writes$" && echo "RUST read GO OK"
V6 — Hexdump Identical
$RUST hexdump /tmp/v5.bin > /tmp/v6.rust.hex
$GO hexdump /tmp/v5.bin > /tmp/v6.go.hex
$CPP hexdump /tmp/v5.bin > /tmp/v6.cpp.hex
diff /tmp/v6.rust.hex /tmp/v6.go.hex && diff /tmp/v6.rust.hex /tmp/v6.cpp.hex && echo "V6 OK"
V7 — Endianness Sanity
The first 8 bytes of each non-empty page should be a little-endian magic constant 0x44534531_50414745 (DSE1PAGE reversed):
xxd -l 8 /tmp/v5.bin | head -1
# Expected: 00000000: 4547 4150 3145 5344
If you see 4453 4531 5041 4745, your implementation is writing big-endian — fix that.
V8 — Benchmark Smoke
$RUST bench /tmp/v8.bin 1024 1000
# Expected: prints both warm-cache and cold-cache p50/p99 lines without crashing.
Master Script
A single command to run everything (provided as scripts/verify.sh):
bash scripts/verify.sh
Expected output ends with:
====================================================
ALL 8 CHECKS PASSED for RUST, GO, CPP
====================================================
If any check fails, the script exits non-zero and prints which check + which implementation failed.