1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-21 10:37:58 +03:00
mal/forth/tests/stepA_mal.mal
Joel Martin 18f0ec2150 Runtest should fail on bad test data. Fix interop tests.
The interop tests weren't updated when regex support was added to
runtest for matching output data. This was causing a bunch of
implementations to silently fail while testing interop. Fix runtest.py
to fail on bad test data and fix 21 implementations with the old style
output matches.
2019-01-28 10:27:41 -06:00

42 lines
992 B
Plaintext

;; Basic interop
(. 5 'MalInt.)
;=>5
(. 11 31 '+ 'MalInt.)
;=>42
(. "greetings" 'MalString.)
;=>"greetings"
(. "hello" 'type 'cr 'mal-nil)
;/hello
;=>nil
;; Interop on non-literals
(. (+ 15 27) 'MalInt.)
;=>42
(let* [a 17] (. a 25 '+ 'MalInt.))
;=>42
(let* [a "hello"] (. a 1 '- 'MalString.))
;=>"hell"
;; Use of annoyingly-named forth words
(. 1 'MalInt. (symbol ",") 'here (symbol "@"))
;=>1
(let* (i 'MalInt.) (. 5 i))
;=>5
(let* (comma (symbol ",") fetch (symbol "@")) (. 'here 42 'MalInt. comma fetch))
;=>42
;; Multiple .-forms interacting via heap memory and mal locals
(def! string-parts (fn* (s) (. s 'MalInt. 'swap 'MalInt. 'here '-rot (symbol ",") (symbol ",") 'here>MalList)))
(first (rest (string-parts "sketchy")))
;=>7
(def! prn-chars (fn* (start count) (if (> count 0) (do (prn (. start 1 'MalString.)) (prn-chars (+ start 1) (- count 1))))))
(let* (msg (string-parts "sketchy")) (prn-chars (first msg) (first (rest msg))))
;/"s"
;/"k"
;/"e"
;/"t"
;/"c"
;/"h"
;/"y"
;=>nil