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)))))))))