File: core_language/expression/entry/if_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: IfExpressionTest#18
inherits from
  Test ( Minitest )
has properties
method: setup #28
method: test_if_expression #33
method: test_with_elsif #44
method: test_test_value_should_be_a_bool_type #71

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 IfExpressionTest < Minitest::Test
  19  =begin
  20  <if-expression> ::=
  21      IF <if-rule> { <elsif-rule> } ELSE <expression> ;
  22 
  23  <elsif-rule> ::= "ELSIF" <if-rule> ;
  24  <if-rule>    ::= <expression> THEN <expression> ;
  25  =end
  26 
  27 
  28      def setup
  29          @interp = Api.setup_interpreter
  30      end
  31 
  32 
  33      def test_if_expression
  34          value = Api.eval_expr @interp, "if TRUE then 1 else 2"
  35          assert_instance_of  VCAN::Int, value
  36          assert_equal        1,         value.val
  37 
  38          value = Api.eval_expr @interp, "if FALSE then 1 else 2"
  39          assert_instance_of  VCAN::Int, value
  40          assert_equal        2,         value.val
  41      end
  42 
  43 
  44      def test_with_elsif
  45          value = Api.eval_expr @interp, <<-EOS
  46              if TRUE then 1 elsif TRUE then 2 else 3
  47              EOS
  48          assert_instance_of  VCAN::Int, value
  49          assert_equal        1,         value.val
  50 
  51          value = Api.eval_expr @interp, <<-EOS
  52              if FALSE then 1 elsif TRUE then 2 else 3
  53              EOS
  54          assert_instance_of  VCAN::Int, value
  55          assert_equal        2,         value.val
  56 
  57          value = Api.eval_expr @interp, <<-EOS
  58              if FALSE then 1 elsif FALSE then 2 else 3
  59              EOS
  60          assert_instance_of  VCAN::Int, value
  61          assert_equal        3,         value.val
  62 
  63          value = Api.eval_expr @interp, <<-EOS
  64              if TRUE then 1 elsif FALSE then 2 else 3
  65              EOS
  66          assert_instance_of  VCAN::Int, value
  67          assert_equal        1,         value.val
  68      end
  69 
  70 
  71      def test_test_value_should_be_a_bool_type
  72          assert_raises(X::TypeError) do
  73              Api.eval_expr @interp, "if 3 then 1 else 2"
  74          end
  75      end
  76  end
  77 
  78  end # Umu::Test::Grammar::CoreLanguage::Expression::Entry
  79 
  80  end # Umu::Test::Grammar::CoreLanguage::Expression
  81 
  82  end # Umu::Test::Grammar::CoreLanguage
  83 
  84  end # Umu::Test::Grammar
  85 
  86  end # Umu::Test
  87 
  88  end # Umu