diff --git a/GNUmakefile b/GNUmakefile index f0335e0e..d06c80c2 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -45,7 +45,12 @@ mes-check: all cat base0.mes base0-if.mes base.mes quasiquote.mes lib/test.mes test/quasiquote.test | ./mes cat base0.mes base0-if.mes base.mes quasiquote.mes let.mes lib/test.mes test/let.test | ./mes cat base0.mes base0-if.mes base.mes quasiquote.mes let.mes lib/srfi/srfi-0.scm scm.mes lib/test.mes test/scm.test | ./mes +ifneq ($(SYNTAX),) cat base0.mes base0-if.mes base.mes quasiquote.mes let.mes scm.mes syntax.mes let-syntax.mes lib/srfi/srfi-0.scm lib/test.mes test/let-syntax.test | ./mes + cat base0.mes base0-if.mes base.mes quasiquote.mes let.mes scm.mes syntax.mes let-syntax.mes lib/srfi/srfi-0.scm lib/match.scm lib/test.mes test/match.test | ./mes +else + @echo skipping slooowwww syntax tests +endif guile-check: guile -s <(cat base.mes lib/test.mes test/base.test) @@ -60,7 +65,8 @@ guile-check: guile -s <(cat lib/test.mes test/let.test) guile -s <(cat quasiquote.mes lib/test.mes test/base.test) guile -s <(cat quasiquote.mes lib/test.mes test/quasiquote.test) - guile -s <(cat lib/test.mes test/scm.test) + guile -s <(cat lib/test.mes test/let-syntax.test) + guile -s <(cat lib/test.mes test/match.test) run: all cat scm.mes test.mes | ./mes diff --git a/test/match.test b/test/match.test new file mode 100644 index 00000000..2304d862 --- /dev/null +++ b/test/match.test @@ -0,0 +1,76 @@ +;;; -*-scheme-*- + +;;; Mes --- Maxwell Equations of Software +;;; Copyright © 2016 Jan Nieuwenhuizen +;;; +;;; match.test: This file is part of Mes. +;;; +;;; 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. +;;; +;;; 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 Mes. If not, see . + +(when guile? + (use-modules (ice-9 match)) + ) + +(pass-if "first dummy" #t) +(pass-if-not "second dummy" #f) + +(pass-if "match symbol" + (seq? + (match 'bla + ('bla 'bla)) + 'bla)) + +(pass-if "match no symbol" + (sequal? + (match 'foo + ('bla 'bla) + (_ "no match: foo")) + "no match: foo")) + +(pass-if "match symbol?" + (seq? + (match 'foo + ((? symbol?) 'symbol) + (_ "no match: symbol") + ) + 'symbol)) + +(pass-if "match list" + (sequal? + (match '(0) + ((0) '(0)) + (_ "no match: (0)")) + '(0))) + +(pass-if "match list 2" + (sequal? + (match (list 1 2 3) (`(1 ,b ,c) (list b c))) + '(2 3))) + +(pass-if "match list 3" + (seq? + (match '(0 1 2) + ((0 x y) (+ x y)) + (_ "no match: 0 1 2")) + 3)) + +(pass-if "match ellipsis" + (sequal? + (match '(1 2) + ((t ...) t) + (_ "no match: (1 2)")) + '(1 2))) + +(result 'report) +