aboutsummaryrefslogtreecommitdiff
path: root/tests/records.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-03-29 22:40:55 +0100
committerLudovic Courtès <ludo@gnu.org>2019-03-30 11:08:39 +0100
commitd2be7e3c4ba8d6d0dde9b4c0bff623ab85637424 (patch)
treea9be7eae8e45656e1d6fe9943d4f7e29fe34944a /tests/records.scm
parentec12e53736f212d700587e096ebee15ffc118c46 (diff)
downloadguix-d2be7e3c4ba8d6d0dde9b4c0bff623ab85637424.tar
guix-d2be7e3c4ba8d6d0dde9b4c0bff623ab85637424.tar.gz
records: Support custom 'this' identifiers.
This lets record users choose an identifier other than 'this-record'. * guix/records.scm (make-syntactic-constructor): Add #:this-identifier. [wrap-field-value]: Honor it. (define-record-type*): Add form with extra THIS-IDENTIFIER and honor it. * tests/records.scm ("define-record-type* & thunked & inherit & custom this"): New test.
Diffstat (limited to 'tests/records.scm')
-rw-r--r--tests/records.scm18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/records.scm b/tests/records.scm
index 45614093a0..16b7a9c35e 100644
--- a/tests/records.scm
+++ b/tests/records.scm
@@ -210,6 +210,24 @@
(= 40 (foo-bar z))
(= -2 (foo-baz z))))))
+(test-assert "define-record-type* & thunked & inherit & custom this"
+ (let ()
+ (define-record-type* <foo> foo make-foo
+ foo? this-foo
+ (thing foo-thing (thunked)))
+ (define-record-type* <bar> bar make-bar
+ bar? this-bar
+ (baz bar-baz (thunked)))
+
+ ;; Nest records and test the two self references.
+ (let* ((x (foo (thing (bar (baz (list this-bar this-foo))))))
+ (y (foo-thing x)))
+ (match (bar-baz y)
+ ((first second)
+ (and (eq? second x)
+ (bar? first)
+ (eq? first y)))))))
+
(test-assert "define-record-type* & delayed"
(begin
(define-record-type* <foo> foo make-foo