R6RS Records をサポートしよう その5
R6RS Records の実装とテストが完了した。
Inspection は実装も簡単なので午前中に終了。午後は Syntactic Layer のテストをひたすら書く。Syntactic Layer は psyntax が面倒を見てくれる。
まじめにテストしていたら psyntax (rev4) の bug を発見。define-record-type の opaque, sealed clause が無視されて必ず #f になってしまう。
opaque?, sealed? と書いてやれば反映されるがそれは仕様にあわない。レポジトリ上の psyntax 最新版では修正されていた。
テストを簡単にするために syntax-case を利用したマクロを書いてみました。動いて感動した。
(library (mosh test) (export test*) (import (rnrs) (mosh string)) (define-syntax test* (lambda (x) (syntax-case x () ((_ test expected) (syntax (let* ([result test] [test-ok? (equal? result expected)]) (if test-ok? (format #t "OK: ~a => ~a\n" (syntax->datum (syntax test)) result) (format #t "NG: ~a => ~a expected ~a\n" (syntax->datum (syntax test)) result expected)))))))))