EoPL reading (54) 2.2 An Abstraction for Inductive Data Type
ええと、Variant-name な手続きが error になるケイスの試験を書いてみます。
まず、引数の数をチェックしてるので以下を追加。
(test* "Expected 3 arguments but got 0 arguments" *test-error* (interior-node)) (test* "Expected 3 arguments but got 1 arguments" *test-error* (interior-node 'a)) (test* "Expected 3 arguments but got 2 arguments" *test-error* (interior-node 'a (leaf-node -1))) (test* "Expected 3 arguments but got 4 arguments" *test-error* (interior-node 1 2 3 4))
test.log が以下。
test Expected 3 arguments but got 0 arguments, expects #<error> ==> ok test Expected 3 arguments but got 1 arguments, expects #<error> ==> ok test Expected 3 arguments but got 2 arguments, expects #<error> ==> ok test Expected 3 arguments but got 4 arguments, expects #<error> ==> ok
あるいは
(for-each (lambda (a f p pname) (if (not (p a)) (define-datatype:report-error 'Variant-name "~n Bad ~a field (~s ~s) ==> #f." f pname a))) args field-names preds pred-names)
な部分の試験。以下 3 つを追加。
(test* "Bad key field (symbol? 1)" *test-error* (interior-node 1 (leaf-node 2) (leaf-node 3))) (test* "Bad left field (bintree? 1)" *test-error* (interior-node 'a 1 (leaf-node 3))) (test* "Bad right field (bintree? 2)" *test-error* (interior-node 'a (leaf-node 2) 2))
試験パス。
test Bad key field (symbol? 1), expects #<error> ==> ok test Bad left field (bintree? 1), expects #<error> ==> ok test Bad right field (bintree? 2), expects #<error> ==> ok
述語な手続きはこれから見ます。しかしこうして見るに define-syntax とか強力だな。