File: class_library/atom/float_test.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6

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 FloatTest < Minitest::Test
  19      def setup
  20          @interp = Api.setup_interpreter
  21      end
  22 
  23 
  24      # Constructer
  25 
  26      def test_cmess_make_nan
  27          value = Api.eval_expr @interp, "&Float.nan"
  28          assert_instance_of VCAN::Float, value
  29          assert                          value.val.nan?
  30      end
  31 
  32 
  33      def test_cmess_make_infinity
  34          value = Api.eval_expr @interp, "&Float.infinity"
  35          assert_instance_of VCAN::Float, value
  36          assert                          value.val.infinite?
  37      end
  38 
  39 
  40      # Classifier
  41 
  42      def test_imess_is_zero
  43          value = Api.eval_expr @interp, "0.0.zero?"
  44          assert_instance_of VCA::Bool,   value
  45          assert_equal       true,        value.val
  46 
  47          value = Api.eval_expr @interp, "3.0.zero?"
  48          assert_instance_of VCA::Bool,   value
  49          assert_equal       false,       value.val
  50      end
  51 
  52 
  53      def test_imess_is_positive
  54          value = Api.eval_expr @interp, "3.0.positive?"
  55          assert_instance_of VCA::Bool,   value
  56          assert_equal       true,        value.val
  57 
  58          value = Api.eval_expr @interp, "0.0.positive?"
  59          assert_instance_of VCA::Bool,   value
  60          assert_equal       false,       value.val
  61      end
  62 
  63 
  64      def test_imess_is_negative
  65          value = Api.eval_expr @interp, "-3.0.negative?"
  66          assert_instance_of VCA::Bool,   value
  67          assert_equal       true,        value.val
  68 
  69          value = Api.eval_expr @interp, "0.0.negative?"
  70          assert_instance_of VCA::Bool,   value
  71          assert_equal       false,       value.val
  72      end
  73 
  74 
  75      # Formater
  76 
  77      def test_imess_show_finite
  78          value = Api.eval_expr @interp, "3.0.show"
  79          assert_instance_of VCA::String, value
  80          assert_equal       "3.0",       value.val
  81      end
  82 
  83 
  84      def test_imess_finite_to_s
  85          value = Api.eval_expr @interp, "3.0.to-s"
  86          assert_instance_of VCA::String, value
  87          assert_equal       "3.0",       value.val
  88      end
  89 
  90 
  91      def test_imess_show_nan
  92          value = Api.eval_expr @interp, "NAN.show"
  93          assert_instance_of VCA::String, value
  94          assert_equal       "NAN",       value.val
  95      end
  96 
  97 
  98      def test_imess_nan_to_s
  99          value = Api.eval_expr @interp, "NAN.to-s"
 100          assert_instance_of VCA::String, value
 101          assert_equal       "NAN",       value.val
 102      end
 103 
 104 
 105      def test_imess_show_positive_infinite
 106          value = Api.eval_expr @interp, "INFINITY.show"
 107          assert_instance_of VCA::String, value
 108          assert_equal       "INFINITY",  value.val
 109      end
 110 
 111 
 112      def test_imess_positive_infinite_to_s
 113          value = Api.eval_expr @interp, "INFINITY.to-s"
 114          assert_instance_of VCA::String, value
 115          assert_equal       "INFINITY",  value.val
 116      end
 117 
 118 
 119      def test_imess_show_negative_infinite
 120          value = Api.eval_expr @interp, "INFINITY.negate.show"
 121          assert_instance_of VCA::String, value
 122          assert_equal       "-INFINITY", value.val
 123      end
 124 
 125 
 126      def test_imess_negative_infinite_to_s
 127          value = Api.eval_expr @interp, "INFINITY.negate.to-s"
 128          assert_instance_of VCA::String, value
 129          assert_equal       "-INFINITY", value.val
 130      end
 131 
 132 
 133      # Type converter
 134 
 135      def test_imess_to_i
 136          value = Api.eval_expr @interp, "3.0.to-i"
 137          assert_instance_of VCAN::Int,   value
 138          assert_equal       3,           value.val
 139      end
 140 
 141 
 142      def test_imess_to_f
 143          value = Api.eval_expr @interp, "3.to-f"
 144          assert_instance_of VCAN::Float, value
 145          assert_equal       3.0,         value.val
 146      end
 147 
 148 
 149      # Computer
 150 
 151      def test_imess_negate
 152          value = Api.eval_expr @interp, "3.0.negate"
 153          assert_instance_of VCAN::Float, value
 154          assert_equal       (-3.0),      value.val
 155 
 156          value = Api.eval_expr @interp, "-3.0.negate"
 157          assert_instance_of VCAN::Float, value
 158          assert_equal       3.0,         value.val
 159      end
 160 
 161 
 162      def test_imess_abs
 163          value = Api.eval_expr @interp, "3.0.abs"
 164          assert_instance_of VCAN::Float, value
 165          assert_equal       3.0,         value.val
 166 
 167          value = Api.eval_expr @interp, "-3.0.negate"
 168          assert_instance_of VCAN::Float, value
 169          assert_equal       3.0,         value.val
 170      end
 171 
 172 
 173      def test_imess_add
 174          value = Api.eval_expr @interp, "3.0.+ 4.0"
 175          assert_instance_of VCAN::Float, value
 176          assert_equal       7.0,         value.val
 177      end
 178 
 179 
 180      def test_imess_sub
 181          value = Api.eval_expr @interp, "3.0.- 4.0"
 182          assert_instance_of VCAN::Float, value
 183          assert_equal       (-1.0),      value.val
 184      end
 185 
 186 
 187      def test_imess_multiply
 188          value = Api.eval_expr @interp, "3.0.* 4.0"
 189          assert_instance_of VCAN::Float, value
 190          assert_equal       12.0,        value.val
 191      end
 192 
 193 
 194      def test_imess_divide
 195          value = Api.eval_expr @interp, "7.0./ 2.0"
 196          assert_instance_of VCAN::Float, value
 197          assert_equal       3.5,         value.val
 198      end
 199 
 200 
 201      def test_imess_divide_by_zero
 202          value = Api.eval_expr @interp, "7.0./ 0.0"
 203          assert_instance_of VCAN::Float, value
 204          assert                          value.val.infinite?
 205      end
 206 
 207 
 208      def test_imess_mod
 209          value = Api.eval_expr @interp, "7.0.mod 3.0"
 210          assert_instance_of VCAN::Float, value
 211          assert_equal       1.0,         value.val
 212      end
 213 
 214 
 215      def test_imess_pow
 216          value = Api.eval_expr @interp, "2.0.pow 3.0"
 217          assert_instance_of VCAN::Float, value
 218          assert_equal       8.0,         value.val
 219      end
 220 
 221 
 222      def test_imess_random
 223          assert (
 224              Api.eval_expr @interp, "10.0.random"
 225          )
 226      end
 227 
 228 
 229      def test_parameter_value_should_not_be_negative_number
 230          assert_raises(X::ArgumentError) do
 231              Api.eval_expr @interp, "-10.0.random"
 232          end
 233      end
 234 
 235 
 236      # Type Error
 237 
 238      def test_parameter_of_computer_should_be_a_float
 239          assert_raises(X::TypeError) do
 240              Api.eval_expr @interp, "3.0.+ ()"
 241          end
 242 
 243          assert_raises(X::TypeError) do
 244              Api.eval_expr @interp, "3.0.+ @Apple"
 245          end
 246 
 247          assert_raises(X::TypeError) do
 248              Api.eval_expr @interp, "3.0.+ 4"
 249          end
 250      end
 251 
 252 
 253      def test_parameter_of_relation_operator_should_be_a_float
 254          assert_raises(X::TypeError) do
 255              Api.eval_expr @interp, "3.0.< ()"
 256          end
 257 
 258          assert_raises(X::TypeError) do
 259              Api.eval_expr @interp, "3.0.< @Apple"
 260          end
 261 
 262          assert_raises(X::TypeError) do
 263              Api.eval_expr @interp, "3.0.< 4"
 264          end
 265 
 266          assert_raises(X::TypeError) do
 267              Api.eval_expr @interp, "3.0.<= ()"
 268          end
 269 
 270          assert_raises(X::TypeError) do
 271              Api.eval_expr @interp, "3.0.<= @Apple"
 272          end
 273 
 274          assert_raises(X::TypeError) do
 275              Api.eval_expr @interp, "3.0.<= 4"
 276          end
 277      end
 278  end
 279 
 280  end # Umu::Test::Library::Class::Atom::Number
 281 
 282  end # Umu::Test::Library::Class::Atom
 283 
 284  end # Umu::Test::Library::Class
 285 
 286  end # Umu::Test::Library
 287 
 288  end # Umu::Test
 289 
 290  end # Umu