File: core_language/pattern/variable_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: Pattern#14
  module: Variable#16
  class: BasicTest#26
inherits from
  Test ( Minitest )
has properties
method: setup #30
method: test_value #35
method: test_value_with_type #44
method: test_should_be_kind_of_specified_type_in_declaration #53
method: test_lambda #60
method: test_lambda_with_type #67
method: test_should_be_kind_of_specified_type_in_lambda #74
  class: WildcardTest#83
inherits from
  Test ( Minitest )
has properties
method: setup #87
method: test_value #92
method: test_value_with_type #99
method: test_should_be_kind_of_specified_type_in_declaration #106
method: test_lambda #113
method: test_lambda_with_type #120
method: test_should_be_kind_of_specified_type_in_lambda #127
  class: BraketTest#136
inherits from
  Test ( Minitest )
has properties
method: setup #140
method: test_value #145
method: test_lambda #154
  class: InfixOperatorTest#163
inherits from
  Test ( Minitest )
has properties
method: setup #170
method: test_value #175
method: test_lambda #184

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 Pattern
  15 
  16  module Variable
  17  =begin
  18  <variable-pattern> ::=
  19      <basic-variable-pattern>
  20    | <wildcard-pattern>
  21    | <braket-variable-pattern>
  22    | <infix-operator-pattern>
  23    ;
  24  =end
  25 
  26  class BasicTest < Minitest::Test
  27  =begin
  28  <basic-variable-pattern> ::= ID [ ":" ID ] ; ;
  29  =end
  30      def setup
  31          @interp = Api.setup_interpreter
  32      end
  33 
  34 
  35      def test_value
  36          interp = Api.eval_decls @interp, "val x = 3"
  37 
  38          value = Api.eval_expr interp, "x"
  39          assert_instance_of VCAN::Int, value
  40          assert_equal       3,         value.val
  41      end
  42 
  43 
  44      def test_value_with_type
  45          interp = Api.eval_decls @interp, "val x : Int = 3"
  46 
  47          value = Api.eval_expr interp, "x"
  48          assert_instance_of VCAN::Int, value
  49          assert_equal       3,         value.val
  50      end
  51 
  52 
  53      def test_should_be_kind_of_specified_type_in_declaration
  54          assert_raises(X::TypeError) do
  55              Api.eval_decls @interp, "val x : String = 3"
  56          end
  57      end
  58 
  59 
  60      def test_lambda
  61          value = Api.eval_expr @interp, "{ x -> x + 4 } 3"
  62          assert_instance_of VCAN::Int, value
  63          assert_equal       7,         value.val
  64      end
  65 
  66 
  67      def test_lambda_with_type
  68          value = Api.eval_expr @interp, "{ x : Int -> x + 4 } 3"
  69          assert_instance_of VCAN::Int, value
  70          assert_equal       7,         value.val
  71      end
  72 
  73 
  74      def test_should_be_kind_of_specified_type_in_lambda
  75          assert_raises(X::TypeError) do
  76              Api.eval_expr @interp, "{ x : String -> x + 4 } 3"
  77          end
  78      end
  79  end
  80 
  81 
  82 
  83  class WildcardTest < Minitest::Test
  84  =begin
  85  <wildcard-pattern> ::= "_" [ ":" ID ] ;
  86  =end
  87      def setup
  88          @interp = Api.setup_interpreter
  89      end
  90 
  91 
  92      def test_value
  93          assert (
  94              Api.eval_decls @interp, "val _ = 3"
  95          )
  96      end
  97 
  98 
  99      def test_value_with_type
 100          assert (
 101              Api.eval_decls @interp, "val _ : Int = 3"
 102          )
 103      end
 104 
 105 
 106      def test_should_be_kind_of_specified_type_in_declaration
 107          assert_raises(X::TypeError) do
 108              Api.eval_decls @interp, "val _ : String = 3"
 109          end
 110      end
 111 
 112 
 113      def test_lambda
 114          value = Api.eval_expr @interp, "{ _ -> 4 } 3"
 115          assert_instance_of VCAN::Int, value
 116          assert_equal       4,         value.val
 117      end
 118 
 119 
 120      def test_lambda_with_type
 121          value = Api.eval_expr @interp, "{ _ : Int -> 4 } 3"
 122          assert_instance_of VCAN::Int, value
 123          assert_equal       4,         value.val
 124      end
 125 
 126 
 127      def test_should_be_kind_of_specified_type_in_lambda
 128          assert_raises(X::TypeError) do
 129              Api.eval_expr @interp, "{ _ : String -> 4 } 3"
 130          end
 131      end
 132  end
 133 
 134 
 135 
 136  class BraketTest < Minitest::Test
 137  =begin
 138  <basic-variable-pattern> ::= ID [ ":" ID ] ; ;
 139  =end
 140      def setup
 141          @interp = Api.setup_interpreter
 142      end
 143 
 144 
 145      def test_value
 146          interp = Api.eval_decls @interp, "val (x) = 3"
 147 
 148          value = Api.eval_expr interp, "x"
 149          assert_instance_of VCAN::Int, value
 150          assert_equal       3,         value.val
 151      end
 152 
 153 
 154      def test_lambda
 155          value = Api.eval_expr @interp, "{ (x) -> x + 4 } 3"
 156          assert_instance_of VCAN::Int, value
 157          assert_equal       7,         value.val
 158      end
 159  end
 160 
 161 
 162 
 163  class InfixOperatorTest < Minitest::Test
 164  =begin
 165  <infix-operator-pattern> ::= "(" <infix-operator> ")" ;
 166 
 167  /* <infix-operator> ::= ... ;
 168          See IdentifierTest (Expression::Atomic) */
 169  =end
 170      def setup
 171          @interp = Api.setup_interpreter
 172      end
 173 
 174 
 175      def test_value
 176          interp = Api.eval_decls @interp, "val (*) = (+)"
 177 
 178          value = Api.eval_expr interp, "3 * 4"
 179          assert_instance_of VCAN::Int, value
 180          assert_equal       7,         value.val
 181      end
 182 
 183 
 184      def test_lambda
 185          value = Api.eval_expr @interp, "{ (*) -> 3 * 4 } (+)"
 186          assert_instance_of VCAN::Int, value
 187          assert_equal       7,         value.val
 188      end
 189  end
 190 
 191  end # Umu::Test::Grammar::CoreLanguage::Pattern::Variable
 192 
 193  end # Umu::Test::Grammar::CoreLanguage::Pattern
 194 
 195  end # Umu::Test::Grammar::CoreLanguage
 196 
 197  end # Umu::Test::Grammar
 198 
 199  end # Umu::Test
 200 
 201  end # Umu