Browse Source

test files added

Alain Greppin 3 years ago
parent
commit
cbb4ecc4d5
8 changed files with 153 additions and 0 deletions
  1. 1 0
      test/.gitignore
  2. 10 0
      test/Makefile
  3. 19 0
      test/README.md
  4. 38 0
      test/eval10.lisp
  5. 40 0
      test/eval15.lisp
  6. 16 0
      test/qemu.sh
  7. 14 0
      test/tcat.c
  8. 15 0
      test/test1.lisp

+ 1 - 0
test/.gitignore

@@ -0,0 +1 @@
+/tcat

+ 10 - 0
test/Makefile

@@ -0,0 +1,10 @@
+test1: test1.lisp qemu.sh tcat
+	sh qemu.sh test1.lisp
+eval10: eval10.lisp qemu.sh tcat
+	sh qemu.sh eval10.lisp
+eval15: eval15.lisp qemu.sh tcat
+	sh qemu.sh eval10.lisp
+tcat: tcat.c
+	$(CC) -o $@ $< -Wall
+
+.PHONY: test1 eval10 eval15

+ 19 - 0
test/README.md

@@ -0,0 +1,19 @@
+# sectorlisp test scripts
+
+For best results, please resize your terminal to 80x25.
+
+You can launch a test with the following command:
+
+	make test1
+
+_This is tested on Linux. The qemu.sh script requires qemu,cc,wc & nc._
+
+## files
+
+- test1.lisp contains basic tests
+- eval10.lisp evaluator from [eval.c as of commit 1058c95][1]
+- eval15.lisp evaluator from [eval.c as of commit 3b26982 (latest)][2]
+
+[//]: links
+[1]: https://github.com/jart/sectorlisp/blob/1058c959d80b7103514cd7e959dbd67b38f4400b/lisp.c
+[2]: https://github.com/jart/sectorlisp/blob/3b26982d9c06cd43760604b6364df197a782333e/lisp.c

+ 38 - 0
test/eval10.lisp

@@ -0,0 +1,38 @@
+((LAMBDA (ASSOC EVCON BIND EVAL)
+   (EVAL (QUOTE ((LAMBDA (FF X) (FF X))
+                 (QUOTE (LAMBDA (X)
+                          (COND ((ATOM X) X)
+                                ((QUOTE T) (FF (CAR X))))))
+                 (QUOTE ((A) B C))))
+         NIL))
+ (QUOTE (LAMBDA (X E)
+          (COND ((EQ E NIL) NIL)
+                ((EQ X (CAR (CAR E))) (CDR (CAR E)))
+                ((QUOTE T) (ASSOC X (CDR E))))))
+ (QUOTE (LAMBDA (C E)
+          (COND ((EVAL (CAR (CAR C)) E) (EVAL (CAR (CDR (CAR C))) E))
+                ((QUOTE T) (EVCON (CDR C) E)))))
+ (QUOTE (LAMBDA (V A E)
+          (COND ((EQ V NIL) E)
+                ((QUOTE T) (CONS (CONS (CAR V) (EVAL (CAR A) E))
+                                 (BIND (CDR V) (CDR A) E))))))
+ (QUOTE (LAMBDA (E A)
+          (COND
+            ((ATOM E) (ASSOC E A))
+            ((ATOM (CAR E))
+             (COND
+               ((EQ (CAR E) NIL) (QUOTE *UNDEFINED))
+               ((EQ (CAR E) (QUOTE QUOTE)) (CAR (CDR E)))
+               ((EQ (CAR E) (QUOTE ATOM)) (ATOM (EVAL (CAR (CDR E)) A)))
+               ((EQ (CAR E) (QUOTE EQ)) (EQ (EVAL (CAR (CDR E)) A)
+                                            (EVAL (CAR (CDR (CDR E))) A)))
+               ((EQ (CAR E) (QUOTE CAR)) (CAR (EVAL (CAR (CDR E)) A)))
+               ((EQ (CAR E) (QUOTE CDR)) (CDR (EVAL (CAR (CDR E)) A)))
+               ((EQ (CAR E) (QUOTE CONS)) (CONS (EVAL (CAR (CDR E)) A)
+                                                (EVAL (CAR (CDR (CDR E))) A)))
+               ((EQ (CAR E) (QUOTE COND)) (EVCON (CDR E) A))
+               ((EQ (CAR E) (QUOTE LAMBDA)) E)
+               ((QUOTE T) (EVAL (CONS (ASSOC (CAR E) A) (CDR E)) A))))
+            ((EQ (CAR (CAR E)) (QUOTE LAMBDA))
+             (EVAL (CAR (CDR (CDR (CAR E))))
+                   (BIND (CAR (CDR (CAR E))) (CDR E) A)))))))

+ 40 - 0
test/eval15.lisp

@@ -0,0 +1,40 @@
+((LAMBDA (ASSOC EVCON PAIRLIS EVLIS APPLY EVAL)
+   (EVAL (QUOTE ((LAMBDA (FF X) (FF X))
+                 (QUOTE (LAMBDA (X)
+                          (COND ((ATOM X) X)
+                                ((QUOTE T) (FF (CAR X))))))
+                 (QUOTE ((A) B C))))
+         NIL))
+ (QUOTE (LAMBDA (X E)
+          (COND ((EQ E NIL) NIL)
+                ((EQ X (CAR (CAR E))) (CDR (CAR E)))
+                ((QUOTE T) (ASSOC X (CDR E))))))
+ (QUOTE (LAMBDA (C E)
+          (COND ((EVAL (CAR (CAR C)) E) (EVAL (CAR (CDR (CAR C))) E))
+                ((QUOTE T) (EVCON (CDR C) E)))))
+ (QUOTE (LAMBDA (X Y A)
+          (COND ((EQ X NIL) A)
+                ((QUOTE T) (CONS (CONS (CAR X) (CAR Y))
+                                 (PAIRLIS (CDR X) (CDR Y) A))))))
+ (QUOTE (LAMBDA (M A)
+          (COND ((EQ M NIL) NIL)
+                ((QUOTE T) (CONS (EVAL (CAR M) A) (EVLIS (CDR M) A))))))
+ (QUOTE (LAMBDA (FN X A)
+          (COND ((ATOM FN)
+                 (COND ((EQ FN (QUOTE CAR))  (CAR  (CAR X)))
+                       ((EQ FN (QUOTE CDR))  (CDR  (CAR X)))
+                       ((EQ FN (QUOTE CONS)) (CONS (CAR X) (CAR (CDR X))))
+                       ((EQ FN (QUOTE ATOM)) (ATOM (CAR X)))
+                       ((EQ FN (QUOTE EQ))   (EQ   (CAR X) (CAR (CDR X))))
+                       ((QUOTE T) (APPLY (EVAL FN A) X A))))
+                ((EQ (CAR FN) (QUOTE LAMBDA))
+                  (EVAL (CAR (CDR (CDR FN))) (PAIRLIS (CAR (CDR FN)) X A)))
+                ((QUOTE T) NIL))))
+ (QUOTE (LAMBDA (E A)
+          (COND ((ATOM E) (ASSOC E A))
+                ((ATOM (CAR E))
+                  (COND
+                   ((EQ (CAR E) (QUOTE QUOTE)) (CAR (CDR E)))
+                   ((EQ (CAR E) (QUOTE COND))  (EVCON (CDR E) A))
+                   ((QUOTE T) (APPLY (CAR E) (EVLIS (CDR E) A) A))))
+                 ((QUOTE T) (APPLY (CAR E) (EVLIS (CDR E) A) A))))))

+ 16 - 0
test/qemu.sh

@@ -0,0 +1,16 @@
+#!/bin/sh
+set -e
+FILE=$1
+[ -z "$FILE" ] && FILE=test1.lisp
+[ -r "$FILE" ] || (echo "cannot read file: $FILE"; exit 1)
+SIZE=$(wc -c "$FILE" | cut -d' ' -f1)
+QEMU="qemu-system-x86_64"
+QIMG="-drive file=../bin/sectorlisp.bin,index=0,if=floppy,format=raw -boot a"
+QMON="-monitor tcp:127.0.0.1:55555,server,nowait"
+
+trap 'echo quit | nc -N 127.0.0.1 55555' EXIT
+cat "$FILE" | tr '\n' '\r' | ./tcat | \
+	$QEMU -display curses -net none $QMON $QIMG &
+PID=$!
+SECS=$((1 + SIZE * 40 / 1000))
+sleep $SECS

+ 14 - 0
test/tcat.c

@@ -0,0 +1,14 @@
+#include <unistd.h>
+
+int main()
+{
+	int ret;
+	char c;
+	usleep(350 * 1000);
+	while ((ret = read(0, &c, 1)) > 0) {
+		usleep(35 * 1000);
+		if ((ret = write(1, &c, 1)) <= 0)
+			break;
+	}
+	return ret;
+}

+ 15 - 0
test/test1.lisp

@@ -0,0 +1,15 @@
+(ATOM NIL)
+(CONS () ())
+(QUOTE ((A) B))
+(EQ (QUOTE A) (QUOTE B))
+(EQ (QUOTE A) (QUOTE A))
+(CONS (QUOTE A) (QUOTE B))
+(CONS (QUOTE A) (CONS (QUOTE B) NIL))
+(CAR (CONS (QUOTE A) (QUOTE B)))
+(CDR (CONS (QUOTE A) (QUOTE B)))
+(CDR (CONS (QUOTE A) (CONS (QUOTE B) NIL)))
+(COND ((QUOTE T) (QUOTE A)))
+(COND ((QUOTE NIL) (QUOTE A)) ((QUOTE T) (QUOTE B)))
+(LAMBDA (Z) Z)
+((LAMBDA (Z) (CAR Z)) (CONS (QUOTE A) (QUOTE B)))
+