Files
js-maker/testing/jsmaker-list-regression.rkt

100 lines
4.9 KiB
Racket

#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)