File: core_language/expression/send_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: SendOperator#16
  class: BasicMessageTest#29
inherits from
  Test ( Minitest )
has properties
method: setup #36
method: test_basic_message_1 #41
method: test_basic_message_2 #59
method: test_message_parameters_should_follow_the_signature #77
  class: InfixMessageTest#90
inherits from
  Test ( Minitest )
has properties
method: setup #97
method: test_infix_oprrator_message_1 #102
method: test_infix_oprrator_message_2 #109
method: test_message_parameters_should_follow_the_signature #116
  class: ApplyMessageTest#125
inherits from
  Test ( Minitest )
has properties
method: setup #130
method: test_apply_message_unary #135
method: test_apply_message_binary #144
method: test_message_parameters_should_follow_the_signature #151
  class: KeywordMessageTest#166
inherits from
  Test ( Minitest )
has properties
method: setup #173
method: test_keyword_message #178
method: test_message_parameters_should_follow_the_signature #192

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 SendOperator
  17  =begin
  18  <send-expression> ::=
  19      <apply-expression> { <message> } ;
  20 
  21  <message> ::=
  22      <basic-message>
  23    | <infix-message>
  24    | <apply-message>
  25    | <keyword-message>
  26    ;
  27  =end
  28 
  29  class BasicMessageTest < Minitest::Test
  30  =begin
  31  <basic-message> ::=
  32      MSG { <product-expression> }
  33    | ".(" ID { <product-expression> } ")"
  34    ;
  35  =end
  36      def setup
  37          @interp = Api.setup_interpreter
  38      end
  39 
  40 
  41      def test_basic_message_1
  42          value = Api.eval_expr @interp, "3.show"
  43          assert_instance_of VCA::String, value
  44          assert_equal       "3",         value.val
  45 
  46          value = Api.eval_expr @interp, "1.to 9"
  47          assert_instance_of VCM::Interval, value
  48          assert_equal       1,             value.current_value.val
  49          assert_equal       9,             value.stop_value.val
  50 
  51          value = Api.eval_expr @interp, "1.to-by 9 2"
  52          assert_instance_of VCM::Interval, value
  53          assert_equal       1,             value.current_value.val
  54          assert_equal       9,             value.stop_value.val
  55          assert_equal       2,             value.step_value.val
  56      end
  57 
  58 
  59      def test_basic_message_2
  60          value = Api.eval_expr @interp, "3.(show)"
  61          assert_instance_of VCA::String, value
  62          assert_equal       "3",         value.val
  63 
  64          value = Api.eval_expr @interp, "1.(to 9)"
  65          assert_instance_of VCM::Interval, value
  66          assert_equal       1,             value.current_value.val
  67          assert_equal       9,             value.stop_value.val
  68 
  69          value = Api.eval_expr @interp, "1.(to-by 9 2)"
  70          assert_instance_of VCM::Interval, value
  71          assert_equal       1,             value.current_value.val
  72          assert_equal       9,             value.stop_value.val
  73          assert_equal       2,             value.step_value.val
  74      end
  75 
  76 
  77      def test_message_parameters_should_follow_the_signature
  78          assert_raises(X::TypeError) do
  79              Api.eval_expr @interp, "1.(to @foo)"
  80          end
  81 
  82          assert_raises(X::TypeError) do
  83              Api.eval_expr @interp, "1.(to-by @foo @bar)"
  84          end
  85      end
  86  end
  87 
  88 
  89 
  90  class InfixMessageTest < Minitest::Test
  91  =begin
  92  <basic-message> ::=
  93      "." <redefinable-infix-operator> <product-expression>
  94    | ".(" <redefinable-infix-operator> <product-expression> ")"
  95    ;
  96  =end
  97      def setup
  98          @interp = Api.setup_interpreter
  99      end
 100 
 101 
 102      def test_infix_oprrator_message_1
 103          value = Api.eval_expr @interp, "3.+ 4"
 104          assert_instance_of VCAN::Int, value
 105          assert_equal       7,         value.val
 106      end
 107 
 108 
 109      def test_infix_oprrator_message_2
 110          value = Api.eval_expr @interp, "3.(+ 4)"
 111          assert_instance_of VCAN::Int, value
 112          assert_equal       7,         value.val
 113      end
 114 
 115 
 116      def test_message_parameters_should_follow_the_signature
 117          assert_raises(X::TypeError) do
 118              Api.eval_expr @interp, "3.+ @foo"
 119          end
 120      end
 121  end
 122 
 123 
 124 
 125  class ApplyMessageTest < Minitest::Test
 126  =begin
 127  <basic-message> ::=
 128      ".[" <expression> { "," <expression> "]" ;
 129  =end
 130      def setup
 131          @interp = Api.setup_interpreter
 132      end
 133 
 134 
 135      def test_apply_message_unary
 136          interp = Api.eval_decls @interp, "val xs = [3, 4, 5]"
 137 
 138          value  = Api.eval_expr  interp,  "xs.[1]"
 139          assert_instance_of VCAN::Int, value
 140          assert_equal       4,         value.val
 141      end
 142 
 143 
 144      def test_apply_message_binary
 145          value = Api.eval_expr @interp, "(+).[3, 4]"
 146          assert_instance_of VCAN::Int, value
 147          assert_equal       7,         value.val
 148      end
 149 
 150 
 151      def test_message_parameters_should_follow_the_signature
 152          interp = Api.eval_decls @interp, "val xs = [3, 4, 5]"
 153 
 154          assert_raises(X::TypeError) do
 155              Api.eval_expr interp, "xs.[@foo]"
 156          end
 157 
 158          assert_raises(X::TypeError) do
 159              Api.eval_expr interp, "(+).[@foo, @bar]"
 160          end
 161      end
 162  end
 163 
 164 
 165 
 166  class KeywordMessageTest < Minitest::Test
 167  =begin
 168  <basic-message> ::=
 169    ".(" <named-field> { <named-field> } ")" ;
 170 
 171  /* <named-field> ::= ... ;  See NamedTupleExpressionTest */
 172  =end
 173      def setup
 174          @interp = Api.setup_interpreter
 175      end
 176 
 177 
 178      def test_keyword_message
 179          value = Api.eval_expr @interp, "1.(to:9)"
 180          assert_instance_of VCM::Interval, value
 181          assert_equal       1,             value.current_value.val
 182          assert_equal       9,             value.stop_value.val
 183 
 184          value = Api.eval_expr @interp, "1.(to:9 by:2)"
 185          assert_instance_of VCM::Interval, value
 186          assert_equal       1,             value.current_value.val
 187          assert_equal       9,             value.stop_value.val
 188          assert_equal       2,             value.step_value.val
 189      end
 190 
 191 
 192      def test_message_parameters_should_follow_the_signature
 193          assert_raises(X::TypeError) do
 194              Api.eval_expr @interp, "1.(to:@foo)"
 195          end
 196 
 197          assert_raises(X::TypeError) do
 198              Api.eval_expr @interp, "1.(to:@foo by:@bar)"
 199          end
 200      end
 201  end
 202 
 203  end # Umu::Test::Grammar::CoreLanguage::Expression::SendOperator
 204 
 205  end # Umu::Test::Grammar::CoreLanguage::Expression
 206 
 207  end # Umu::Test::Grammar::CoreLanguage
 208 
 209  end # Umu::Test::Grammar
 210 
 211  end # Umu::Test
 212 
 213  end # Umu