Evaluation
Import an eval
library
Given a file named “main.scm” with:
(import (scheme eval))
When I successfully run stak main.scm
Then the exit status should be 0.
Evaluate false
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (if (eval #f (environment)) 65 66))
When I successfully run stak main.scm
Then the stdout should contain exactly “B”.
Evaluate a number
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (eval 65 (environment)))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Evaluate a string
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-string (eval "foo" (environment)))
When I successfully run stak main.scm
Then the stdout should contain exactly “foo”.
Use an environment
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (eval 65 (environment '(scheme base))))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Use two environments
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (eval 65 (environment '(scheme base) '(scheme write))))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Use an interaction environment
Given a file named “main.scm” with:
(import (scheme base) (scheme eval) (scheme repl))
(write-u8 (eval 65 (interaction-environment)))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Define variables in an interaction environment
Given a file named “main.scm” with:
(import (scheme base) (scheme eval) (scheme repl))
(eval '(import (scheme base)) (interaction-environment))(eval '(define x 42) (interaction-environment))(eval '(define y 23) (interaction-environment))(write-u8 (eval '(+ x y) (interaction-environment)))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Environment
Use a define
syntax with a variable
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(eval '(begin (define x 65) (write-u8 x)) (environment '(scheme base)))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Use a define
syntax with a procedure
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(eval '(begin (define (f x) (+ x 65)) (write-u8 (f 1))) (environment '(scheme base)))
When I successfully run stak main.scm
Then the stdout should contain exactly “B”.
Do not access outer environment
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(define x #t)
(eval '(unless x (error "Oh, no!")) (environment '(scheme base)))
When I run stak main.scm
Then the exit status should not be 0.
Do not corrupt outer environment
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(define x 65)
(eval '(begin (define x 66)) (environment '(scheme base)))
(write-u8 x)
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Procedures
Use a +
procedure
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (eval '(+ 60 5) (environment '(scheme base))))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Use a display
procedure
Given a file named “main.scm” with:
(import (scheme base) (scheme eval) (scheme write))
(eval '(display "foo") (environment '(scheme write)))
When I successfully run stak main.scm
Then the stdout should contain exactly “foo”.
Use a set!
procedure
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (eval '(let ((x 0)) (set! x 65) x) (environment '(scheme base))))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Syntaxes
Use a begin
syntax
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (eval '(begin 42 65) (environment '(scheme base))))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Use an if
syntax
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(eval '(write-u8 (if <value> 65 66)) (environment '(scheme base)))
When I successfully run stak main.scm
Then the stdout should contain exactly “<output>”.
Examples
value | output |
---|---|
#f | B |
#t | A |
Use a lambda
syntax with no argument
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (eval '((lambda () 65)) (environment '(scheme base))))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.
Use a lambda
syntax with an argument
Given a file named “main.scm” with:
(import (scheme base) (scheme eval))
(write-u8 (eval '((lambda (x) x) 65) (environment '(scheme base))))
When I successfully run stak main.scm
Then the stdout should contain exactly “A”.