mes/tests/variable.test

57 lines
1.7 KiB
Scheme
Executable File

#! /bin/sh
# -*-scheme-*-
exec ${MES-bin/mes} --no-auto-compile -L ${0%/*} -L module -C module -e '(tests variable)' -s "$0" "$@"
!#
;;; -*-scheme-*-
;;; GNU Mes --- Maxwell Equations of Software
;;; Copyright © 2022 Timothy Sample <samplet@ngyro.com>
;;;
;;; This file is part of GNU Mes.
;;;
;;; GNU Mes is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Mes is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Mes. If not, see <https://www.gnu.org/licenses/>.
(define-module (tests variable)
#:use-module (mes test))
(cond-expand
(mes
(mes-use-module (mes test)))
(else))
(pass-if "make-variable and variable-ref"
(let* ((x (cons 'foo '()))
(v (make-variable x)))
(eq? x (variable-ref v))))
(pass-if "variable-set!"
(let ((v (make-variable 'foo)))
(variable-set! v 'bar)
(eq? 'bar (variable-ref v))))
(pass-if "make-undefined-variable and variable-bound?"
(let ((bound (make-variable #t))
(unbound (make-undefined-variable)))
(and (variable-bound? bound)
(not (variable-bound? unbound)))))
(pass-if "bind an unbound variable"
(let ((v (make-undefined-variable)))
(and (not (variable-bound? v))
(begin (variable-set! v #t)
(variable-bound? v)))))
(result 'report)