(Arne Babenhauserheide)
2014-01-09: added a minimal, quite unclean but working testrunner. added a minimal, quite unclean but working testrunner.
diff --git a/Makefile.am b/Makefile.am
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,8 +1,8 @@
wisp = wisp.scm language/wisp/spec.scm
wisp_SOURCES = wisp-guile.w wisp-reader.w
-EXTRA_DIST = $(wisp_SOURCES) $(wisp_DATA) bootstrap.sh wisp.py examples tests
+EXTRA_DIST = $(wisp_SOURCES) $(wisp_DATA) bootstrap.sh wisp.py examples tests runtests.sh
CLEANFILES = ${wisp}
-DISTCLEANFILES = ${CLEANFILES} @builddir@/1 @builddir@/2
+DISTCLEANFILES = ${CLEANFILES} @abs_top_builddir@/1 @abs_top_builddir@/2 @abs_top_builddir@/test.sh
all : ${wisp} $(changelog)
@@ -11,4 +11,12 @@ all : ${wisp} $(changelog)
.INTERMEDIATE: input.in.intermediate
input.in.intermediate: ${wisp_SOURCES}
- @srcdir@/bootstrap.sh @srcdir@
+ @abs_top_srcdir@/bootstrap.sh @abs_top_srcdir@
+
+.PHONY: test.sh
+test.sh : wisp.scm runtests.sh
+ echo '#!/bin/bash' > @abs_top_builddir@/test.sh
+ echo @abs_top_srcdir@/runtests.sh @abs_top_srcdir@ @abs_top_builddir@ >> @abs_top_builddir@/test.sh
+ chmod +x @abs_top_builddir@/test.sh
+
+TESTS=test.sh
diff --git a/runtests.sh b/runtests.sh
new file mode 100755
--- /dev/null
+++ b/runtests.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Simple test runner for wisp, mainly intended to be run by autotools.
+
+if [[ x"$1" == x"" || x"$1" == x"." ]]; then
+ srcdir="$(pwd)"
+else
+ srcdir="$1"
+fi
+
+if [[ x"$2" == x"" || x"$2" == x"." ]]; then
+ builddir="$(pwd)"
+else
+ builddir="$2"
+fi
+
+failed=0
+cd ${srcdir}/tests
+for i in *.w; do
+ d=$(guile ${builddir}/wisp.scm "$i" > ${builddir}/testtempfoo.scm; diff -wuB ${builddir}/testtempfoo.scm "$(basename "$i" .w)".scm; rm ${builddir}/testtempfoo.scm)
+ if test x"$d" = x""; then
+ continue
+ else
+ echo test "$i" failed. Diff: "$d"
+ failed=1
+ fi
+done
+cd - >/dev/null # undo dir change
+exit $failed
diff --git a/tests/btest.scm b/tests/btest.scm
new file mode 100644
--- /dev/null
+++ b/tests/btest.scm
@@ -0,0 +1,4 @@
+(display "b")
+(newline)
+
+
diff --git a/tests/continuation.scm b/tests/continuation.scm
new file mode 100644
--- /dev/null
+++ b/tests/continuation.scm
@@ -0,0 +1,10 @@
+(a b c d e
+ f g h
+ i j k)
+
+(concat "I want "
+ (getwish from me)
+ " - " username)
+
+
+
diff --git a/tests/emacs-customization-tex-master.scm b/tests/emacs-customization-tex-master.scm
new file mode 100644
--- /dev/null
+++ b/tests/emacs-customization-tex-master.scm
@@ -0,0 +1,35 @@
+(defun guess-TeX-master (filename)
+ "Guess the master file for FILENAME from currently open .tex files."
+ (let
+ (()
+ (candidate nil)
+ (filename (file-name-nondirectory filename)))
+ (save-excursion
+ (dolist (buffer (buffer-list))
+ (with-current-buffer buffer
+
+ (let
+ (()
+ (name (buffer-name))
+ (file buffer-file-name))
+ (if
+ (and file (string-match "\\.tex$" file))
+
+ (progn
+ (goto-char (point-min))
+ (if
+ (re-search-forward
+ (concat "\\\\input{" filename "}")
+ nil t)
+ (setq candidate file))
+ (if
+ (re-search-forward
+ (concat "\\\\include{" (file-name-sans-extension filename) "}")
+ nil t)
+ (setq candidate file))))))))
+
+ (if candidate
+ (message "TeX master document: %s" (file-name-nondirectory candidate)))
+ candidate))
+
+
diff --git a/tests/emacs-customization.scm b/tests/emacs-customization.scm
new file mode 100644
--- /dev/null
+++ b/tests/emacs-customization.scm
@@ -0,0 +1,59 @@
+(if (file-directory-p "~/.emacs.d/private/journal/")
+ (setq-default journal-dir "~/.emacs.d/private/journal/"))
+
+(global-set-key [(control meta .)] 'goto-last-change-reverse)
+
+(require 'org-latex)
+(add-to-list 'org-export-latex-packages-alist
+ '("" "minted"))
+
+(add-to-list 'org-export-latex-packages-alist
+ '("" "color"))
+
+(setq org-export-latex-listings 'minted)
+
+(add-hook 'outline-mode-hook
+ (lambda ()
+ (require 'outline-magic)))
+
+
+(defun find-file-as-root ()
+ "Like `ido-find-file, but automatically edit the file with
+root-privileges (using tramp/sudo), if the file is not writable by
+user."
+ (interactive)
+ (let ((file (ido-read-file-name "Edit as root: ")))
+ (unless (file-writable-p file)
+ (setq file (concat find-file-root-prefix file)))
+ (find-file file)))
+
+(defun find-current-as-root ()
+ "Reopen current file as root"
+ (interactive)
+ (set-visited-file-name (concat find-file-root-prefix (buffer-file-name)))
+ (setq buffer-read-only nil))
+
+; the next function definition is equivalent, due to inline :
+
+(defun find-current-as-root ()
+ "Reopen current file as root"
+ (interactive)
+ (set-visited-file-name
+ (concat find-file-root-prefix
+ (buffer-file-name)))
+ (setq buffer-read-only nil))
+
+(custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(bbdb-complete-name-allow-cycling t)
+ '(bbdb-ignore-some-messages-alist (quote (("From" . "mailer-daemon"))))
+ '(bbdb-offer-save (quote savenoprompt)))
+
+
+(setq a "x"
+ b "y"
+ c "z")
+
diff --git a/tests/example.scm b/tests/example.scm
new file mode 100644
--- /dev/null
+++ b/tests/example.scm
@@ -0,0 +1,61 @@
+(defun a (b c)
+ (let
+ (()
+ (d "i am a string
+do not break me!")
+ (()
+ ; comment: 0
+ (f)
+; comment : 1
+ `(g )); comment " : " 2
+ (()
+ (h (I am in brackets:
+ do not : change "me"))
+ i)))
+ ,(' j k)
+
+ l
+
+; comment
+
+ (a c))
+
+(defun b (:n o)
+ "second defun : with a docstring!"
+ (message "I am here")
+ t)
+
+(defun c (e f)
+ ((g))
+ (:
+ (h
+ (i))
+ (j))
+ '(())
+ (k)
+ l
+ (m))
+
+(defun _ (\:)
+
+ \:)
+
+(\_ b)
+
+(defun d ()
+ (let
+ ((a b)
+ (c d))))
+
+(a (((c))))
+
+(let
+ ((a b)
+ (c)))
+
+(let ((a b)))
+
+a
+
+
+
diff --git a/tests/factorial.scm b/tests/factorial.scm
new file mode 100644
--- /dev/null
+++ b/tests/factorial.scm
@@ -0,0 +1,24 @@
+;; short version
+; note: once you use one inline colon, all the following forms on that
+; line will get closed at the end of the line
+
+(define (factorial n)
+ (if (zero? n)
+ 1
+ (* n (factorial (- n 1)))))
+
+(display (factorial 5 ))
+
+
+;; more vertical space, less colons
+(define (factorial n)
+ (if (zero? n)
+ 1
+ (* n
+ (factorial
+ (- n 1)))))
+
+(display (factorial 5 ))
+
+
+
diff --git a/tests/flexible-parameter-list.scm b/tests/flexible-parameter-list.scm
new file mode 100644
--- /dev/null
+++ b/tests/flexible-parameter-list.scm
@@ -0,0 +1,14 @@
+; Test using a . as first parameter on a line by prefixing it with a second .
+(define
+ (a i
+ . b)
+ (unless (>= i (length b))
+ (display (number->string (length b )))
+ (display (list-ref b i))
+ (newline)
+ (apply a ( + i 1 ) b)))
+
+
+(a 0 "123" "345" "567")
+
+
diff --git a/tests/linebreaks.scm b/tests/linebreaks.scm
new file mode 100644
--- /dev/null
+++ b/tests/linebreaks.scm
@@ -0,0 +1,16 @@
+; Test linebreaks in strings and brackets
+
+("flubbub
+
+flabbab")
+
+(hrug (nadda
+madda gadda "shoktom
+ mee" " sep
+ka"
+ hadda)
+ (gom))
+
+(flu)
+
+
diff --git a/tests/mtest.scm b/tests/mtest.scm
new file mode 100644
--- /dev/null
+++ b/tests/mtest.scm
@@ -0,0 +1,5 @@
+#!/home/arne/wisp/wisp-multiline.sh !#
+
+(display 1)
+
+
diff --git a/tests/namedlet.scm b/tests/namedlet.scm
new file mode 100644
--- /dev/null
+++ b/tests/namedlet.scm
@@ -0,0 +1,12 @@
+#!/home/arne/wisp/wisp-multiline.sh
+; !#
+(define (hello who)
+ (display who))
+
+(let hello
+ ((who 0))
+ (if (= who 5)
+ (display who)
+ (hello (+ 1 who))))
+
+
diff --git a/tests/quotecolon.scm b/tests/quotecolon.scm
new file mode 100644
--- /dev/null
+++ b/tests/quotecolon.scm
@@ -0,0 +1,12 @@
+#!/home/arne/wisp/wisp-multiline.sh
+; !#
+(define a 1 ); test whether ' : correctly gets turned into '(
+; and whether brackets in commments are treated correctly.
+
+(define a '(1 2 3))
+
+(define
+ (a b)
+ (c))
+
+
diff --git a/tests/range.scm b/tests/range.scm
new file mode 100644
--- /dev/null
+++ b/tests/range.scm
@@ -0,0 +1,25 @@
+(import (rnrs))
+
+(define range
+ (case-lambda
+ ((n ); one-argument syntax
+ (range 0 n 1))
+ ((n0 n ); two-argument syntax
+ (range n0 n 1))
+ ((n0 n s ); three-argument syntax
+ (assert
+ (and
+ (for-all number? (list n0 n s))
+ (not (zero? s))))
+ (let ((cmp (if (positive? s) >= <= )))
+ (let loop
+ ((i n0 )
+ (acc '()))
+ (if
+ (cmp i n )
+ (reverse acc)
+ (loop (+ i s) (cons i acc))))))))
+
+(display (apply string-append "" (map number->string (range 5))))
+(newline)
+
diff --git a/tests/readable-tests.scm b/tests/readable-tests.scm
new file mode 100644
--- /dev/null
+++ b/tests/readable-tests.scm
@@ -0,0 +1,39 @@
+(define (fibfast n)
+ (if (< n 2))
+ n
+ (fibup n 2 1 0 ))
+
+(define (fibup maxnum count n-1 n-2)
+ (if (= maxnum count)
+ (+ n-1 n-2)
+ (fibup maxnum
+ (+ count 1 )
+ (+ n-1 n-2 )
+ n-1)))
+
+(define (factorial n)
+ (if (<= n 1)
+ 1
+ (* n
+ (factorial (- n 1)))))
+
+(define (gcd x y)
+ (if (= y 0))
+ x
+ (gcd y
+ (rem x y)))
+
+(define (add-if-all-numbers lst)
+ (call/cc
+ (lambda (exit)
+ (let loop
+ (()
+ (lst lst )
+ (sum 0))
+ (if (null? lst)
+ sum
+ (if (not (number? (car lst)))
+ (exit #f)
+ (+ (car lst)
+ (loop (cdr lst)))))))))
+
diff --git a/tests/shebang.scm b/tests/shebang.scm
new file mode 100644
--- /dev/null
+++ b/tests/shebang.scm
@@ -0,0 +1,4 @@
+#!/usr/bin/wisp.py # !#
+; This tests shebang lines
+
+
diff --git a/tests/sublist.scm b/tests/sublist.scm
new file mode 100644
--- /dev/null
+++ b/tests/sublist.scm
@@ -0,0 +1,7 @@
+; sublists allow to start single line function calls with a colon ( : ).
+
+(defun a (b c)
+ (let ((e . f)))
+ g)
+
+
diff --git a/tests/websafe-indent.scm b/tests/websafe-indent.scm
new file mode 100644
--- /dev/null
+++ b/tests/websafe-indent.scm
@@ -0,0 +1,7 @@
+(defun a (b c)
+ (d e
+ (f)
+ (g h)
+ i))
+
+