File: core_language/expression/entry/case_expression/atom_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: AtomTest#20
inherits from
  Test ( Minitest )
has properties
method: setup #25
method: test_int #30
method: test_float #52
method: test_string #74
method: test_symbol #96
method: test_should_be_consistent_rule_category #118
method: test_should_be_consistent_rule_type #134
method: test_should_not_be_duplicated_rule #150

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 AtomTest < Minitest::Test
  21  =begin
  22  <case-rule-head-atom> ::= INT | FLOAT | STRING | SYMBOL ;
  23  =end
  24 
  25      def setup
  26          @interp = Api.setup_interpreter
  27      end
  28 
  29 
  30      def test_int
  31          script = <<-EOS
  32              case x of {
  33                | 0 -> @Z
  34                | 1 -> @O
  35              }
  36              EOS
  37 
  38          value = Api.eval_expr(
  39              @interp, script, x:VC.make_integer(0)
  40          )
  41          assert_instance_of  VCA::Symbol, value
  42          assert_equal        :Z,          value.val
  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        :O,          value.val
  49      end
  50 
  51 
  52      def test_float
  53          script = <<-EOS
  54              case x of {
  55                | 0.0 -> @Z
  56                | 0.1 -> @O
  57              }
  58              EOS
  59 
  60          value = Api.eval_expr(
  61              @interp, script, x:VC.make_float(0.0)
  62          )
  63          assert_instance_of  VCA::Symbol, value
  64          assert_equal        :Z,          value.val
  65 
  66          value = Api.eval_expr(
  67              @interp, script, x:VC.make_float(0.1)
  68          )
  69          assert_instance_of  VCA::Symbol, value
  70          assert_equal        :O,          value.val
  71      end
  72 
  73 
  74      def test_string
  75          script = <<-EOS
  76              case x of {
  77                | "Apple"  -> @A
  78                | "Banana" -> @B
  79              }
  80              EOS
  81 
  82          value = Api.eval_expr(
  83              @interp, script, x:VC.make_string("Apple")
  84          )
  85          assert_instance_of  VCA::Symbol, value
  86          assert_equal        :A,          value.val
  87 
  88          value = Api.eval_expr(
  89              @interp, script, x:VC.make_string("Banana")
  90          )
  91          assert_instance_of  VCA::Symbol, value
  92          assert_equal        :B,          value.val
  93      end
  94 
  95 
  96      def test_symbol
  97          script = <<-EOS
  98              case x of {
  99                | @Apple  -> @A
 100                | @Banana -> @B
 101              }
 102              EOS
 103 
 104          value = Api.eval_expr(
 105              @interp, script, x:VC.make_symbol(:Apple)
 106          )
 107          assert_instance_of  VCA::Symbol, value
 108          assert_equal        :A,          value.val
 109 
 110          value = Api.eval_expr(
 111              @interp, script, x:VC.make_symbol(:Banana)
 112          )
 113          assert_instance_of  VCA::Symbol, value
 114          assert_equal        :B,          value.val
 115      end
 116 
 117 
 118      def test_should_be_consistent_rule_category
 119          script = <<-EOS
 120              case x of {
 121                | "Apple" -> @A
 122                | Banana  -> @B
 123              }
 124              EOS
 125 
 126          assert_raises(X::SyntaxError) do
 127              Api.eval_expr(
 128                  @interp, script, x:VC.make_string("Apple")
 129              )
 130          end
 131      end
 132 
 133 
 134      def test_should_be_consistent_rule_type
 135          script = <<-EOS
 136              case x of {
 137                | "Apple" -> @A
 138                | @Banana -> @B
 139              }
 140              EOS
 141 
 142          assert_raises(X::SyntaxError) do
 143              Api.eval_expr(
 144                  @interp, script, x:VC.make_string("Apple")
 145              )
 146          end
 147      end
 148 
 149 
 150      def test_should_not_be_duplicated_rule
 151          script = <<-EOS
 152              case x of {
 153                | "Apple" -> @A
 154                | "Apple" -> @B
 155              }
 156              EOS
 157 
 158          assert_raises(X::SyntaxError) do
 159              Api.eval_expr(
 160                  @interp, script, x:VC.make_string("Apple")
 161              )
 162          end
 163      end
 164  end
 165 
 166  end # Umu::Test::Grammar::CoreLanguage::Expression::Entry::CaseExpression
 167 
 168  end # Umu::Test::Grammar::CoreLanguage::Expression::Entry
 169 
 170  end # Umu::Test::Grammar::CoreLanguage::Expression
 171 
 172  end # Umu::Test::Grammar::CoreLanguage
 173 
 174  end # Umu::Test::Grammar
 175 
 176  end # Umu::Test
 177 
 178  end # Umu