File: class_library/atom/int_test.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6
  module: Test#8

Class Hierarchy

Code

   1  # frozen_string_literal: true
   2 
   3  require "test_helper"
   4 
   5 
   6  module Umu
   7 
   8  module Test
   9 
  10  module Library
  11 
  12  module Class
  13 
  14  module Atom
  15 
  16  module Number
  17 
  18  class IntTest < Minitest::Test
  19      def setup
  20          @interp = Api.setup_interpreter
  21      end
  22 
  23 
  24      # Constructer
  25 
  26      def test_imess_make_zero
  27          value = Api.eval_expr @interp, "3.zero"
  28          assert_instance_of VCAN::Int,   value
  29          assert_equal       0,           value.val
  30      end
  31 
  32 
  33      # Classifier
  34 
  35      def test_imess_is_zero
  36          value = Api.eval_expr @interp, "0.zero?"
  37          assert_instance_of VCA::Bool,   value
  38          assert_equal       true,        value.val
  39 
  40          value = Api.eval_expr @interp, "3.zero?"
  41          assert_instance_of VCA::Bool,   value
  42          assert_equal       false,       value.val
  43      end
  44 
  45 
  46      def test_imess_is_even
  47          value = Api.eval_expr @interp, "2.even?"
  48          assert_instance_of VCA::Bool,   value
  49          assert_equal       true,        value.val
  50 
  51          value = Api.eval_expr @interp, "3.even?"
  52          assert_instance_of VCA::Bool,   value
  53          assert_equal       false,       value.val
  54      end
  55 
  56 
  57      def test_imess_is_odd
  58          value = Api.eval_expr @interp, "3.odd?"
  59          assert_instance_of VCA::Bool,   value
  60          assert_equal       true,        value.val
  61 
  62          value = Api.eval_expr @interp, "4.odd?"
  63          assert_instance_of VCA::Bool,   value
  64          assert_equal       false,       value.val
  65      end
  66 
  67 
  68      def test_imess_is_positive
  69          value = Api.eval_expr @interp, "3.positive?"
  70          assert_instance_of VCA::Bool,   value
  71          assert_equal       true,        value.val
  72 
  73          value = Api.eval_expr @interp, "0.positive?"
  74          assert_instance_of VCA::Bool,   value
  75          assert_equal       false,       value.val
  76      end
  77 
  78 
  79      def test_imess_is_negative
  80          value = Api.eval_expr @interp, "-3.negative?"
  81          assert_instance_of VCA::Bool,   value
  82          assert_equal       true,        value.val
  83 
  84          value = Api.eval_expr @interp, "0.negative?"
  85          assert_instance_of VCA::Bool,   value
  86          assert_equal       false,       value.val
  87      end
  88 
  89 
  90      # Type converter
  91 
  92      def test_imess_to_i
  93          value = Api.eval_expr @interp, "3.to-i"
  94          assert_instance_of VCAN::Int,   value
  95          assert_equal       3,           value.val
  96      end
  97 
  98 
  99      def test_imess_to_f
 100          value = Api.eval_expr @interp, "3.to-f"
 101          assert_instance_of VCAN::Float, value
 102          assert_equal       3.0,         value.val
 103      end
 104 
 105 
 106      # Computer
 107 
 108      def test_imess_negate
 109          value = Api.eval_expr @interp, "3.negate"
 110          assert_instance_of VCAN::Int,   value
 111          assert_equal       (-3),        value.val
 112 
 113          value = Api.eval_expr @interp, "-3.negate"
 114          assert_instance_of VCAN::Int,   value
 115          assert_equal       3,          value.val
 116      end
 117 
 118 
 119      def test_imess_abs
 120          value = Api.eval_expr @interp, "3.abs"
 121          assert_instance_of VCAN::Int,   value
 122          assert_equal       3,           value.val
 123 
 124          value = Api.eval_expr @interp, "-3.negate"
 125          assert_instance_of VCAN::Int,   value
 126          assert_equal       3,          value.val
 127      end
 128 
 129 
 130      def test_imess_succ
 131          value = Api.eval_expr @interp, "3.succ"
 132          assert_instance_of VCAN::Int,   value
 133          assert_equal       4,           value.val
 134      end
 135 
 136 
 137      def test_imess_pred
 138          value = Api.eval_expr @interp, "3.pred"
 139          assert_instance_of VCAN::Int,   value
 140          assert_equal       2,           value.val
 141      end
 142 
 143 
 144      def test_imess_add
 145          value = Api.eval_expr @interp, "3.+ 4"
 146          assert_instance_of VCAN::Int,   value
 147          assert_equal       7,           value.val
 148      end
 149 
 150 
 151      def test_imess_sub
 152          value = Api.eval_expr @interp, "3.- 4"
 153          assert_instance_of VCAN::Int,   value
 154          assert_equal       (-1),        value.val
 155      end
 156 
 157 
 158      def test_imess_multiply
 159          value = Api.eval_expr @interp, "3.* 4"
 160          assert_instance_of VCAN::Int,   value
 161          assert_equal       12,          value.val
 162      end
 163 
 164 
 165      def test_imess_divide
 166          value = Api.eval_expr @interp, "7./ 3"
 167          assert_instance_of VCAN::Int,   value
 168          assert_equal       2,           value.val
 169      end
 170 
 171 
 172      def test_integer_should_be_not_devide_by_zero
 173          assert_raises(X::ZeroDivisionError) do
 174              Api.eval_expr @interp, "7./ 0"
 175          end
 176      end
 177 
 178 
 179      def test_imess_mod
 180          value = Api.eval_expr @interp, "7.mod 3"
 181          assert_instance_of VCAN::Int,   value
 182          assert_equal       1,           value.val
 183      end
 184 
 185 
 186      def test_imess_pow
 187          value = Api.eval_expr @interp, "2.pow 3"
 188          assert_instance_of VCAN::Int,   value
 189          assert_equal       8,           value.val
 190      end
 191 
 192 
 193      def test_imess_random
 194          assert (
 195              Api.eval_expr @interp, "10.random"
 196          )
 197      end
 198 
 199 
 200      def test_parameter_value_should_not_be_negative_number
 201          assert_raises(X::ArgumentError) do
 202              Api.eval_expr @interp, "-10.random"
 203          end
 204      end
 205 
 206 
 207      def test_imess_to
 208          value = Api.eval_expr @interp, "3.to 10"
 209          assert_instance_of  VCM::Interval, value
 210          assert_instance_of  VCAN::Int,     value.current_value
 211          assert_equal        3,             value.current_value.val
 212          assert_instance_of  VCAN::Int,     value.step_value
 213          assert_equal        1,             value.step_value.val
 214          assert_instance_of  VCAN::Int,     value.stop_value
 215          assert_equal        10,            value.stop_value.val
 216      end
 217 
 218 
 219      def test_kw_imess_to
 220          value = Api.eval_expr @interp, "3.(to:10)"
 221          assert_instance_of  VCM::Interval, value
 222          assert_instance_of  VCAN::Int,     value.current_value
 223          assert_equal        3,             value.current_value.val
 224          assert_instance_of  VCAN::Int,     value.step_value
 225          assert_equal        1,             value.step_value.val
 226          assert_instance_of  VCAN::Int,     value.stop_value
 227          assert_equal        10,            value.stop_value.val
 228      end
 229 
 230 
 231      def test_imess_to_by
 232          value = Api.eval_expr @interp, "3.to-by 10 2"
 233          assert_instance_of  VCM::Interval, value
 234          assert_instance_of  VCAN::Int,     value.current_value
 235          assert_equal        3,             value.current_value.val
 236          assert_instance_of  VCAN::Int,     value.step_value
 237          assert_equal        2,             value.step_value.val
 238          assert_instance_of  VCAN::Int,     value.stop_value
 239          assert_equal        10,            value.stop_value.val
 240      end
 241 
 242 
 243      def test_kw_imess_to_by
 244          value = Api.eval_expr @interp, "3.(to:10 by:2)"
 245          assert_instance_of  VCM::Interval, value
 246          assert_instance_of  VCAN::Int,     value.current_value
 247          assert_equal        3,             value.current_value.val
 248          assert_instance_of  VCAN::Int,     value.step_value
 249          assert_equal        2,             value.step_value.val
 250          assert_instance_of  VCAN::Int,     value.stop_value
 251          assert_equal        10,            value.stop_value.val
 252      end
 253 
 254 
 255      def test_step_value_should_be_positive_if_upto_interval
 256          assert_raises(X::ValueError) do
 257              Api.eval_expr @interp, "3.to-by 10 -2"
 258          end
 259      end
 260 
 261 
 262      def test_step_value_should_be_negative_if_downto_interval
 263          assert_raises(X::ValueError) do
 264              Api.eval_expr @interp, "10.to-by 3 2"
 265          end
 266      end
 267 
 268 
 269      # Type Error
 270 
 271      def test_parameter_of_computer_should_be_a_int
 272          assert_raises(X::TypeError) do
 273              Api.eval_expr @interp, "3.+ ()"
 274          end
 275 
 276          assert_raises(X::TypeError) do
 277              Api.eval_expr @interp, "3.+ @Apple"
 278          end
 279 
 280          assert_raises(X::TypeError) do
 281              Api.eval_expr @interp, "3.+ 4.0"
 282          end
 283      end
 284 
 285 
 286      def test_parameter_of_relation_operator_should_be_a_int
 287          assert_raises(X::TypeError) do
 288              Api.eval_expr @interp, "3.< ()"
 289          end
 290 
 291          assert_raises(X::TypeError) do
 292              Api.eval_expr @interp, "3.< @Apple"
 293          end
 294 
 295          assert_raises(X::TypeError) do
 296              Api.eval_expr @interp, "3.< 4.0"
 297          end
 298 
 299          assert_raises(X::TypeError) do
 300              Api.eval_expr @interp, "3.<= ()"
 301          end
 302 
 303          assert_raises(X::TypeError) do
 304              Api.eval_expr @interp, "3.<= @Apple"
 305          end
 306 
 307          assert_raises(X::TypeError) do
 308              Api.eval_expr @interp, "3.<= 4.0"
 309          end
 310      end
 311  end
 312 
 313  end # Umu::Test::Library::Class::Atom::Number
 314 
 315  end # Umu::Test::Library::Class::Atom
 316 
 317  end # Umu::Test::Library::Class
 318 
 319  end # Umu::Test::Library
 320 
 321  end # Umu::Test
 322 
 323  end # Umu