File: core_language/expression/entry/case_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
  module: CaseExpression#18
  class: CaseExpressionTest#20
inherits from
  Test ( Minitest )
has properties
method: setup #42
method: test_case_expression #47
method: test_no_vert_bar #68
method: test_with_else_clause #79
method: test_with_rules #101

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  module CaseExpression
  19 
  20  class CaseExpressionTest < Minitest::Test
  21  =begin
  22  <cond-expression> ::=
  23      CASE <expression> OF "{"
  24          [ "|" ] <cond-rule>
  25          { "|" <cond-rule> }
  26          [ ELSE "->" <expression> ]
  27      "}"
  28      ;
  29 
  30  <cond-rule> ::= <case-rule-head> "->" <expression> ;
  31 
  32  <case-rule-head> ::=
  33      <case-rule-head-atom>
  34    | <case-rule-head-datum>
  35    | <case-rule-head-class>
  36    | <case-rule-head-poly>
  37    | <case-rule-head-list>
  38    | <case-rule-head-cell-stream>
  39    | <case-rule-head-memo-stream>
  40  =end
  41 
  42      def setup
  43          @interp = Api.setup_interpreter
  44      end
  45 
  46 
  47      def test_case_expression
  48          script = <<-EOS
  49              case x of {
  50                | 1 -> @P
  51              }
  52              EOS
  53 
  54          value = Api.eval_expr(
  55              @interp, script, x:VC.make_integer(1)
  56          )
  57          assert_instance_of  VCA::Symbol, value
  58          assert_equal        :P,          value.val
  59 
  60          assert_raises(X::UnmatchError) do
  61              value = Api.eval_expr(
  62                  @interp, script, x:VC.make_integer(0)
  63              )
  64          end
  65      end
  66 
  67 
  68      def test_no_vert_bar
  69          value = Api.eval_expr @interp, <<-EOS
  70              case 1 of {
  71                  1 -> @P
  72              }
  73              EOS
  74          assert_instance_of  VCA::Symbol, value
  75          assert_equal        :P,          value.val
  76      end
  77 
  78 
  79      def test_with_else_clause
  80          script = <<-EOS
  81              case x of {
  82                  1    -> @P
  83                  else -> @E
  84              }
  85              EOS
  86 
  87          value = Api.eval_expr(
  88              @interp, script, x:VC::make_integer(1)
  89          )
  90          assert_instance_of  VCA::Symbol, value
  91          assert_equal        :P,          value.val
  92 
  93          value = Api.eval_expr(
  94              @interp, script, x:VC::make_integer(0)
  95          )
  96          assert_instance_of  VCA::Symbol, value
  97          assert_equal        :E,          value.val
  98      end
  99 
 100 
 101      def test_with_rules
 102          script = <<-EOS
 103              case x of {
 104                | 0    -> @Z
 105                | 1    -> @O
 106                  else -> @E
 107              }
 108              EOS
 109 
 110          value = Api.eval_expr(
 111              @interp, script, x:VC::make_integer(0)
 112          )
 113          assert_instance_of  VCA::Symbol, value
 114          assert_equal        :Z,          value.val
 115 
 116          value = Api.eval_expr(
 117              @interp, script, x:VC::make_integer(1)
 118          )
 119          assert_instance_of  VCA::Symbol, value
 120          assert_equal        :O,          value.val
 121 
 122          value = Api.eval_expr(
 123              @interp, script, x:VC::make_integer(2)
 124          )
 125          assert_instance_of  VCA::Symbol, value
 126          assert_equal        :E,          value.val
 127      end
 128  end
 129 
 130  end # Umu::Test::Grammar::CoreLanguage::Expression::Entry::CaseExpression
 131 
 132  end # Umu::Test::Grammar::CoreLanguage::Expression::Entry
 133 
 134  end # Umu::Test::Grammar::CoreLanguage::Expression
 135 
 136  end # Umu::Test::Grammar::CoreLanguage
 137 
 138  end # Umu::Test::Grammar
 139 
 140  end # Umu::Test
 141 
 142  end # Umu