c_extensions/c_numerics_no_parens.rb
tests/_examples/c_extensions/c_numerics_no_parens.rb in the metorex repository.
# A C extension making and reading Floats, Complex numbers and Rationals.
require "tmpdir"
require_relative "build_helper"
directory = Dir.mktmpdir
require build_extension("c_numerics.c", "c_numerics", directory)
numerics = CNumerics.new
p numerics.half
p numerics.doubled 1.25
report { numerics.doubled 2 }
p [numerics.is_float(1.0), numerics.is_float(1), numerics.is_float(nil)]
p numerics.to_float "2.5"
p numerics.to_float 3
report { numerics.to_float "many" }
p numerics.complex 1, 2
p numerics.complex "3", "4"
p numerics.complex_real 5
p numerics.complex_new 10, 4
p numerics.complex_new_real 6
p numerics.complex_new 1.5, 2
p numerics.rational 1, 2
p numerics.rational "3", "4"
p numerics.rational_whole 5
p numerics.rational_new 10, 4
p numerics.rational_new_whole 6
report { numerics.rational_new 1, 0 }
p numerics.parts Rational(7, 2)
FileUtils.rm_rf directory
Output:
0.5
2.5
TypeError: wrong argument type Integer (expected Float)
[true, false, false]
2.5
3.0
ArgumentError: invalid value for Float(): "many"
(1+2i)
(3+4i)
(5+0i)
(10+4i)
(6+0i)
(1.5+2i)
(1/2)
(3/4)
(5/1)
(5/2)
(6/1)
ZeroDivisionError: divided by 0
[7, 2]