Class: LambdaCalculusParserTest

Inherits:
Test::Unit::TestCase
  • Object
show all
Includes:
ParserTestHelper
Defined in:
lib/mail/vendor/treetop-1.4.3/examples/lambda_calculus/lambda_calculus_test.rb

Instance Method Summary collapse

Methods included from ParserTestHelper

#assert_evals_to_self, #parse

Instance Method Details

#setupObject



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_resultsObject



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_bodyObject



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_evaluationObject



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_conditionalObject



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_constructionObject



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_variableObject



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_functionObject



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_functionObject



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_applicationObject



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_keywordObject



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_associativeObject



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_orderObject



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_programObject



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_bindingObject



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