Class: LambdaCalculusParserTest
- Inherits:
-
Test::Unit::TestCase
- Object
- Test::Unit::TestCase
- LambdaCalculusParserTest
show all
- Includes:
- ParserTestHelper
- Defined in:
- lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb
Instance Method Summary
collapse
#assert_evals_to_self, #parse
Instance Method Details
#setup ⇒ Object
17
18
19
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 17
def setup
@parser = LambdaCalculusParser.new
end
|
#test_addition_of_function_results ⇒ Object
64
65
66
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 64
def test_addition_of_function_results
assert_equal 20, parse('\x(x + 5) 5 + \x(15 - x) 5').eval
end
|
#test_arithmetic_in_function_body ⇒ Object
60
61
62
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 60
def test_arithmetic_in_function_body
assert_equal 10, parse('\x(x + 5) 5').eval
end
|
#test_bound_variable_evaluation ⇒ Object
31
32
33
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 31
def test_bound_variable_evaluation
assert_equal 1, parse('x').eval({'x' => 1})
end
|
#test_conditional ⇒ Object
68
69
70
71
72
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 68
def test_conditional
result = parse('if (x) 1 else 2')
assert_equal 1, result.eval({'x' => true})
assert_equal 2, result.eval({'x' => false})
end
|
#test_constant_function_construction ⇒ Object
48
49
50
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 48
def test_constant_function_construction
assert_equal '\y(1)', parse('\x(\y(x)) 1').eval.to_s
end
|
#test_free_variable ⇒ Object
21
22
23
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 21
def test_free_variable
assert_equal 'x', parse('x').eval.to_s
end
|
#test_function_returning_constant_function ⇒ Object
39
40
41
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 39
def test_function_returning_constant_function
assert_equal '\x(\y(x))', parse('\x(\y(x))').eval.to_s
end
|
#test_identity_function ⇒ Object
35
36
37
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 35
def test_identity_function
assert_equal '\x(x)', parse('\x(x)').eval.to_s
end
|
#test_identity_function_application ⇒ Object
43
44
45
46
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 43
def test_identity_function_application
assert_equal 1, parse('\x(x) 1').eval
assert_equal '\y(y)', parse('\x(x) \y(y)').eval.to_s
end
|
#test_keyword ⇒ Object
74
75
76
77
78
79
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 74
def test_keyword
assert @parser.parse('if').failure?
assert @parser.parse('else').failure?
assert parse('elsee').success?
assert parse('iff').success?
end
|
#test_multiple_argument_application_is_left_associative ⇒ Object
52
53
54
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 52
def test_multiple_argument_application_is_left_associative
assert_equal '\b(b)', parse('\x(\y(x y)) \a(a) \b(b)').eval.to_s
end
|
#test_parentheses_override_application_order ⇒ Object
56
57
58
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 56
def test_parentheses_override_application_order
assert_equal '\y(\b(b) y)', parse('\x(\y(x y)) (\a(a) \b(b))').eval.to_s
end
|
#test_program ⇒ Object
81
82
83
84
85
86
87
88
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 81
def test_program
result = parse('def fact \x(if (x == 0)
1
else
x * fact (x - 1));
fact(5)').eval
assert_equal 5 * 4 * 3 * 2, result
end
|
#test_variable_binding ⇒ Object
25
26
27
28
29
|
# File 'lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb', line 25
def test_variable_binding
variable = parse('x').eval
env = variable.bind(1, {})
assert_equal 1, env['x']
end
|