File: core_language/expression/atomic/identifier_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
  class: IdentifierTest#18
inherits from
  Test ( Minitest )
has properties
method: setup #41
method: test_short_identifier #46
method: test_normal_infix_operator #53
method: test_special_infix_operator #63
method: test_directory_value_should_be_a_struct_type #79
method: test_long_infix_operator #90
method: test_class_instance #100

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  class IdentifierTest < Minitest::Test
  19  =begin
  20  <identifier> ::= 
  21      ID
  22    | "(" <infix-operator> ")"
  23    | MODULE-DIR <module-path> ID
  24    | MODULE-DIR <module-path> "(" <infix-operator> ")"
  25    | "&" ID
  26    ;
  27 
  28  <module-path> ::= /* empty */ | MODULE-DIR <module-path> ;
  29 
  30  <infix-operator> ::=
  31      <normal-infix-operator>
  32    | <special-infix-operator>
  33    ;
  34 
  35  /* <normal-infix-operator> ::= ... ;  See InfixOperator */
  36 
  37  <special-infix-operator> ::= "," | "|" ;
  38  =end
  39 
  40 
  41      def setup
  42          @interp = Api.setup_interpreter
  43      end
  44 
  45 
  46      def test_short_identifier
  47          value = Api.eval_expr @interp, "TRUE"
  48          assert_instance_of  VCA::Bool, value
  49          assert_equal        true,      value.val
  50      end
  51 
  52 
  53      def test_normal_infix_operator
  54          value = Api.eval_expr @interp, "(+)"
  55          assert_instance_of  VC::Fun, value
  56 
  57          value = Api.eval_expr @interp, "(+) 3 4"
  58          assert_instance_of  VCAN::Int, value
  59          assert_equal        7,         value.val
  60      end
  61 
  62 
  63      def test_special_infix_operator
  64          value = Api.eval_expr @interp, "(,) 3 4"
  65          assert_instance_of  VCP::Tuple, value
  66          assert_instance_of  VCAN::Int,  value.values[0]
  67          assert_equal        3,          value.values[0].val
  68          assert_instance_of  VCAN::Int,  value.values[1]
  69          assert_equal        4,          value.values[1].val
  70 
  71          value = Api.eval_expr @interp, "(|) 3 []"
  72          assert_instance_of  VCM::List::Cons, value
  73          assert_instance_of  VCAN::Int,      value.head
  74          assert_equal        3,              value.head.val
  75          assert_instance_of  VCM::List::Nil, value.tail
  76      end
  77 
  78 
  79      def test_directory_value_should_be_a_struct_type
  80          assert_raises(X::TypeError) do
  81              Api.eval_expr @interp, "TRUE::FALSE"
  82          end
  83 
  84          assert_raises(X::TypeError) do
  85              Api.eval_expr @interp, "Umu::TRUE::FALSE"
  86          end
  87      end
  88 
  89 
  90      def test_long_infix_operator
  91          value = Api.eval_expr @interp, "Umu::Prelude::(+)"
  92          assert_instance_of  VC::Fun, value
  93 
  94          value = Api.eval_expr @interp, "Umu::Prelude::(+) 3 4"
  95          assert_instance_of  VCAN::Int, value
  96          assert_equal        7,         value.val
  97      end
  98 
  99 
 100      def test_class_instance
 101          value = Api.eval_expr @interp, "&Int"
 102          assert_instance_of  VC::Class, value
 103      end
 104  end
 105 
 106  end # Umu::Test::Grammar::CoreLanguage::Expression::Atomic
 107 
 108  end # Umu::Test::Grammar::CoreLanguage::Expression
 109 
 110  end # Umu::Test::Grammar::CoreLanguage
 111 
 112  end # Umu::Test::Grammar
 113 
 114  end # Umu::Test
 115 
 116  end # Umu