Partial srfi-14 support for Nyacc.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Dec 2016 11:26:20 +0000 (12:26 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Dec 2016 11:26:20 +0000 (12:26 +0100)
* module/srfi/srfi-14.mes: New file.
* tests/srfi-14.test: New file.
* GNUmakefile (TESTS): Add it.

GNUmakefile
module/srfi/srfi-14.mes [new file with mode: 0644]
tests/srfi-14.test [new file with mode: 0755]

index d54cb278b58a70c08fe9a4ac583eeb3b482b61ff..3b96a1f7e128674fd4da42fdc4e909fb6c6e8d6b 100644 (file)
@@ -60,6 +60,7 @@ TESTS:=\
  tests/scm.test\
  tests/cwv.test\
  tests/srfi-1.test\
+ tests/srfi-14.test\
  tests/optargs.test\
  tests/fluids.test\
  tests/catch.test\
diff --git a/module/srfi/srfi-14.mes b/module/srfi/srfi-14.mes
new file mode 100644 (file)
index 0000000..6d383b6
--- /dev/null
@@ -0,0 +1,48 @@
+;;; -*-scheme-*-
+
+;;; Mes --- Maxwell Equations of Software
+;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Minimal implementation of srfi-14, for nyacc.
+
+;;; Code:
+
+;; FIXME: have structs
+(define (char-set . x)
+  (cons '*char-set* x))
+
+(define (char-set? x)
+  (and (pair? x) (eq? (car x) '*char-set*)))
+
+(define (char-set= a b)
+  (and (char-set? a) (char-set? b)
+       (equal? a b)))
+
+(define char-set:whitespace (char-set #\tab #\return #\vtab #\newline #\space))
+
+(define (string->char-set x . base)
+  (apply char-set (append (string->list x) (if (null? base) '() (cdar base)))))
+
+(define (string->char-set! x base)
+  (set-cdr! (last-pair base) (string->list x))
+  base)
+
+(define (char-set-contains? cs x)
+  (memq x cs))
diff --git a/tests/srfi-14.test b/tests/srfi-14.test
new file mode 100755 (executable)
index 0000000..b15c3e3
--- /dev/null
@@ -0,0 +1,48 @@
+#! /bin/sh
+# -*-scheme-*-
+echo ' ()' | cat $(dirname $0)/../module/mes/base-0.mes $0 /dev/stdin | $(dirname $0)/../scripts/mes $MES_FLAGS "$@"
+#paredit:||
+exit $?
+!#
+
+;;; -*-scheme-*-
+
+;;; Mes --- Maxwell Equations of Software
+;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+(cond-expand (guile (use-modules (srfi srfi-14))) (mes))
+(mes-use-module (srfi srfi-14))
+(mes-use-module (mes test))
+
+(pass-if "first dummy" #t)
+(pass-if-not "second dummy" #f)
+
+(pass-if "char-set="
+  (char-set= (char-set #\a #\b #\c) (char-set #\a #\b #\c)))
+
+(pass-if "char-set= 2"
+  (char-set= (char-set #\a #\b #\c) (string->char-set "abc")))
+
+(pass-if "char-set-contains?"
+    (char-set-contains? char-set:whitespace #\space))
+
+(pass-if "string->char-set!"
+  (char-set= (char-set #\a #\b #\c #\d) (string->char-set! "d" (string->char-set "abc"))))
+
+(result 'report)
+