Minilisp.pm/t/lists.t

36 lines
1.3 KiB
Raku

(let ((lst (list 1 2 3)))
(write "# lst = ") (write-line lst)
(expect "Length of list is 3" (= (length lst) 3))
(expect "First element is 1" (= (first lst) 1))
(expect "Second element is 2" (= (second lst) 2))
(expect "Third element is 3" (= (nth 2 lst) 3))
(expect "Equal to itself" (equal lst lst))
(expect "Equal to identical list" (equal lst (list 1 2 3)))
(expect "Not equal to different list" (not (equal lst (list 2 3 4))))
(expect "Reduce with +" (= (reduce + lst) 6))
(expect "Map doubling values" (equal (map (lambda (x) (* x 2)) lst) (list 2 4 6)))
)
(expect "equal tests recursively 1"
(equal (list (list 1) (list 2)) (list (list 1) (list 2))))
(expect "equal tests recursively 2"
(not (equal (list (list 1) (list 2)) (list (list 1) (list 3)))))
(expect "Length of empty list is 0"
(zerop (length (list))))
(expect "cons adds elements to the front"
(equal (list 1 2) (cons 1 (list 2))))
(let ((lst (list 5 1 2)))
(expect "car gives first element"
(= 5 (car lst)))
(expect "cdr gives rest of list"
(equal (list 1 2) (cdr lst))))
(expect "short notation equals list created with list function"
(equal '(1 2) (list 1 2)))
(expect "short notation can create empty lists"
(zerop (length '())))