File: core_language/expression/entry/cond_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
  class: CondExpressionTest#18
inherits from
  Test ( Minitest )
has properties
method: setup #32
method: test_cond_expression #37
method: test_no_vert_bar #58
method: test_with_else_clause #69
method: test_with_rules #91

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