Chervil is a toy Lisp interpreter written in Ruby
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

application_spec.rb 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. module Chervil
  2. RSpec.describe AST::Application do
  3. it 'evaluates addition' do
  4. env = Env.new
  5. expect(
  6. AST::Application.new(
  7. AST::Identifier.new('+'),
  8. [AST::Number.new(1.0), AST::Number.new(2.0)]
  9. )
  10. .evaluate(env)
  11. ).to eq(3.0)
  12. end
  13. it 'evaluates nested arithmetic' do
  14. env = Env.new
  15. expect(
  16. AST::Application.new(
  17. AST::Identifier.new('+'),
  18. [
  19. AST::Application.new(
  20. AST::Identifier.new('+'),
  21. [AST::Number.new(1.0), AST::Number.new(2.0)]
  22. ),
  23. AST::Application.new(
  24. AST::Identifier.new('+'),
  25. [AST::Number.new(3.0), AST::Number.new(4.0)]
  26. )
  27. ]
  28. )
  29. .evaluate(env)
  30. ).to eq(10.0)
  31. end
  32. it 'returns an error if the function is not defined' do
  33. env = Env.new
  34. expect(AST::Application.new(AST::Identifier.new("x"), []).evaluate(env)).to eq(
  35. Error.new("Unbound variable x")
  36. )
  37. end
  38. end
  39. end