guix: gexp: Define gexp->approximate-sexp.

It will be used in the 'optional-tests' linter.

* guix/gexp.scm (gexp->approximate-sexp): New procedure.
* tests/gexp.scm
  ("no references", "unquoted gexp", "unquoted gexp (native)")
  ("spliced gexp", "unspliced gexp, approximated")
  ("unquoted gexp, approximated"): Test it.
* doc/gexp.scm ("G-Expressions"): Document it.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
This commit is contained in:
Maxime Devos 2021-06-28 19:24:44 +02:00 committed by Mathieu Othacehe
parent ebf07a06f0
commit d9e0ae07db
No known key found for this signature in database
GPG key ID: 8354763531769CA6
3 changed files with 60 additions and 0 deletions

View file

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;;
;;; This file is part of GNU Guix.
;;;
@ -89,6 +90,36 @@
(test-begin "gexp")
(test-equal "no references"
'(display "hello gexp->approximate-sexp!")
(gexp->approximate-sexp #~(display "hello gexp->approximate-sexp!")))
(test-equal "unquoted gexp"
'(display "hello")
(let ((inside #~"hello"))
(gexp->approximate-sexp #~(display #$inside))))
(test-equal "unquoted gexp (native)"
'(display "hello")
(let ((inside #~"hello"))
(gexp->approximate-sexp #~(display #+inside))))
(test-equal "spliced gexp"
'(display '(fresh vegetables))
(let ((inside #~(fresh vegetables)))
(gexp->approximate-sexp #~(display '(#$@inside)))))
(test-equal "unspliced gexp, approximated"
;; (*approximate*) is really an implementation detail
'(display '(*approximate*))
(let ((inside (file-append coreutils "/bin/hello")))
(gexp->approximate-sexp #~(display '(#$@inside)))))
(test-equal "unquoted gexp, approximated"
'(display '(*approximate*))
(let ((inside (file-append coreutils "/bin/hello")))
(gexp->approximate-sexp #~(display '#$inside))))
(test-equal "no refs"
'(display "hello!")
(let ((exp (gexp (display "hello!"))))