forked from technomancy/bus-scheme
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_primitives.rb
67 lines (57 loc) · 1.89 KB
/
test_primitives.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
$LOAD_PATH << File.dirname(__FILE__)
require 'test_helper'
require 'stringio'
class PrimitivesTest < Test::Unit::TestCase
def test_test_framework
assert_raises(AssertionFailed) { eval! "(assert (= 3 9))"}
assert_raises(AssertionFailed) { eval! "(fail \"EPIC FAIL\")" }
end
def test_load_file
eval! "(load \"#{File.dirname(__FILE__)}/../examples/fib.scm\")"
assert BusScheme[:fib.sym]
assert_evals_to 5, "(+ (fib 3) (fib 4))"
assert_evals_to 8, "(fib 6)"
assert_evals_to [1, 1, 2, 3, 5, 8].to_list, "(map fib (list 1 2 3 4 5 6))"
end
def test_load_path
examples = File.dirname(__FILE__) + '/../examples/'
eval! "(set! load-path (cons \"#{examples}\" load-path))"
eval! "(load \"fib.scm\")"
assert BusScheme[:fib.sym]
clear_symbols :fib.sym
current = File.dirname(__FILE__)
eval! "(set! load-path (cons \"#{current}\" load-path))"
eval! "(load \"../examples/fib.scm\")"
assert BusScheme[:fib.sym]
end
def test_set!
clear_symbols(:foo.sym)
assert ! BusScheme.in_scope?(:foo.sym)
# can only set! existing variables
assert_raises(BusScheme::EvalError) { eval! "(set! foo 7)" }
eval! "(define foo 3)"
eval! "(set! foo 7)"
assert_evals_to 7, :foo.sym
end
def test_vectors
assert_evals_to [1, 2, 3], "#(1 2 3)"
end
def test_boolean_short_circuit
assert_evals_to false, "(and #f (assert #f))"
assert_evals_to true, "(or #t (assert #f))"
end
def test_read_with_filename_reads_file_into_a_string
filename = File.join(File.dirname(__FILE__), '..', 'COPYING')
assert_equal File.read(filename), eval!("(read \"#{filename}\")")
end
def test_read_without_filename_gets_from_stdin
$stdin = StringIO.new('gets test')
assert_equal 'gets test', eval!("(read)")
ensure
$stdin = STDIN
end
def test_booleans
assert_evals_to false, '#f'
assert_evals_to true, '#t'
end
end