test/test_define_conversions.rb in ruby-decimal-0.2.1 vs test/test_define_conversions.rb in ruby-decimal-0.2.2
- old
+ new
@@ -91,11 +91,11 @@
assert_equal Decimal('7.1'), 7.0+Decimal('0.1')
Decimal.local_context(:precision=>12) do
assert_equal Decimal('7.1'), Decimal('7')+0.1
end
assert_equal Decimal('11'), Decimal(11.0)
- assert Decimal(11.0).is_a?(Decimal)
+ assert_instance_of Decimal, Decimal(11.0)
Decimal.context.define_conversion_from(Float) do |x, context|
Decimal.context(context, :exact=>true) do
s,e = Math.frexp(x)
s = Math.ldexp(s, Float::MANT_DIG).to_i
@@ -104,9 +104,38 @@
end
end
assert_equal '0.1000000000000000055511151231257827021181583404541015625', Decimal(0.1).to_s
assert_equal '1.100000000000000088817841970012523233890533447265625', Decimal(1.1).to_s
+
+ end
+
+ def test_conversion_types
+
+ assert_instance_of Decimal, Decimal(1)+3
+ assert_instance_of Decimal, 3+Decimal(1)
+ assert_instance_of Decimal, Rational(1,5)+Decimal(1)
+ assert_instance_of Decimal, Decimal(1)+Rational(1,5)
+ assert_instance_of Float, Decimal(1)+3.0
+ assert_instance_of Float, 3.0+Decimal(1)
+
+ Decimal.context.define_conversion_from(Float) do |x, context|
+ s,e = Math.frexp(x)
+ significand = Math.ldexp(s, Float::MANT_DIG).to_i
+ exponent = e - Float::MANT_DIG
+ # the number is (as a Rational) significand * exponent**Float::RADIX
+ Decimal(significand*(Float::RADIX**exponent ))
+ end
+
+ assert_instance_of Decimal, Decimal(1)+3.0
+ assert_instance_of Decimal, 3.0+Decimal(1)
+
+ Decimal.context.define_conversion_from(BigDecimal) do |x, context|
+ Decimal(x.to_s) # or use x.split etc.
+ end
+
+ assert_instance_of Decimal, Decimal(1)+BigDecimal('3')
+ assert_instance_of Decimal, BigDecimal('3')+Decimal(1)
end
end
\ No newline at end of file