diff options
Diffstat (limited to 'src/scheme/test')
| -rw-r--r-- | src/scheme/test/.gitignore | 1 | ||||
| -rw-r--r-- | src/scheme/test/Makefile | 30 | ||||
| -rw-r--r-- | src/scheme/test/ao_scheme_os.h | 67 | ||||
| -rw-r--r-- | src/scheme/test/ao_scheme_test.c | 141 | ||||
| -rw-r--r-- | src/scheme/test/hanoi.scheme | 174 | 
5 files changed, 0 insertions, 413 deletions
| diff --git a/src/scheme/test/.gitignore b/src/scheme/test/.gitignore deleted file mode 100644 index 3622bc1d..00000000 --- a/src/scheme/test/.gitignore +++ /dev/null @@ -1 +0,0 @@ -ao-scheme diff --git a/src/scheme/test/Makefile b/src/scheme/test/Makefile deleted file mode 100644 index ee46118e..00000000 --- a/src/scheme/test/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -include ../Makefile-inc - -vpath %.o . -vpath %.c .. -vpath %.h .. - -SRCS=$(SCHEME_SRCS) ao_scheme_test.c -HDRS=$(SCHEME_HDRS) ao_scheme_const.h - -OBJS=$(SRCS:.c=.o) - -#PGFLAGS=-pg -no-pie -OFLAGS=-O3 -#DFLAGS=-O0 - -CFLAGS=$(DFLAGS) $(OFLAGS) $(PGFLAGS) -g -Wall -Wextra -I. -I.. -Wpointer-arith -Wmissing-declarations -Wformat=2 -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wbad-function-cast -Wold-style-definition -Wdeclaration-after-statement -Wunused -Wuninitialized -Wshadow -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wlogical-op -Werror=implicit -Werror=nonnull -Werror=init-self -Werror=main -Werror=missing-braces -Werror=sequence-point -Werror=return-type -Werror=trigraphs -Werror=array-bounds -Werror=write-strings -Werror=address -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast - -ao-scheme: $(OBJS) -	cc $(CFLAGS) -o $@ $(OBJS) -lm - -$(OBJS): $(HDRS) - -ao_scheme_const.h: ../make-const/ao_scheme_make_const ../ao_scheme_const.scheme -	../make-const/ao_scheme_make_const -o $@ ../ao_scheme_const.scheme - -clean:: -	rm -f $(OBJS) ao-scheme ao_scheme_const.h - -install: ao-scheme -	install -t $$HOME/bin $^ diff --git a/src/scheme/test/ao_scheme_os.h b/src/scheme/test/ao_scheme_os.h deleted file mode 100644 index b225b2e8..00000000 --- a/src/scheme/test/ao_scheme_os.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright © 2016 Keith Packard <keithp@keithp.com> - * - * This program 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; version 2 of the License. - * - * This program 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 this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -#ifndef _AO_SCHEME_OS_H_ -#define _AO_SCHEME_OS_H_ - -#include <stdio.h> -#include <stdlib.h> -#include <time.h> - -#define AO_SCHEME_POOL_TOTAL	32768 -#define AO_SCHEME_SAVE		1 - -extern int ao_scheme_getc(void); - -static inline void -ao_scheme_os_flush(void) { -	fflush(stdout); -} - -static inline void -ao_scheme_abort(void) -{ -	abort(); -} - -static inline void -ao_scheme_os_led(int led) -{ -	printf("leds set to 0x%x\n", led); -} - -#define AO_SCHEME_JIFFIES_PER_SECOND	100 - -static inline void -ao_scheme_os_delay(int jiffies) -{ -	struct timespec ts = { -		.tv_sec = jiffies / AO_SCHEME_JIFFIES_PER_SECOND, -		.tv_nsec = (jiffies % AO_SCHEME_JIFFIES_PER_SECOND) * (1000000000L / AO_SCHEME_JIFFIES_PER_SECOND) -	}; -	nanosleep(&ts, NULL); -} - -static inline int -ao_scheme_os_jiffy(void) -{ -	struct timespec tp; -	clock_gettime(CLOCK_MONOTONIC, &tp); -	return tp.tv_sec * AO_SCHEME_JIFFIES_PER_SECOND + (tp.tv_nsec / (1000000000L / AO_SCHEME_JIFFIES_PER_SECOND)); -} - -#endif diff --git a/src/scheme/test/ao_scheme_test.c b/src/scheme/test/ao_scheme_test.c deleted file mode 100644 index 45068369..00000000 --- a/src/scheme/test/ao_scheme_test.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright © 2016 Keith Packard <keithp@keithp.com> - * - * This program 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 2 of the License, or - * (at your option) any later version. - * - * This program 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. - */ - -#include "ao_scheme.h" -#include <stdio.h> - -static FILE *ao_scheme_file; -static int newline = 1; - -static char save_file[] = "scheme.image"; - -int -ao_scheme_os_save(void) -{ -	FILE	*save = fopen(save_file, "w"); - -	if (!save) { -		perror(save_file); -		return 0; -	} -	fwrite(ao_scheme_pool, 1, AO_SCHEME_POOL_TOTAL, save); -	fclose(save); -	return 1; -} - -int -ao_scheme_os_restore_save(struct ao_scheme_os_save *save, int offset) -{ -	FILE	*restore = fopen(save_file, "r"); -	size_t	ret; - -	if (!restore) { -		perror(save_file); -		return 0; -	} -	fseek(restore, offset, SEEK_SET); -	ret = fread(save, sizeof (struct ao_scheme_os_save), 1, restore); -	fclose(restore); -	if (ret != 1) -		return 0; -	return 1; -} - -int -ao_scheme_os_restore(void) -{ -	FILE	*restore = fopen(save_file, "r"); -	size_t	ret; - -	if (!restore) { -		perror(save_file); -		return 0; -	} -	ret = fread(ao_scheme_pool, 1, AO_SCHEME_POOL_TOTAL, restore); -	fclose(restore); -	if (ret != AO_SCHEME_POOL_TOTAL) -		return 0; -	return 1; -} - -int -ao_scheme_getc(void) -{ -	int c; - -	if (ao_scheme_file) -		return getc(ao_scheme_file); - -	if (newline) { -		if (ao_scheme_read_list) -			printf("+ "); -		else -			printf("> "); -		newline = 0; -	} -	c = getchar(); -	if (c == '\n') -		newline = 1; -	return c; -} - -int -main (int argc, char **argv) -{ -	(void) argc; - -	while (*++argv) { -		ao_scheme_file = fopen(*argv, "r"); -		if (!ao_scheme_file) { -			perror(*argv); -			exit(1); -		} -		ao_scheme_read_eval_print(); -		fclose(ao_scheme_file); -		ao_scheme_file = NULL; -	} -	ao_scheme_read_eval_print(); - -#ifdef DBG_MEM_STATS -	printf ("collects: full: %lu incremental %lu\n", -		ao_scheme_collects[AO_SCHEME_COLLECT_FULL], -		ao_scheme_collects[AO_SCHEME_COLLECT_INCREMENTAL]); - -	printf ("freed: full %lu incremental %lu\n", -		ao_scheme_freed[AO_SCHEME_COLLECT_FULL], -		ao_scheme_freed[AO_SCHEME_COLLECT_INCREMENTAL]); - -	printf("loops: full %lu incremental %lu\n", -		ao_scheme_loops[AO_SCHEME_COLLECT_FULL], -		ao_scheme_loops[AO_SCHEME_COLLECT_INCREMENTAL]); - -	printf("loops per collect: full %f incremental %f\n", -	       (double) ao_scheme_loops[AO_SCHEME_COLLECT_FULL] / -	       (double) ao_scheme_collects[AO_SCHEME_COLLECT_FULL], -	       (double) ao_scheme_loops[AO_SCHEME_COLLECT_INCREMENTAL] / -	       (double) ao_scheme_collects[AO_SCHEME_COLLECT_INCREMENTAL]); - -	printf("freed per collect: full %f incremental %f\n", -	       (double) ao_scheme_freed[AO_SCHEME_COLLECT_FULL] / -	       (double) ao_scheme_collects[AO_SCHEME_COLLECT_FULL], -	       (double) ao_scheme_freed[AO_SCHEME_COLLECT_INCREMENTAL] / -	       (double) ao_scheme_collects[AO_SCHEME_COLLECT_INCREMENTAL]); - -	printf("freed per loop: full %f incremental %f\n", -	       (double) ao_scheme_freed[AO_SCHEME_COLLECT_FULL] / -	       (double) ao_scheme_loops[AO_SCHEME_COLLECT_FULL], -	       (double) ao_scheme_freed[AO_SCHEME_COLLECT_INCREMENTAL] / -	       (double) ao_scheme_loops[AO_SCHEME_COLLECT_INCREMENTAL]); -#endif -} diff --git a/src/scheme/test/hanoi.scheme b/src/scheme/test/hanoi.scheme deleted file mode 100644 index c4ae7378..00000000 --- a/src/scheme/test/hanoi.scheme +++ /dev/null @@ -1,174 +0,0 @@ -; -; Towers of Hanoi -; -; Copyright © 2016 Keith Packard <keithp@keithp.com> -; -; This program 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 2 of the License, or -; (at your option) any later version. -; -; This program 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. -; - -					; ANSI control sequences - -(define (move-to col row) -  (for-each display (list "\033[" row ";" col "H")) -  ) - -(define (clear) -  (display "\033[2J") -  ) - -(define (display-string x y str) -  (move-to x y) -  (display str) -  ) - -(define (make-piece num max) -					; A piece for position 'num' -					; is num + 1 + num stars -					; centered in a field of max * -					; 2 + 1 characters with spaces -					; on either side. This way, -					; every piece is the same -					; number of characters - -  (define (chars n c) -    (if (zero? n) "" -      (+ c (chars (- n 1) c)) -      ) -    ) -  (+ (chars (- max num 1) " ") -     (chars (+ (* num 2) 1) "*") -     (chars (- max num 1) " ") -     ) -  ) - -(define (make-pieces max) -					; Make a list of numbers from 0 to max-1 -  (define (nums cur max) -    (if (= cur max) () -      (cons cur (nums (+ cur 1) max)) -      ) -    ) -					; Create a list of pieces - -  (map (lambda (x) (make-piece x max)) (nums 0 max)) -  ) - -					; Here's all of the towers of pieces -					; This is generated when the program is run - -(define towers ()) - -					; position of the bottom of -					; the stacks set at runtime -(define bottom-y 0) -(define left-x 0) - -(define move-delay 25) - -					; Display one tower, clearing any -					; space above it - -(define (display-tower x y clear tower) -  (cond ((= 0 clear) -	 (cond ((not (null? tower)) -		(display-string x y (car tower)) -		(display-tower x (+ y 1) 0 (cdr tower)) -		) -	       ) -	 ) -	(else  -	 (display-string x y "                    ") -	 (display-tower x (+ y 1) (- clear 1) tower) -	 ) -	) -  ) - -					; Position of the top of the tower on the screen -					; Shorter towers start further down the screen - -(define (tower-pos tower) -  (- bottom-y (length tower)) -  ) - -					; Display all of the towers, spaced 20 columns apart - -(define (display-towers x towers) -  (cond ((not (null? towers)) -	 (display-tower x 0 (tower-pos (car towers)) (car towers)) -	 (display-towers (+ x 20) (cdr towers))) -	) -  ) - -					; Display all of the towers, then move the cursor -					; out of the way and flush the output - -(define (display-hanoi) -  (display-towers left-x towers) -  (move-to 1 23) -  (flush-output) -  (delay move-delay) -  ) - -					; Reset towers to the starting state, with -					; all of the pieces in the first tower and the -					; other two empty - -(define (reset-towers len) -  (set! towers (list (make-pieces len) () ())) -  (set! bottom-y (+ len 3)) -  ) - -					; Move a piece from the top of one tower -					; to the top of another - -(define (move-piece from to) - -					; references to the cons holding the two towers - -  (define from-tower (list-tail towers from)) -  (define to-tower (list-tail towers to)) - -					; stick the car of from-tower onto to-tower - -  (set-car! to-tower (cons (caar from-tower) (car to-tower))) - -					; remove the car of from-tower - -  (set-car! from-tower (cdar from-tower)) -  ) - -					; The implementation of the game - -(define (_hanoi n from to use) -  (cond ((= 1 n) -	 (move-piece from to) -	 (display-hanoi) -	 ) -	(else -	 (_hanoi (- n 1) from use to) -	 (_hanoi 1 from to use) -	 (_hanoi (- n 1) use to from) -	 ) -	) -  ) - -					; A pretty interface which -					; resets the state of the game, -					; clears the screen and runs -					; the program - -(define (hanoi len) -  (reset-towers len) -  (clear) -  (display-hanoi) -  (_hanoi len 0 1 2) -  #t -  ) | 
