File: core_language/expression/atomic/brackets_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: Atomic#16
  module: Brackets#18
  class: UnitTest#30
inherits from
  Test ( Minitest )
has properties
method: setup #35
method: test_unit #40
  class: NestedExpressionTest#48
inherits from
  Test ( Minitest )
has properties
method: setup #53
method: test_nested_expression #58
  class: PrefixedOperatorTest#71
inherits from
  Test ( Minitest )
has properties
method: setup #76
method: test_prefixed_operator #81
  class: TupleTest#93
inherits from
  Test ( Minitest )
has properties
method: setup #99
method: test_pair #104
method: test_triple #115
  class: NamedTupleTest#130
inherits from
  Test ( Minitest )
has properties
method: setup #138
method: test_pair #143
method: test_triple #157
method: test_should_not_be_duplicated_labels #173
  class: FunctionalizedMessageTest#185
inherits from
  Test ( Minitest )
has properties
method: setup #193
method: test_generic #198
method: test_specific #208

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 Atomic
  17 
  18  module Brackets
  19  =begin
  20  <round-braket-expression> ::= 
  21      <unit-expression>
  22    | <expression-in-expression>
  23    | <prefixed-operator-expression>
  24    | <tuple-expression>
  25    | <named-tuple-expression>
  26    | <functionalized-message-expression>
  27    ;
  28  =end
  29 
  30  class UnitTest < Minitest::Test
  31  =begin
  32  <unit-expression> ::= "(" ")" ;
  33  =end
  34 
  35      def setup
  36          @interp = Api.setup_interpreter
  37      end
  38 
  39 
  40      def test_unit
  41          value = Api.eval_expr @interp, "()"
  42          assert_instance_of  VC::Unit, value
  43      end
  44  end
  45 
  46 
  47 
  48  class NestedExpressionTest < Minitest::Test
  49  =begin
  50  <expression-in-expression> ::= "(" <expression> ")"
  51  =end
  52 
  53      def setup
  54          @interp = Api.setup_interpreter
  55      end
  56 
  57 
  58      def test_nested_expression
  59          value = Api.eval_expr @interp, "(3)"
  60          assert_instance_of  VCAN::Int, value
  61          assert_equal        3,         value.val
  62 
  63          value = Api.eval_expr @interp, "((3))"
  64          assert_instance_of  VCAN::Int, value
  65          assert_equal        3,         value.val
  66      end
  67  end
  68 
  69 
  70 
  71  class PrefixedOperatorTest < Minitest::Test
  72  =begin
  73  <prefixed-operator-expression> ::= "(" <infix-operator> <expression> ")" ;
  74  =end
  75 
  76      def setup
  77          @interp = Api.setup_interpreter
  78      end
  79 
  80 
  81      def test_prefixed_operator
  82          value = Api.eval_expr @interp, "(- 3)"
  83          assert_instance_of  VC::Fun, value
  84 
  85          value = Api.eval_expr @interp, "(- 3) 4"
  86          assert_instance_of  VCAN::Int, value
  87          assert_equal        1,         value.val
  88      end
  89  end
  90 
  91 
  92 
  93  class TupleTest < Minitest::Test
  94  =begin
  95  <tuple-expression> ::=
  96      "(" <expression> "," <expression> { "," <expression> } ")" ;
  97  =end
  98 
  99      def setup
 100          @interp = Api.setup_interpreter
 101      end
 102 
 103 
 104      def test_pair
 105          value = Api.eval_expr @interp, "(@apple, 100)"
 106          assert_instance_of  VCP::Tuple,  value
 107          assert_equal        2,           value.arity
 108          assert_instance_of  VCA::Symbol, value.values[0]
 109          assert_equal        :apple,      value.values[0].val
 110          assert_instance_of  VCAN::Int,   value.values[1]
 111          assert_equal        100,         value.values[1].val
 112      end
 113 
 114 
 115      def test_triple
 116          value = Api.eval_expr @interp, '(@apple, 100, "APPLE")'
 117          assert_instance_of  VCP::Tuple,  value
 118          assert_equal        3,           value.arity
 119          assert_instance_of  VCA::Symbol, value.values[0]
 120          assert_equal        :apple,      value.values[0].val
 121          assert_instance_of  VCAN::Int,   value.values[1]
 122          assert_equal        100,         value.values[1].val
 123          assert_instance_of  VCA::String, value.values[2]
 124          assert_equal        "APPLE",     value.values[2].val
 125      end
 126  end
 127 
 128 
 129 
 130  class NamedTupleTest < Minitest::Test
 131  =begin
 132  <named-tuple-expression> ::=
 133      "(" <named-field> <named-field> { <named-field> } ")" ;
 134 
 135  <named-field> ::= LABEL [ <expression> ] ;
 136  =end
 137 
 138      def setup
 139          @interp = Api.setup_interpreter
 140      end
 141 
 142 
 143      def test_pair
 144          value = Api.eval_expr(
 145                      @interp,
 146                      "(key:@apple price:100)"
 147                  )
 148          assert_instance_of  VCP::Named,  value
 149          assert_equal        2,           value.arity
 150          assert_instance_of  VCA::Symbol, value.values[0]
 151          assert_equal        :apple,      value.values[0].val
 152          assert_instance_of  VCAN::Int,   value.values[1]
 153          assert_equal        100,         value.values[1].val
 154      end
 155 
 156 
 157      def test_triple
 158          value = Api.eval_expr(
 159                      @interp,
 160                      '(key:@apple price:100 name:"APPLE")'
 161                  )
 162          assert_instance_of  VCP::Named,  value
 163          assert_equal        3,           value.arity
 164          assert_instance_of  VCA::Symbol, value.values[0]
 165          assert_equal        :apple,      value.values[0].val
 166          assert_instance_of  VCAN::Int,   value.values[1]
 167          assert_equal        100,         value.values[1].val
 168          assert_instance_of  VCA::String, value.values[2]
 169          assert_equal        "APPLE",     value.values[2].val
 170      end
 171 
 172 
 173      def test_should_not_be_duplicated_labels
 174          assert_raises(X::SyntaxError) do
 175              Api.eval_expr(
 176                  @interp,
 177                  "(key:@apple key:@banana)"
 178              )
 179          end
 180      end
 181  end
 182 
 183 
 184 
 185  class FunctionalizedMessageTest < Minitest::Test
 186  =begin
 187  <functionalized-message-expression> ::=
 188      "&(" ID ")"
 189    | "&(" ID MSG ")"
 190    | "&(" <redefinable-infix-operator> ")"
 191  =end
 192 
 193      def setup
 194          @interp = Api.setup_interpreter
 195      end
 196 
 197 
 198      def test_generic
 199          value = Api.eval_expr @interp, "&(show)"
 200          assert_instance_of  VC::Fun, value
 201 
 202          value = Api.eval_expr @interp, "&(show) 3"
 203          assert_instance_of  VCA::String, value
 204          assert_equal        "3",         value.val
 205      end
 206 
 207 
 208      def test_specific
 209          value = Api.eval_expr @interp, "&(Int.negate)"
 210          assert_instance_of  VC::Fun, value
 211 
 212          value = Api.eval_expr @interp, "&(Int.negate) 3"
 213          assert_instance_of  VCAN::Int, value
 214          assert_equal(       -3,        value.val)
 215      end
 216  end
 217 
 218  end # Umu::Test::Grammar::CoreLanguage::Expression::Atomic::Parentheses
 219 
 220  end # Umu::Test::Grammar::CoreLanguage::Expression::Atomic
 221 
 222  end # Umu::Test::Grammar::CoreLanguage::Expression
 223 
 224  end # Umu::Test::Grammar::CoreLanguage
 225 
 226  end # Umu::Test::Grammar
 227 
 228  end # Umu::Test
 229 
 230  end # Umu