diff options
author | Ludovic Courtès <ludo@gnu.org> | 2012-07-01 17:32:03 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2012-07-03 21:59:56 +0200 |
commit | 8fd5bd2b69b51e370144f26c01201a178c024483 (patch) | |
tree | 3889c1a00d30d2c5e51286c83536ee71c5a01149 /tests | |
parent | e4c245f8a5f6b6485f980b9c4274909ee8ef567a (diff) | |
download | guix-8fd5bd2b69b51e370144f26c01201a178c024483.tar guix-8fd5bd2b69b51e370144f26c01201a178c024483.tar.gz |
define-record-type*: Add `letrec*' behavior.
* guix/utils.scm (define-record-type*)[make-syntactic-constructor]: Bind
all the ((FIELD VALUE) ...) in a `letrec*'. Adjust `field-value'
accordingly.
* tests/utils.scm ("define-record-type* with letrec* behavior"): New
test.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/utils.scm | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/utils.scm b/tests/utils.scm index 83a78b7a78..4a24e23df9 100644 --- a/tests/utils.scm +++ b/tests/utils.scm @@ -112,6 +112,22 @@ (match (foo (bar 1)) (($ <foo> 1 42) #t))))) +(test-assert "define-record-type* with letrec* behavior" + ;; Make sure field initializers can refer to each other as if they were in + ;; a `letrec*'. + (begin + (define-record-type* <bar> bar make-bar + foo? + (x bar-x) + (y bar-y (default (+ 40 2))) + (z bar-z)) + (and (match (bar (x 1) (y (+ x 1)) (z (* y 2))) + (($ <bar> 1 2 4) #t)) + (match (bar (x 7) (z (* x 3))) + (($ <bar> 7 42 21))) + (match (bar (z 21) (x (/ z 3))) + (($ <bar> 7 42 21)))))) + (test-end) |