From d209f3113bfdea6bf76ceec3f721190a00703bf1 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Thu, 14 Apr 2011 16:03:28 -0400 Subject: [PATCH] still looking --- bootstrapped-primitives.rkt | 19 +++++---- runtime.js | 22 +++++++++- test-browser-evaluate.rkt | 81 +++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 9 deletions(-) diff --git a/bootstrapped-primitives.rkt b/bootstrapped-primitives.rkt index 19eb239..d4f2442 100644 --- a/bootstrapped-primitives.rkt +++ b/bootstrapped-primitives.rkt @@ -135,13 +135,18 @@ (make-bootstrapped-primitive-code 'append - '(letrec ([append (lambda (l1 l2) - (if (null? l1) - l2 - (cons (car l1) (append (cdr l1) l2))))]) - append)) - - + '(letrec ([append-many (lambda (lsts) + (if (null? lsts) + null + (if (null? (cdr lsts)) + (car lsts) + (append-2 (car lsts) + (append-many (cdr lsts))))))] + [append-2 (lambda (l1 l2) + (if (null? l1) + l2 + (cons (car l1) (append-2 (cdr l1) l2))))]) + (lambda args (append-many args)))) diff --git a/runtime.js b/runtime.js index 1479dac..e159416 100644 --- a/runtime.js +++ b/runtime.js @@ -359,7 +359,13 @@ Primitives['display'] = function(MACHINE) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var outputPort = MACHINE.params.currentOutputPort; - if (MACHINE.argcount === 2) { + if (MACHINE.argcount === 2) { + testArgument(MACHINE, + 'isOutputPort', + isOutputPort, + MACHINE.env.length-2, + 1, + 'display'); outputPort = MACHINE.env[MACHINE.env.length-2]; } outputPort.write(MACHINE, firstArg); @@ -371,6 +377,12 @@ Primitives['newline'] = function(MACHINE) { var outputPort = MACHINE.params.currentOutputPort; if (MACHINE.argcount === 1) { + testArgument(MACHINE, + 'isOutputPort', + isOutputPort, + MACHINE.env.length-1, + 1, + 'newline'); outputPort = MACHINE.env[MACHINE.env.length-1]; } outputPort.write(MACHINE, "\n"); @@ -382,7 +394,13 @@ Primitives['displayln'] = function(MACHINE){ var firstArg = MACHINE.env[MACHINE.env.length-1]; var outputPort = MACHINE.params.currentOutputPort; - if (MACHINE.argcount === 2) { + if (MACHINE.argcount === 2) { + testArgument(MACHINE, + 'isOutputPort', + isOutputPort, + MACHINE.env.length-2, + 1, + 'displayln'); outputPort = MACHINE.env[MACHINE.env.length-2]; } outputPort.write(MACHINE, firstArg); diff --git a/test-browser-evaluate.rkt b/test-browser-evaluate.rkt index 0954c11..f6e9ef1 100644 --- a/test-browser-evaluate.rkt +++ b/test-browser-evaluate.rkt @@ -72,9 +72,29 @@ EOF + + + + (test '(display 42) "42") +(test '(displayln (+)) + "0\n") + +(test '(displayln (*)) + "1\n") + +(test '(displayln (- 3)) + "-3\n") + +(test '(displayln (- 3 4)) + "-1\n") + +(test '(displayln (- 3 4 -10)) + "9\n") + + (test '(display (+ 3 4)) "7") @@ -383,6 +403,67 @@ EOF "x\n") +(test '(begin (displayln (vector-length (vector)))) + "0\n") + +(test '(begin (displayln (vector-length (vector 3 1 4)))) + "3\n") + +(test '(begin (displayln (vector-ref (vector 3 1 4) 0))) + "3\n") + +(test '(begin (displayln (vector-ref (vector 3 1 4) 1))) + "1\n") + +(test '(begin (displayln (vector-ref (vector 3 1 4) 2))) + "4\n") + +(test '(begin (define v (vector "hello" "world")) + (vector-set! v 0 'hola) + (displayln (vector-ref v 0))) + "hola\n") + +(test '(begin (define v (vector "hello" "world")) + (vector-set! v 0 'hola) + (displayln (vector-ref v 1))) + "world\n") + + + +(test '(begin (define l (vector->list (vector "hello" "world"))) + (displayln (length l)) + (displayln (car l)) + (displayln (car (cdr l)))) + "2\nhello\nworld\n") + + +(test '(displayln (equal? '(1 2 3) + (append '(1) '(2) '(3)))) + "true\n") + + +(test '(displayln (equal? '(1 2 3) + (append '(1 2) '(3)))) + "true\n") + +(test '(displayln (equal? '(1 2 3) + (append '(1 2) 3))) + "false\n") + +(test '(displayln (equal? "hello" + (string-append "he" "llo"))) + "true\n") + + +(test '(displayln (equal? '(1 2 (3)) + '(1 2 (3)))) + "true\n") + + + + + + #;(test (read (open-input-file "tests/conform/program0.sch"))