File: core_language/expression/entry/let_expression_test.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6
  module: Test#8
  module: Grammar#10
  module: CoreLanguage#12
  module: Expression#14
  module: Entry#16
  class: LetExpressionTest#18
inherits from
  Test ( Minitest )
has properties
method: setup #25
method: test_with_empty_declaration #30
method: test_with_single_declaration #37
method: test_with_some_declarations #44
method: test_shadowing #58
method: test_nesting #72
method: test_nesting_and_shadowing_1 #89
method: test_nesting_and_shadowing_2 #106

Code

   1  # frozen_string_literal: true
   2 
   3  require "test_helper"
   4 
   5 
   6  module Umu
   7 
   8  module Test
   9 
  10  module Grammar
  11 
  12  module CoreLanguage
  13 
  14  module Expression
  15 
  16  module Entry
  17 
  18  class LetExpressionTest < Minitest::Test
  19  =begin
  20  <let-expression> ::=
  21      LET "{" { <declaration> } IN <expression> "}" ;
  22  =end
  23 
  24 
  25      def setup
  26          @interp = Api.setup_interpreter
  27      end
  28 
  29 
  30      def test_with_empty_declaration
  31          value = Api.eval_expr @interp, "let { in 1 }"
  32          assert_instance_of  VCAN::Int, value
  33          assert_equal        1,         value.val
  34      end
  35 
  36 
  37      def test_with_single_declaration
  38          value = Api.eval_expr @interp, "let { val x = 1 in x }"
  39          assert_instance_of  VCAN::Int, value
  40          assert_equal        1,         value.val
  41      end
  42 
  43 
  44      def test_with_some_declarations
  45          value = Api.eval_expr @interp, <<-EOS
  46              let {
  47                  val x = 3
  48                  val y = 4
  49              in
  50                  x + y
  51              }
  52              EOS
  53          assert_instance_of  VCAN::Int, value
  54          assert_equal        7,         value.val
  55      end
  56 
  57 
  58      def test_shadowing
  59          value = Api.eval_expr @interp, <<-EOS
  60              let {
  61                  val x = 3
  62                  val x = 4
  63              in
  64                  x
  65              }
  66              EOS
  67          assert_instance_of  VCAN::Int, value
  68          assert_equal        4,         value.val
  69      end
  70 
  71 
  72      def test_nesting
  73          value = Api.eval_expr @interp, <<-EOS
  74              let {
  75                  val x = 3
  76              in
  77                  let {
  78                      val y = 4
  79                  in
  80                      x + y
  81                  }
  82              }
  83              EOS
  84          assert_instance_of  VCAN::Int, value
  85          assert_equal        7,         value.val
  86      end
  87 
  88 
  89      def test_nesting_and_shadowing_1
  90          value = Api.eval_expr @interp, <<-EOS
  91              let {
  92                  val x = 3
  93              in
  94                  let {
  95                      val x = 4
  96                  in
  97                      x
  98                  }
  99              }
 100              EOS
 101          assert_instance_of  VCAN::Int, value
 102          assert_equal        4,         value.val
 103      end
 104 
 105 
 106      def test_nesting_and_shadowing_2
 107          value = Api.eval_expr @interp, <<-EOS
 108              let {
 109                  val x = 3
 110              in
 111                  let {
 112                      val y = x
 113                      val x = 4
 114                  in
 115                      x + y
 116                  }
 117              }
 118              EOS
 119          assert_instance_of  VCAN::Int, value
 120          assert_equal        7,         value.val
 121      end
 122  end
 123 
 124  end # Umu::Test::Grammar::CoreLanguage::Expression::Entry
 125 
 126  end # Umu::Test::Grammar::CoreLanguage::Expression
 127 
 128  end # Umu::Test::Grammar::CoreLanguage
 129 
 130  end # Umu::Test::Grammar
 131 
 132  end # Umu::Test
 133 
 134  end # Umu