#lang racket/base (require "../main.rkt" "jsmaker-test-framework.rkt") (define ordinary-let-program (string-append (js (define (ordinaryLet x) (let ([x 1] [y x]) (return y)))) "\nconsole.log(JSON.stringify(ordinaryLet(99)));\n")) (run-js-if-available 'ordinary-let-runtime ordinary-let-program "99") (define let-star-program (string-append (js (define (sequentialLet x) (let* ([x 1] [y x]) (return y)))) "\nconsole.log(JSON.stringify(sequentialLet(99)));\n")) (run-js-if-available 'let-star-runtime let-star-program "1") (define named-let-program (string-append (js (define (sumTo n) (let loop ([i 0] [acc 0]) (if (> i n) (return acc) (loop (+ i 1) (+ acc i)))))) "\nconsole.log(JSON.stringify(sumTo(10)));\n")) (run-js-if-available 'named-let-runtime named-let-program "55") (define ref-program (string-append (js (define (at xs i) (return (js-ref xs i)))) "\nconsole.log(JSON.stringify(at([10,20,30],1)));\n")) (run-js-if-available 'ref-runtime ref-program "20") (define ref-set-program (string-append (js (define (put xs i value) (set! (js-ref xs i) value) (return xs))) "\nconsole.log(JSON.stringify(put([1,2,3],1,9)));\n")) (run-js-if-available 'ref-set-runtime ref-set-program "[1,9,3]") (define ref-string-key-program (string-append (js (define (nameOf obj) (return (js-ref obj "name")))) "\nconsole.log(JSON.stringify(nameOf({name:\"Ada\"})));\n")) (run-js-if-available 'ref-string-key-runtime ref-string-key-program "\"Ada\"") (define lambda-program (string-append (js (define (makeAdder x) (return (lambda (y) (return (+ x y)))))) "\nconsole.log(JSON.stringify(makeAdder(2)(3)));\n")) (run-js-if-available 'lambda-runtime lambda-program "5") (module+ main (test-summary 'jsmaker-program-regression))