#lang racket/base (require "../main.rkt" "jsmaker-executors.rkt" "jsmaker-test-framework.rkt") (define tests (list (js-expression-test 'list-literal (js/expression (list 1 2 3)) "[1,2,3]") (js-expression-test 'cons-front (js/expression (cons 1 (list 2 3))) "[1,2,3]") (js-expression-test 'list-star-with-tail (js/expression (list* 1 2 (list 3 4))) "[1,2,3,4]") (js-expression-test 'append-no-args (js/expression (append)) "[]") (js-expression-test 'append-many (js/expression (append (list 1) (list 2 3) (list) (list 4))) "[1,2,3,4]") (js-expression-test 'car-cdr-cadr-caddr (js/expression (list (car (list 10 20 30)) (cdr (list 10 20 30)) (cadr (list 10 20 30)) (caddr (list 10 20 30)))) "[10,[20,30],20,30]") (js-expression-test 'length-and-predicates (js/expression (list (length (list 1 2 3)) (null? (list)) (empty? (list 1)) (pair? (list 1)) (list? (list 1 2)))) "[3,true,false,true,true]") (js-expression-test 'list-ref-tail-last (js/expression (list (list-ref (list "a" "b" "c") 1) (list-tail (list 1 2 3 4) 2) (last (list 1 2 3 4)))) "[\"b\",[3,4],4]") (js-expression-test 'take-drop-left-right (js/expression (list (take (list 1 2 3 4 5) 3) (drop (list 1 2 3 4 5) 2) (take-right (list 1 2 3 4 5) 2) (drop-right (list 1 2 3 4 5) 2))) "[[1,2,3],[3,4,5],[4,5],[1,2,3]]") (js-expression-test 'reverse-list (js/expression (reverse (list 1 2 3))) "[3,2,1]") (js-expression-test 'map-single-list (js/expression (map (lambda (x) (* x x)) (list 1 2 3 4))) "[1,4,9,16]") (js-expression-test 'map-multiple-lists (js/expression (map (lambda (x y) (+ x y)) (list 1 2 3) (list 10 20 30))) "[11,22,33]") (js-expression-test 'filter-racket-truthiness (js/expression (filter (lambda (x) x) (list #f 0 "" 3))) "[0,\"\",3]") (js-expression-test 'filter-predicate (js/expression (filter (lambda (x) (> x 2)) (list 1 2 3 4))) "[3,4]") (js-expression-test 'foldl-cons (js/expression (foldl (lambda (x acc) (cons x acc)) (list) (list 1 2 3))) "[3,2,1]") (js-expression-test 'foldr-cons (js/expression (foldr (lambda (x acc) (cons x acc)) (list) (list 1 2 3))) "[1,2,3]") (js-expression-test 'member-tail-and-false (js/expression (list (member 2 (list 1 2 3 2)) (member 9 (list 1 2 3)))) "[[2,3,2],false]") (js-expression-test 'remove-first (js/expression (remove 2 (list 1 2 3 2))) "[1,3,2]") (js-expression-test 'remove-star (js/expression (remove* (list 2 4) (list 1 2 3 4 2 5))) "[1,3,5]") (js-expression-test 'list-set-update-immutable (js/expression (let* ([xs (list 1 2 3)] [ys (list-set xs 1 20)] [zs (list-update xs 2 (lambda (x) (+ x 100)))]) (list xs ys zs))) "[[1,2,3],[1,20,3],[1,2,103]]") (js-expression-test 'sort-with-predicate (js/expression (sort (list 5 1 4 2 3) (lambda (a b) (< a b)))) "[1,2,3,4,5]") (js-expression-test 'list-composition-pipeline (js/expression (let* ([xs (append (list 1 2) (list 3 4 5))] [ys (filter (lambda (x) (odd? x)) xs)] [zs (map (lambda (x) (* x 10)) ys)]) (take zs 2))) "[10,30]"))) (define engine (find-js-engine)) (run-jsmaker-regression 'jsmaker-list-regression tests "/tmp/jsmaker-list-regression.js" #:engine engine)