summaryrefslogtreecommitdiff
path: root/spec/ruby/library/bigdecimal
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/library/bigdecimal')
-rw-r--r--spec/ruby/library/bigdecimal/BigDecimal_spec.rb177
-rw-r--r--spec/ruby/library/bigdecimal/abs_spec.rb2
-rw-r--r--spec/ruby/library/bigdecimal/add_spec.rb28
-rw-r--r--spec/ruby/library/bigdecimal/ceil_spec.rb6
-rw-r--r--spec/ruby/library/bigdecimal/comparison_spec.rb2
-rw-r--r--spec/ruby/library/bigdecimal/constants_spec.rb10
-rw-r--r--spec/ruby/library/bigdecimal/core_spec.rb62
-rw-r--r--spec/ruby/library/bigdecimal/div_spec.rb44
-rw-r--r--spec/ruby/library/bigdecimal/divmod_spec.rb92
-rw-r--r--spec/ruby/library/bigdecimal/exponent_spec.rb11
-rw-r--r--spec/ruby/library/bigdecimal/finite_spec.rb8
-rw-r--r--spec/ruby/library/bigdecimal/fix_spec.rb32
-rw-r--r--spec/ruby/library/bigdecimal/floor_spec.rb6
-rw-r--r--spec/ruby/library/bigdecimal/frac_spec.rb2
-rw-r--r--spec/ruby/library/bigdecimal/gt_spec.rb14
-rw-r--r--spec/ruby/library/bigdecimal/gte_spec.rb14
-rw-r--r--spec/ruby/library/bigdecimal/lt_spec.rb14
-rw-r--r--spec/ruby/library/bigdecimal/lte_spec.rb14
-rw-r--r--spec/ruby/library/bigdecimal/minus_spec.rb18
-rw-r--r--spec/ruby/library/bigdecimal/mode_spec.rb12
-rw-r--r--spec/ruby/library/bigdecimal/mult_spec.rb8
-rw-r--r--spec/ruby/library/bigdecimal/nan_spec.rb22
-rw-r--r--spec/ruby/library/bigdecimal/nonzero_spec.rb10
-rw-r--r--spec/ruby/library/bigdecimal/plus_spec.rb6
-rw-r--r--spec/ruby/library/bigdecimal/precs_spec.rb48
-rw-r--r--spec/ruby/library/bigdecimal/quo_spec.rb4
-rw-r--r--spec/ruby/library/bigdecimal/remainder_spec.rb37
-rw-r--r--spec/ruby/library/bigdecimal/round_spec.rb16
-rw-r--r--spec/ruby/library/bigdecimal/shared/clone.rb17
-rw-r--r--spec/ruby/library/bigdecimal/shared/modulo.rb50
-rw-r--r--spec/ruby/library/bigdecimal/shared/mult.rb20
-rw-r--r--spec/ruby/library/bigdecimal/shared/power.rb8
-rw-r--r--spec/ruby/library/bigdecimal/shared/quo.rb11
-rw-r--r--spec/ruby/library/bigdecimal/shared/to_int.rb8
-rw-r--r--spec/ruby/library/bigdecimal/split_spec.rb20
-rw-r--r--spec/ruby/library/bigdecimal/sqrt_spec.rb24
-rw-r--r--spec/ruby/library/bigdecimal/sub_spec.rb16
-rw-r--r--spec/ruby/library/bigdecimal/to_f_spec.rb8
-rw-r--r--spec/ruby/library/bigdecimal/to_i_spec.rb2
-rw-r--r--spec/ruby/library/bigdecimal/to_r_spec.rb18
-rw-r--r--spec/ruby/library/bigdecimal/to_s_spec.rb24
-rw-r--r--spec/ruby/library/bigdecimal/truncate_spec.rb22
-rw-r--r--spec/ruby/library/bigdecimal/uminus_spec.rb2
-rw-r--r--spec/ruby/library/bigdecimal/util_spec.rb8
-rw-r--r--spec/ruby/library/bigdecimal/zero_spec.rb26
45 files changed, 550 insertions, 453 deletions
diff --git a/spec/ruby/library/bigdecimal/BigDecimal_spec.rb b/spec/ruby/library/bigdecimal/BigDecimal_spec.rb
index e1e6fe9fb1..6adebabe84 100644
--- a/spec/ruby/library/bigdecimal/BigDecimal_spec.rb
+++ b/spec/ruby/library/bigdecimal/BigDecimal_spec.rb
@@ -10,7 +10,7 @@ end
describe "Kernel#BigDecimal" do
it "creates a new object of class BigDecimal" do
- BigDecimal("3.14159").should be_kind_of(BigDecimal)
+ BigDecimal("3.14159").should.is_a?(BigDecimal)
(0..9).each {|i|
BigDecimal("1#{i}").should == 10 + i
BigDecimal("-1#{i}").should == -10 - i
@@ -24,106 +24,108 @@ describe "Kernel#BigDecimal" do
}
end
+ it "BigDecimal(Rational) with bigger-than-double numerator" do
+ rational = 99999999999999999999/100r
+ rational.numerator.should > 2**64
+ BigDecimal(rational, 100).to_s.should == "0.99999999999999999999e18"
+ end
+
it "accepts significant digits >= given precision" do
- BigDecimal("3.1415923", 10).precs[1].should >= 10
+ BigDecimal("3.1415923", 10).should == BigDecimal("3.1415923")
end
it "determines precision from initial value" do
pi_string = "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593014782083152134043"
- BigDecimal(pi_string).precs[1].should >= pi_string.size-1
+ BigDecimal(pi_string).precision.should == pi_string.size-1
end
- it "ignores leading whitespace" do
- BigDecimal(" \t\n \r1234").should == BigDecimal("1234")
- BigDecimal(" \t\n \rNaN \n").nan?.should == true
+ it "ignores leading and trailing whitespace" do
+ BigDecimal(" \t\n \r1234\t\r\n ").should == BigDecimal("1234")
+ BigDecimal(" \t\n \rNaN \n").should.nan?
BigDecimal(" \t\n \rInfinity \n").infinite?.should == 1
BigDecimal(" \t\n \r-Infinity \n").infinite?.should == -1
end
- ruby_version_is ""..."2.6" do
- it "ignores trailing garbage" do
- BigDecimal("123E45ruby").should == BigDecimal("123E45")
- BigDecimal("123x45").should == BigDecimal("123")
- BigDecimal("123.4%E5").should == BigDecimal("123.4")
- BigDecimal("1E2E3E4E5E").should == BigDecimal("100")
- end
+ it "coerces the value argument with #to_str" do
+ initial = mock("value")
+ initial.should_receive(:to_str).and_return("123")
+ BigDecimal(initial).should == BigDecimal("123")
end
- ruby_version_is "2.6" do
- it "does not ignores trailing garbage" do
- -> { BigDecimal("123E45ruby") }.should raise_error(ArgumentError)
- -> { BigDecimal("123x45") }.should raise_error(ArgumentError)
- -> { BigDecimal("123.4%E5") }.should raise_error(ArgumentError)
- -> { BigDecimal("1E2E3E4E5E") }.should raise_error(ArgumentError)
- end
+ it "does not ignores trailing garbage" do
+ -> { BigDecimal("123E45ruby") }.should.raise(ArgumentError)
+ -> { BigDecimal("123x45") }.should.raise(ArgumentError)
+ -> { BigDecimal("123.4%E5") }.should.raise(ArgumentError)
+ -> { BigDecimal("1E2E3E4E5E") }.should.raise(ArgumentError)
end
it "raises ArgumentError for invalid strings" do
- -> { BigDecimal("ruby") }.should raise_error(ArgumentError)
- -> { BigDecimal(" \t\n \r-\t\t\tInfinity \n") }.should raise_error(ArgumentError)
+ -> { BigDecimal("ruby") }.should.raise(ArgumentError)
+ -> { BigDecimal(" \t\n \r-\t\t\tInfinity \n") }.should.raise(ArgumentError)
end
it "allows omitting the integer part" do
BigDecimal(".123").should == BigDecimal("0.123")
end
- ruby_version_is ""..."2.6" do
- it "allows for underscores in all parts" do
- reference = BigDecimal("12345.67E89")
-
- BigDecimal("12_345.67E89").should == reference
- BigDecimal("1_2_3_4_5_._6____7_E89").should == reference
- BigDecimal("12345_.67E_8__9_").should == reference
- end
- end
-
- ruby_version_is "2.6" do
- it "process underscores as Float()" do
- reference = BigDecimal("12345.67E89")
+ it "process underscores as Float()" do
+ reference = BigDecimal("12345.67E89")
- BigDecimal("12_345.67E89").should == reference
- -> { BigDecimal("1_2_3_4_5_._6____7_E89") }.should raise_error(ArgumentError)
- -> { BigDecimal("12345_.67E_8__9_") }.should raise_error(ArgumentError)
- end
+ BigDecimal("12_345.67E89").should == reference
+ -> { BigDecimal("1_2_3_4_5_._6____7_E89") }.should.raise(ArgumentError)
+ -> { BigDecimal("12345_.67E_8__9_") }.should.raise(ArgumentError)
end
it "accepts NaN and [+-]Infinity" do
- BigDecimal("NaN").nan?.should == true
+ BigDecimal("NaN").should.nan?
pos_inf = BigDecimal("Infinity")
- pos_inf.finite?.should == false
+ pos_inf.should_not.finite?
pos_inf.should > 0
pos_inf.should == BigDecimal("+Infinity")
neg_inf = BigDecimal("-Infinity")
- neg_inf.finite?.should == false
+ neg_inf.should_not.finite?
neg_inf.should < 0
end
+ describe "with exception: false" do
+ it "returns nil for invalid strings" do
+ BigDecimal("invalid", exception: false).should == nil
+ BigDecimal("0invalid", exception: false).should == nil
+ BigDecimal("invalid0", exception: false).should == nil
+ if BigDecimal::VERSION >= "3.1.9"
+ BigDecimal("0.", exception: false).to_i.should == 0
+ else
+ BigDecimal("0.", exception: false).should == nil
+ end
+ end
+ end
+
describe "accepts NaN and [+-]Infinity as Float values" do
it "works without an explicit precision" do
- BigDecimal(Float::NAN).nan?.should == true
+ BigDecimal(Float::NAN).should.nan?
pos_inf = BigDecimal(Float::INFINITY)
- pos_inf.finite?.should == false
+ pos_inf.should_not.finite?
pos_inf.should > 0
pos_inf.should == BigDecimal("+Infinity")
neg_inf = BigDecimal(-Float::INFINITY)
- neg_inf.finite?.should == false
+ neg_inf.should_not.finite?
neg_inf.should < 0
end
it "works with an explicit precision" do
- BigDecimal(Float::NAN, Float::DIG).nan?.should == true
+ BigDecimal(Float::NAN, Float::DIG).should.nan?
pos_inf = BigDecimal(Float::INFINITY, Float::DIG)
- pos_inf.finite?.should == false
+ pos_inf.should_not.finite?
pos_inf.should > 0
pos_inf.should == BigDecimal("+Infinity")
neg_inf = BigDecimal(-Float::INFINITY, Float::DIG)
- neg_inf.finite?.should == false
+ neg_inf.should_not.finite?
neg_inf.should < 0
end
end
@@ -150,8 +152,10 @@ describe "Kernel#BigDecimal" do
BigDecimal("-12345.6E-1").should == -reference
end
- it "raises ArgumentError when Float is used without precision" do
- -> { BigDecimal(1.0) }.should raise_error(ArgumentError)
+ version_is BigDecimal::VERSION, "3.3.0" do
+ it "allows Float without precision" do
+ BigDecimal(1.2).should == BigDecimal("1.2")
+ end
end
it "returns appropriate BigDecimal zero for signed zero" do
@@ -159,4 +163,77 @@ describe "Kernel#BigDecimal" do
BigDecimal(0.0, Float::DIG).sign.should == 1
end
+ it "pre-coerces long integers" do
+ BigDecimal(3).add(1 << 50, 3).should == BigDecimal('0.113e16')
+ end
+
+ it "does not call to_s when calling inspect" do
+ value = BigDecimal('44.44')
+ value.to_s.should == '0.4444e2'
+ value.inspect.should == '0.4444e2'
+
+ ruby_exe( <<-'EOF').should == "cheese 0.4444e2"
+ require 'bigdecimal'
+ module BigDecimalOverride
+ def to_s; "cheese"; end
+ end
+ BigDecimal.prepend BigDecimalOverride
+ value = BigDecimal('44.44')
+ print "#{value.to_s} #{value.inspect}"
+ EOF
+ end
+
+ describe "when interacting with Rational" do
+ before :each do
+ @a = BigDecimal('166.666666666')
+ @b = Rational(500, 3)
+ @c = @a - @b
+ end
+
+ # Check the input is as we understand it
+
+ it "has the LHS print as expected" do
+ @a.to_s.should == "0.166666666666e3"
+ @a.to_f.to_s.should == "166.666666666"
+ Float(@a).to_s.should == "166.666666666"
+ end
+
+ it "has the RHS print as expected" do
+ @b.to_s.should == "500/3"
+ @b.to_f.to_s.should == "166.66666666666666"
+ Float(@b).to_s.should == "166.66666666666666"
+ end
+
+ it "produces the expected result when done via Float" do
+ (Float(@a) - Float(@b)).to_s.should == "-6.666596163995564e-10"
+ end
+
+ it "produces the expected result when done via to_f" do
+ (@a.to_f - @b.to_f).to_s.should == "-6.666596163995564e-10"
+ end
+
+ # Check underlying methods work as we understand
+
+ it "BigDecimal(Rational, 18) produces the result we expect" do
+ BigDecimal(@b, 18).to_s.should == "0.166666666666666667e3"
+ end
+
+ # Check the top-level expression works as we expect
+
+ it "produces a BigDecimal" do
+ @c.class.should == BigDecimal
+ end
+
+ it "produces the expected result" do
+ @c.round(15).should == BigDecimal("-0.666667e-9")
+ @c.round(15).to_s.should == "-0.666667e-9"
+ end
+
+ it "produces the correct class for other arithmetic operators" do
+ (@a + @b).class.should == BigDecimal
+ (@a * @b).class.should == BigDecimal
+ (@a / @b).class.should == BigDecimal
+ (@a % @b).class.should == BigDecimal
+ end
+ end
end
diff --git a/spec/ruby/library/bigdecimal/abs_spec.rb b/spec/ruby/library/bigdecimal/abs_spec.rb
index ddd2bae9a9..95dc45a905 100644
--- a/spec/ruby/library/bigdecimal/abs_spec.rb
+++ b/spec/ruby/library/bigdecimal/abs_spec.rb
@@ -38,7 +38,7 @@ describe "BigDecimal#abs" do
it "properly handles special values" do
@infinity.abs.should == @infinity
@infinity_minus.abs.should == @infinity
- @nan.abs.nan?.should == true # have to do it this way, since == doesn't work on NaN
+ @nan.abs.should.nan? # have to do it this way, since == doesn't work on NaN
@zero.abs.should == 0
@zero.abs.sign.should == BigDecimal::SIGN_POSITIVE_ZERO
@zero_pos.abs.should == 0
diff --git a/spec/ruby/library/bigdecimal/add_spec.rb b/spec/ruby/library/bigdecimal/add_spec.rb
index 5b874687fe..a4237298f4 100644
--- a/spec/ruby/library/bigdecimal/add_spec.rb
+++ b/spec/ruby/library/bigdecimal/add_spec.rb
@@ -24,7 +24,7 @@ describe "BigDecimal#add" do
end
it "returns a + b with given precision" do
- # documentation states, that precision ist optional, but it ain't,
+ # documentation states that precision is optional, but it ain't,
@two.add(@one, 1).should == @three
@one .add(@two, 1).should == @three
@one.add(@one_minus, 1).should == @zero
@@ -60,7 +60,7 @@ describe "BigDecimal#add" do
end
# TODO:
-# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/17374
+# https://blade.ruby-lang.org/ruby-core/17374
#
# This doesn't work on MRI and looks like a bug to me:
# one can use BigDecimal + Float, but not Bigdecimal.add(Float)
@@ -73,14 +73,6 @@ describe "BigDecimal#add" do
# BigDecimal("0.88").add(0.0, 1).should == BigDecimal("0.9")
# end
- describe "with Object" do
- it "tries to coerce the other operand to self" do
- object = mock("Object")
- object.should_receive(:coerce).with(@frac_3).and_return([@frac_3, @frac_4])
- @frac_3.add(object, 1).should == BigDecimal("0.1E16")
- end
- end
-
describe "with Rational" do
it "produces a BigDecimal" do
(@three + Rational(500, 2)).should == BigDecimal("0.253e3")
@@ -136,8 +128,8 @@ describe "BigDecimal#add" do
end
it "returns NaN if NaN is involved" do
- @one.add(@nan, 10000).nan?.should == true
- @nan.add(@one, 1).nan?.should == true
+ @one.add(@nan, 10000).should.nan?
+ @nan.add(@one, 1).should.nan?
end
it "returns Infinity or -Infinity if these are involved" do
@@ -166,28 +158,28 @@ describe "BigDecimal#add" do
end
it "returns NaN if Infinity + (- Infinity)" do
- @infinity.add(@infinity_minus, 10000).nan?.should == true
- @infinity_minus.add(@infinity, 10000).nan?.should == true
+ @infinity.add(@infinity_minus, 10000).should.nan?
+ @infinity_minus.add(@infinity, 10000).should.nan?
end
it "raises TypeError when adds nil" do
-> {
@one.add(nil, 10)
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
-> {
@one.add(nil, 0)
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
end
it "raises TypeError when precision parameter is nil" do
-> {
@one.add(@one, nil)
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
end
it "raises ArgumentError when precision parameter is negative" do
-> {
@one.add(@one, -10)
- }.should raise_error(ArgumentError)
+ }.should.raise(ArgumentError)
end
end
diff --git a/spec/ruby/library/bigdecimal/ceil_spec.rb b/spec/ruby/library/bigdecimal/ceil_spec.rb
index 60e71b12fb..3d94b8e578 100644
--- a/spec/ruby/library/bigdecimal/ceil_spec.rb
+++ b/spec/ruby/library/bigdecimal/ceil_spec.rb
@@ -48,9 +48,9 @@ describe "BigDecimal#ceil" do
end
it "raise exception, if self is special value" do
- -> { @infinity.ceil }.should raise_error(FloatDomainError)
- -> { @infinity_neg.ceil }.should raise_error(FloatDomainError)
- -> { @nan.ceil }.should raise_error(FloatDomainError)
+ -> { @infinity.ceil }.should.raise(FloatDomainError)
+ -> { @infinity_neg.ceil }.should.raise(FloatDomainError)
+ -> { @nan.ceil }.should.raise(FloatDomainError)
end
it "returns n digits right of the decimal point if given n > 0" do
diff --git a/spec/ruby/library/bigdecimal/comparison_spec.rb b/spec/ruby/library/bigdecimal/comparison_spec.rb
index a1e09b601f..c53187b727 100644
--- a/spec/ruby/library/bigdecimal/comparison_spec.rb
+++ b/spec/ruby/library/bigdecimal/comparison_spec.rb
@@ -18,7 +18,7 @@ describe "BigDecimal#<=>" do
def coerce(other)
return [other, BigDecimal('123')]
end
- def >= (other)
+ def >=(other)
BigDecimal('123') >= other
end
end
diff --git a/spec/ruby/library/bigdecimal/constants_spec.rb b/spec/ruby/library/bigdecimal/constants_spec.rb
index 1eb24d85cb..f2cc42dfc9 100644
--- a/spec/ruby/library/bigdecimal/constants_spec.rb
+++ b/spec/ruby/library/bigdecimal/constants_spec.rb
@@ -2,20 +2,18 @@ require_relative '../../spec_helper'
require 'bigdecimal'
describe "BigDecimal constants" do
- ruby_version_is "2.5" do
- it "defines a VERSION value" do
- BigDecimal.const_defined?(:VERSION).should be_true
- end
+ it "defines a VERSION value" do
+ BigDecimal.const_defined?(:VERSION).should == true
end
it "has a BASE value" do
# The actual one is decided based on HAVE_INT64_T in MRI,
# which is hard to check here.
- [10000, 1000000000].should include(BigDecimal::BASE)
+ [10000, 1000000000].should.include?(BigDecimal::BASE)
end
it "has a NaN value" do
- BigDecimal::NAN.nan?.should be_true
+ BigDecimal::NAN.nan?.should == true
end
it "has an INFINITY value" do
diff --git a/spec/ruby/library/bigdecimal/core_spec.rb b/spec/ruby/library/bigdecimal/core_spec.rb
new file mode 100644
index 0000000000..8f64fdf388
--- /dev/null
+++ b/spec/ruby/library/bigdecimal/core_spec.rb
@@ -0,0 +1,62 @@
+require_relative '../../spec_helper'
+require 'bigdecimal'
+
+describe "Core extension by bigdecimal" do
+ context "Integer#coerce" do
+ it "produces Floats" do
+ x, y = 3.coerce(BigDecimal("3.4"))
+ x.class.should == Float
+ x.should == 3.4
+ y.class.should == Float
+ y.should == 3.0
+ end
+ end
+
+ describe "Time.at passed BigDecimal" do
+ it "doesn't round input value" do
+ Time.at(BigDecimal('1.1')).to_f.should == 1.1
+ end
+ end
+
+ describe "BigDecimal#log" do
+ it "handles high-precision Rational arguments" do
+ # log(BigDecimal(r, 50), 50)
+ result1 = BigDecimal('0.22314354220170971436137296411949880462556361100856e0')
+ # log(BigDecimal(r, 1000), 50)
+ result2 = BigDecimal('0.22314354220170971436137296411949880462556361100853e0')
+ r = Rational(1_234_567_890, 987_654_321)
+ [result1, result2].should.include?(BigMath.log(r, 50).mult(1, 50))
+ end
+ end
+
+ describe "Rational#coerce" do
+ it "returns the passed argument, self as Float, when given a Float" do
+ result = Rational(3, 4).coerce(1.0)
+ result.should == [1.0, 0.75]
+ result.first.is_a?(Float).should == true
+ result.last.is_a?(Float).should == true
+ end
+
+ it "returns the passed argument, self as Rational, when given an Integer" do
+ result = Rational(3, 4).coerce(10)
+ result.should == [Rational(10, 1), Rational(3, 4)]
+ result.first.is_a?(Rational).should == true
+ result.last.is_a?(Rational).should == true
+ end
+
+ it "coerces to Rational, when given a Complex" do
+ Rational(3, 4).coerce(Complex(5)).should == [Rational(5, 1), Rational(3, 4)]
+ Rational(12, 4).coerce(Complex(5, 1)).should == [Complex(5, 1), Complex(3)]
+ end
+
+ it "returns [argument, self] when given a Rational" do
+ Rational(3, 7).coerce(Rational(9, 2)).should == [Rational(9, 2), Rational(3, 7)]
+ end
+
+ it "raises an error when passed a BigDecimal" do
+ -> {
+ Rational(500, 3).coerce(BigDecimal('166.666666666'))
+ }.should.raise(TypeError, /BigDecimal can't be coerced into Rational/)
+ end
+ end
+end
diff --git a/spec/ruby/library/bigdecimal/div_spec.rb b/spec/ruby/library/bigdecimal/div_spec.rb
index 0c9eb2ddec..967d8b5221 100644
--- a/spec/ruby/library/bigdecimal/div_spec.rb
+++ b/spec/ruby/library/bigdecimal/div_spec.rb
@@ -51,9 +51,9 @@ describe "BigDecimal#div" do
end
it "raises FloatDomainError if NaN is involved" do
- -> { @one.div(@nan) }.should raise_error(FloatDomainError)
- -> { @nan.div(@one) }.should raise_error(FloatDomainError)
- -> { @nan.div(@nan) }.should raise_error(FloatDomainError)
+ -> { @one.div(@nan) }.should.raise(FloatDomainError)
+ -> { @nan.div(@one) }.should.raise(FloatDomainError)
+ -> { @nan.div(@nan) }.should.raise(FloatDomainError)
end
it "returns 0 if divided by Infinity and no precision given" do
@@ -69,30 +69,30 @@ describe "BigDecimal#div" do
end
it "raises ZeroDivisionError if divided by zero and no precision given" do
- -> { @one.div(@zero) }.should raise_error(ZeroDivisionError)
- -> { @one.div(@zero_plus) }.should raise_error(ZeroDivisionError)
- -> { @one.div(@zero_minus) }.should raise_error(ZeroDivisionError)
-
- -> { @zero.div(@zero) }.should raise_error(ZeroDivisionError)
- -> { @zero_minus.div(@zero_plus) }.should raise_error(ZeroDivisionError)
- -> { @zero_minus.div(@zero_minus) }.should raise_error(ZeroDivisionError)
- -> { @zero_plus.div(@zero_minus) }.should raise_error(ZeroDivisionError)
+ -> { @one.div(@zero) }.should.raise(ZeroDivisionError)
+ -> { @one.div(@zero_plus) }.should.raise(ZeroDivisionError)
+ -> { @one.div(@zero_minus) }.should.raise(ZeroDivisionError)
+
+ -> { @zero.div(@zero) }.should.raise(ZeroDivisionError)
+ -> { @zero_minus.div(@zero_plus) }.should.raise(ZeroDivisionError)
+ -> { @zero_minus.div(@zero_minus) }.should.raise(ZeroDivisionError)
+ -> { @zero_plus.div(@zero_minus) }.should.raise(ZeroDivisionError)
end
it "returns NaN if zero is divided by zero" do
- @zero.div(@zero, 0).nan?.should == true
- @zero_minus.div(@zero_plus, 0).nan?.should == true
- @zero_plus.div(@zero_minus, 0).nan?.should == true
+ @zero.div(@zero, 0).should.nan?
+ @zero_minus.div(@zero_plus, 0).should.nan?
+ @zero_plus.div(@zero_minus, 0).should.nan?
- @zero.div(@zero, 10).nan?.should == true
- @zero_minus.div(@zero_plus, 10).nan?.should == true
- @zero_plus.div(@zero_minus, 10).nan?.should == true
+ @zero.div(@zero, 10).should.nan?
+ @zero_minus.div(@zero_plus, 10).should.nan?
+ @zero_plus.div(@zero_minus, 10).should.nan?
end
it "raises FloatDomainError if (+|-) Infinity divided by 1 and no precision given" do
- -> { @infinity_minus.div(@one) }.should raise_error(FloatDomainError)
- -> { @infinity.div(@one) }.should raise_error(FloatDomainError)
- -> { @infinity_minus.div(@one_minus) }.should raise_error(FloatDomainError)
+ -> { @infinity_minus.div(@one) }.should.raise(FloatDomainError)
+ -> { @infinity.div(@one) }.should.raise(FloatDomainError)
+ -> { @infinity_minus.div(@one_minus) }.should.raise(FloatDomainError)
end
it "returns (+|-)Infinity if (+|-)Infinity by 1 and precision given" do
@@ -102,8 +102,8 @@ describe "BigDecimal#div" do
end
it "returns NaN if Infinity / ((+|-) Infinity)" do
- @infinity.div(@infinity_minus, 100000).nan?.should == true
- @infinity_minus.div(@infinity, 1).nan?.should == true
+ @infinity.div(@infinity_minus, 100000).should.nan?
+ @infinity_minus.div(@infinity, 1).should.nan?
end
diff --git a/spec/ruby/library/bigdecimal/divmod_spec.rb b/spec/ruby/library/bigdecimal/divmod_spec.rb
index ae8b84983a..d170c6f845 100644
--- a/spec/ruby/library/bigdecimal/divmod_spec.rb
+++ b/spec/ruby/library/bigdecimal/divmod_spec.rb
@@ -5,8 +5,8 @@ require 'bigdecimal'
module DivmodSpecs
def self.check_both_nan(array)
array.length.should == 2
- array[0].nan?.should == true
- array[1].nan?.should == true
+ array[0].should.nan?
+ array[1].should.nan?
end
def self.check_both_bigdecimal(array)
array.length.should == 2
@@ -33,14 +33,16 @@ describe "BigDecimal#mod_part_of_divmod" do
end
end
- it_behaves_like :bigdecimal_modulo, :mod_part_of_divmod
+ version_is BigDecimal::VERSION, ""..."4.0.0" do
+ it_behaves_like :bigdecimal_modulo, :mod_part_of_divmod
+ end
it "raises ZeroDivisionError if other is zero" do
bd5667 = BigDecimal("5667.19")
-
- -> { bd5667.mod_part_of_divmod(0) }.should raise_error(ZeroDivisionError)
- -> { bd5667.mod_part_of_divmod(BigDecimal("0")) }.should raise_error(ZeroDivisionError)
- -> { @zero.mod_part_of_divmod(@zero) }.should raise_error(ZeroDivisionError)
+ zero = BigDecimal("0")
+ -> { bd5667.mod_part_of_divmod(0) }.should.raise(ZeroDivisionError)
+ -> { bd5667.mod_part_of_divmod(BigDecimal("0")) }.should.raise(ZeroDivisionError)
+ -> { zero.mod_part_of_divmod(zero) }.should.raise(ZeroDivisionError)
end
end
@@ -73,14 +75,25 @@ describe "BigDecimal#divmod" do
@zeroes = [@zero, @zero_pos, @zero_neg]
end
- it "divides value, returns an array" do
- res = @a.divmod(5)
- res.kind_of?(Array).should == true
+ version_is BigDecimal::VERSION, ""..."4.0.0" do
+ it "divides value, returns [BigDecimal, BigDecimal]" do
+ res = @a.divmod(5)
+ res.kind_of?(Array).should == true
+ DivmodSpecs.check_both_bigdecimal(res)
+ end
+ end
+
+ version_is BigDecimal::VERSION, "4.0.0" do
+ it "divides value, returns [Integer, BigDecimal]" do
+ res = @a.divmod(5)
+ res.kind_of?(Array).should == true
+ res[0].kind_of?(Integer).should == true
+ res[1].kind_of?(BigDecimal).should == true
+ end
end
it "array contains quotient and modulus as BigDecimal" do
res = @a.divmod(5)
- DivmodSpecs.check_both_bigdecimal(res)
res[0].should == BigDecimal('0.8E1')
res[1].should == BigDecimal('2.00000000000000000001')
@@ -123,43 +136,62 @@ describe "BigDecimal#divmod" do
values_and_zeroes.each do |val1|
values.each do |val2|
res = val1.divmod(val2)
- DivmodSpecs.check_both_bigdecimal(res)
res[0].should == ((val1/val2).floor)
res[1].should == (val1 - res[0] * val2)
end
end
end
- it "returns an array of two NaNs if NaN is involved" do
- (@special_vals + @regular_vals + @zeroes).each do |val|
- DivmodSpecs.check_both_nan(val.divmod(@nan))
- DivmodSpecs.check_both_nan(@nan.divmod(val))
+ version_is BigDecimal::VERSION, "4.0.0" do
+ it "raise FloatDomainError error if NaN is involved" do
+ (@special_vals + @regular_vals + @zeroes).each do |val|
+ -> { val.divmod(@nan) }.should.raise(FloatDomainError)
+ -> { @nan.divmod(val) }.should.raise(FloatDomainError)
+ end
+ end
+ end
+
+ version_is BigDecimal::VERSION, ""..."4.0.0" do
+ it "returns an array of two NaNs if NaN is involved" do
+ (@special_vals + @regular_vals + @zeroes).each do |val|
+ DivmodSpecs.check_both_nan(val.divmod(@nan))
+ DivmodSpecs.check_both_nan(@nan.divmod(val))
+ end
end
end
it "raises ZeroDivisionError if the divisor is zero" do
(@special_vals + @regular_vals + @zeroes - [@nan]).each do |val|
@zeroes.each do |zero|
- -> { val.divmod(zero) }.should raise_error(ZeroDivisionError)
+ -> { val.divmod(zero) }.should.raise(ZeroDivisionError)
end
end
end
- it "returns an array of Infinity and NaN if the dividend is Infinity" do
- @regular_vals.each do |val|
- array = @infinity.divmod(val)
- array.length.should == 2
- array[0].infinite?.should == (val > 0 ? 1 : -1)
- array[1].nan?.should == true
+ version_is BigDecimal::VERSION, ""..."4.0.0" do
+ it "returns an array of Infinity and NaN if the dividend is Infinity" do
+ @regular_vals.each do |val|
+ array = @infinity.divmod(val)
+ array.length.should == 2
+ array[0].infinite?.should == (val > 0 ? 1 : -1)
+ array[1].should.nan?
+ end
end
end
- it "returns an array of zero and the dividend if the divisor is Infinity" do
- @regular_vals.each do |val|
- array = val.divmod(@infinity)
- array.length.should == 2
- array[0].should == @zero
- array[1].should == val
+ version_is BigDecimal::VERSION, "3.3.0" do
+ it "returns an array of zero and the dividend or minus one and Infinity if the divisor is Infinity" do
+ @regular_vals.each do |val|
+ array = val.divmod(@infinity)
+ array.length.should == 2
+ if val >= 0
+ array[0].should == @zero
+ array[1].should == val
+ else
+ array[0].should == @one_minus
+ array[1].should == @infinity
+ end
+ end
end
end
@@ -174,7 +206,7 @@ describe "BigDecimal#divmod" do
it "raises TypeError if the argument cannot be coerced to BigDecimal" do
-> {
@one.divmod('1')
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
end
end
diff --git a/spec/ruby/library/bigdecimal/exponent_spec.rb b/spec/ruby/library/bigdecimal/exponent_spec.rb
index a349ac093f..8877147955 100644
--- a/spec/ruby/library/bigdecimal/exponent_spec.rb
+++ b/spec/ruby/library/bigdecimal/exponent_spec.rb
@@ -18,17 +18,6 @@ describe "BigDecimal#exponent" do
BigDecimal("1234567E10").exponent.should == 17
end
-# commenting this spec out after discussion with Defiler, since it seems to be an MRI bug, not a real feature
-=begin
- platform_is wordsize: 32 do
- # TODO: write specs for both 32 and 64 bit
- it "returns 0 if exponent can't be represented as Fixnum" do
- BigDecimal("2E1000000000000000").exponent.should == 0
- BigDecimal("-5E-999999999999999").exponent.should == 0
- end
- end
-=end
-
it "returns 0 if self is 0" do
BigDecimal("0").exponent.should == 0
BigDecimal("+0").exponent.should == 0
diff --git a/spec/ruby/library/bigdecimal/finite_spec.rb b/spec/ruby/library/bigdecimal/finite_spec.rb
index 6685d589b6..8fc06029bb 100644
--- a/spec/ruby/library/bigdecimal/finite_spec.rb
+++ b/spec/ruby/library/bigdecimal/finite_spec.rb
@@ -21,14 +21,14 @@ describe "BigDecimal#finite?" do
end
it "is false if Infinity or NaN" do
- @infinity.finite?.should == false
- @infinity_minus.finite?.should == false
- @nan.finite?.should == false
+ @infinity.should_not.finite?
+ @infinity_minus.should_not.finite?
+ @nan.should_not.finite?
end
it "returns true for finite values" do
@finite_vals.each do |val|
- val.finite?.should == true
+ val.should.finite?
end
end
end
diff --git a/spec/ruby/library/bigdecimal/fix_spec.rb b/spec/ruby/library/bigdecimal/fix_spec.rb
index 53b30cbf8b..dceb2ce867 100644
--- a/spec/ruby/library/bigdecimal/fix_spec.rb
+++ b/spec/ruby/library/bigdecimal/fix_spec.rb
@@ -2,20 +2,20 @@ require_relative '../../spec_helper'
require 'bigdecimal'
describe "BigDecimal#fix" do
- before :each do
- @zero = BigDecimal("0")
- @mixed = BigDecimal("1.23456789")
- @pos_int = BigDecimal("2E5555")
- @neg_int = BigDecimal("-2E5555")
- @pos_frac = BigDecimal("2E-9999")
- @neg_frac = BigDecimal("-2E-9999")
-
- @infinity = BigDecimal("Infinity")
- @infinity_neg = BigDecimal("-Infinity")
- @nan = BigDecimal("NaN")
- @zero_pos = BigDecimal("+0")
- @zero_neg = BigDecimal("-0")
- end
+ before :each do
+ @zero = BigDecimal("0")
+ @mixed = BigDecimal("1.23456789")
+ @pos_int = BigDecimal("2E5555")
+ @neg_int = BigDecimal("-2E5555")
+ @pos_frac = BigDecimal("2E-9999")
+ @neg_frac = BigDecimal("-2E-9999")
+
+ @infinity = BigDecimal("Infinity")
+ @infinity_neg = BigDecimal("-Infinity")
+ @nan = BigDecimal("NaN")
+ @zero_pos = BigDecimal("+0")
+ @zero_neg = BigDecimal("-0")
+ end
it "returns a BigDecimal" do
BigDecimal("2E100000000").fix.kind_of?(BigDecimal).should == true
@@ -34,7 +34,7 @@ describe "BigDecimal#fix" do
it "correctly handles special values" do
@infinity.fix.should == @infinity
@infinity_neg.fix.should == @infinity_neg
- @nan.fix.nan?.should == true
+ @nan.fix.should.nan?
end
it "returns 0 if the absolute value is < 1" do
@@ -51,7 +51,7 @@ describe "BigDecimal#fix" do
it "does not allow any arguments" do
-> {
@mixed.fix(10)
- }.should raise_error(ArgumentError)
+ }.should.raise(ArgumentError)
end
end
diff --git a/spec/ruby/library/bigdecimal/floor_spec.rb b/spec/ruby/library/bigdecimal/floor_spec.rb
index a7dfec2c9a..c0666c668c 100644
--- a/spec/ruby/library/bigdecimal/floor_spec.rb
+++ b/spec/ruby/library/bigdecimal/floor_spec.rb
@@ -41,9 +41,9 @@ describe "BigDecimal#floor" do
end
it "raise exception, if self is special value" do
- -> { @infinity.floor }.should raise_error(FloatDomainError)
- -> { @infinity_neg.floor }.should raise_error(FloatDomainError)
- -> { @nan.floor }.should raise_error(FloatDomainError)
+ -> { @infinity.floor }.should.raise(FloatDomainError)
+ -> { @infinity_neg.floor }.should.raise(FloatDomainError)
+ -> { @nan.floor }.should.raise(FloatDomainError)
end
it "returns n digits right of the decimal point if given n > 0" do
diff --git a/spec/ruby/library/bigdecimal/frac_spec.rb b/spec/ruby/library/bigdecimal/frac_spec.rb
index 4a023b4ff6..11ccf03c2f 100644
--- a/spec/ruby/library/bigdecimal/frac_spec.rb
+++ b/spec/ruby/library/bigdecimal/frac_spec.rb
@@ -42,7 +42,7 @@ describe "BigDecimal#frac" do
it "correctly handles special values" do
@infinity.frac.should == @infinity
@infinity_neg.frac.should == @infinity_neg
- @nan.frac.nan?.should == true
+ @nan.frac.should.nan?
end
end
diff --git a/spec/ruby/library/bigdecimal/gt_spec.rb b/spec/ruby/library/bigdecimal/gt_spec.rb
index 4717cfdd9d..e9c9a60e75 100644
--- a/spec/ruby/library/bigdecimal/gt_spec.rb
+++ b/spec/ruby/library/bigdecimal/gt_spec.rb
@@ -17,7 +17,7 @@ describe "BigDecimal#>" do
def coerce(other)
return [other, BigDecimal('123')]
end
- def > (other)
+ def >(other)
BigDecimal('123') > other
end
end
@@ -86,11 +86,11 @@ describe "BigDecimal#>" do
end
it "raises an ArgumentError if the argument can't be coerced into a BigDecimal" do
- -> {@zero > nil }.should raise_error(ArgumentError)
- -> {@infinity > nil }.should raise_error(ArgumentError)
- -> {@infinity_neg > nil }.should raise_error(ArgumentError)
- -> {@mixed > nil }.should raise_error(ArgumentError)
- -> {@pos_int > nil }.should raise_error(ArgumentError)
- -> {@neg_frac > nil }.should raise_error(ArgumentError)
+ -> {@zero > nil }.should.raise(ArgumentError)
+ -> {@infinity > nil }.should.raise(ArgumentError)
+ -> {@infinity_neg > nil }.should.raise(ArgumentError)
+ -> {@mixed > nil }.should.raise(ArgumentError)
+ -> {@pos_int > nil }.should.raise(ArgumentError)
+ -> {@neg_frac > nil }.should.raise(ArgumentError)
end
end
diff --git a/spec/ruby/library/bigdecimal/gte_spec.rb b/spec/ruby/library/bigdecimal/gte_spec.rb
index 8dc81707f0..548f3efe4c 100644
--- a/spec/ruby/library/bigdecimal/gte_spec.rb
+++ b/spec/ruby/library/bigdecimal/gte_spec.rb
@@ -17,7 +17,7 @@ describe "BigDecimal#>=" do
def coerce(other)
return [other, BigDecimal('123')]
end
- def >= (other)
+ def >=(other)
BigDecimal('123') >= other
end
end
@@ -90,11 +90,11 @@ describe "BigDecimal#>=" do
end
it "returns nil if the argument is nil" do
- -> {@zero >= nil }.should raise_error(ArgumentError)
- -> {@infinity >= nil }.should raise_error(ArgumentError)
- -> {@infinity_neg >= nil }.should raise_error(ArgumentError)
- -> {@mixed >= nil }.should raise_error(ArgumentError)
- -> {@pos_int >= nil }.should raise_error(ArgumentError)
- -> {@neg_frac >= nil }.should raise_error(ArgumentError)
+ -> {@zero >= nil }.should.raise(ArgumentError)
+ -> {@infinity >= nil }.should.raise(ArgumentError)
+ -> {@infinity_neg >= nil }.should.raise(ArgumentError)
+ -> {@mixed >= nil }.should.raise(ArgumentError)
+ -> {@pos_int >= nil }.should.raise(ArgumentError)
+ -> {@neg_frac >= nil }.should.raise(ArgumentError)
end
end
diff --git a/spec/ruby/library/bigdecimal/lt_spec.rb b/spec/ruby/library/bigdecimal/lt_spec.rb
index 61f4f19912..c3f3573247 100644
--- a/spec/ruby/library/bigdecimal/lt_spec.rb
+++ b/spec/ruby/library/bigdecimal/lt_spec.rb
@@ -17,7 +17,7 @@ describe "BigDecimal#<" do
def coerce(other)
return [other, BigDecimal('123')]
end
- def < (other)
+ def <(other)
BigDecimal('123') < other
end
end
@@ -84,11 +84,11 @@ describe "BigDecimal#<" do
end
it "raises an ArgumentError if the argument can't be coerced into a BigDecimal" do
- -> {@zero < nil }.should raise_error(ArgumentError)
- -> {@infinity < nil }.should raise_error(ArgumentError)
- -> {@infinity_neg < nil }.should raise_error(ArgumentError)
- -> {@mixed < nil }.should raise_error(ArgumentError)
- -> {@pos_int < nil }.should raise_error(ArgumentError)
- -> {@neg_frac < nil }.should raise_error(ArgumentError)
+ -> {@zero < nil }.should.raise(ArgumentError)
+ -> {@infinity < nil }.should.raise(ArgumentError)
+ -> {@infinity_neg < nil }.should.raise(ArgumentError)
+ -> {@mixed < nil }.should.raise(ArgumentError)
+ -> {@pos_int < nil }.should.raise(ArgumentError)
+ -> {@neg_frac < nil }.should.raise(ArgumentError)
end
end
diff --git a/spec/ruby/library/bigdecimal/lte_spec.rb b/spec/ruby/library/bigdecimal/lte_spec.rb
index fc632315f8..7918bde88b 100644
--- a/spec/ruby/library/bigdecimal/lte_spec.rb
+++ b/spec/ruby/library/bigdecimal/lte_spec.rb
@@ -17,7 +17,7 @@ describe "BigDecimal#<=" do
def coerce(other)
return [other, BigDecimal('123')]
end
- def <= (other)
+ def <=(other)
BigDecimal('123') <= other
end
end
@@ -90,11 +90,11 @@ describe "BigDecimal#<=" do
end
it "raises an ArgumentError if the argument can't be coerced into a BigDecimal" do
- -> {@zero <= nil }.should raise_error(ArgumentError)
- -> {@infinity <= nil }.should raise_error(ArgumentError)
- -> {@infinity_neg <= nil }.should raise_error(ArgumentError)
- -> {@mixed <= nil }.should raise_error(ArgumentError)
- -> {@pos_int <= nil }.should raise_error(ArgumentError)
- -> {@neg_frac <= nil }.should raise_error(ArgumentError)
+ -> {@zero <= nil }.should.raise(ArgumentError)
+ -> {@infinity <= nil }.should.raise(ArgumentError)
+ -> {@infinity_neg <= nil }.should.raise(ArgumentError)
+ -> {@mixed <= nil }.should.raise(ArgumentError)
+ -> {@pos_int <= nil }.should.raise(ArgumentError)
+ -> {@neg_frac <= nil }.should.raise(ArgumentError)
end
end
diff --git a/spec/ruby/library/bigdecimal/minus_spec.rb b/spec/ruby/library/bigdecimal/minus_spec.rb
index 267a0f7eab..bd3c19584b 100644
--- a/spec/ruby/library/bigdecimal/minus_spec.rb
+++ b/spec/ruby/library/bigdecimal/minus_spec.rb
@@ -26,18 +26,18 @@ describe "BigDecimal#-" do
end
it "returns NaN if NaN is involved" do
- (@one - @nan).nan?.should == true
- (@nan - @one).nan?.should == true
- (@nan - @nan).nan?.should == true
- (@nan - @infinity).nan?.should == true
- (@nan - @infinity_minus).nan?.should == true
- (@infinity - @nan).nan?.should == true
- (@infinity_minus - @nan).nan?.should == true
+ (@one - @nan).should.nan?
+ (@nan - @one).should.nan?
+ (@nan - @nan).should.nan?
+ (@nan - @infinity).should.nan?
+ (@nan - @infinity_minus).should.nan?
+ (@infinity - @nan).should.nan?
+ (@infinity_minus - @nan).should.nan?
end
it "returns NaN both operands are infinite with the same sign" do
- (@infinity - @infinity).nan?.should == true
- (@infinity_minus - @infinity_minus).nan?.should == true
+ (@infinity - @infinity).should.nan?
+ (@infinity_minus - @infinity_minus).should.nan?
end
it "returns Infinity or -Infinity if these are involved" do
diff --git a/spec/ruby/library/bigdecimal/mode_spec.rb b/spec/ruby/library/bigdecimal/mode_spec.rb
index f57028ae5d..26e6d0ea75 100644
--- a/spec/ruby/library/bigdecimal/mode_spec.rb
+++ b/spec/ruby/library/bigdecimal/mode_spec.rb
@@ -12,7 +12,7 @@ describe "BigDecimal.mode" do
end
it "returns the appropriate value and continue the computation if the flag is false" do
- BigDecimal("NaN").add(BigDecimal("1"),0).nan?.should == true
+ BigDecimal("NaN").add(BigDecimal("1"),0).should.nan?
BigDecimal("0").add(BigDecimal("Infinity"),0).should == BigDecimal("Infinity")
BigDecimal("1").quo(BigDecimal("0")).should == BigDecimal("Infinity")
end
@@ -24,13 +24,13 @@ describe "BigDecimal.mode" do
it "raise an exception if the flag is true" do
BigDecimal.mode(BigDecimal::EXCEPTION_NaN, true)
- -> { BigDecimal("NaN").add(BigDecimal("1"),0) }.should raise_error(FloatDomainError)
+ -> { BigDecimal("NaN").add(BigDecimal("1"),0) }.should.raise(FloatDomainError)
BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, true)
- -> { BigDecimal("0").add(BigDecimal("Infinity"),0) }.should raise_error(FloatDomainError)
+ -> { BigDecimal("0").add(BigDecimal("Infinity"),0) }.should.raise(FloatDomainError)
BigDecimal.mode(BigDecimal::EXCEPTION_ZERODIVIDE, true)
- -> { BigDecimal("1").quo(BigDecimal("0")) }.should raise_error(FloatDomainError)
+ -> { BigDecimal("1").quo(BigDecimal("0")) }.should.raise(FloatDomainError)
BigDecimal.mode(BigDecimal::EXCEPTION_OVERFLOW, true)
- -> { BigDecimal("1E11111111111111111111") }.should raise_error(FloatDomainError)
- -> { (BigDecimal("1E1000000000000000000")**10) }.should raise_error(FloatDomainError)
+ -> { BigDecimal("1E11111111111111111111") }.should.raise(FloatDomainError)
+ -> { (BigDecimal("1E1000000000000000000")**10) }.should.raise(FloatDomainError)
end
end
diff --git a/spec/ruby/library/bigdecimal/mult_spec.rb b/spec/ruby/library/bigdecimal/mult_spec.rb
index b7f8044b0b..2353df9cb8 100644
--- a/spec/ruby/library/bigdecimal/mult_spec.rb
+++ b/spec/ruby/library/bigdecimal/mult_spec.rb
@@ -21,12 +21,4 @@ describe "BigDecimal#mult" do
@e.mult(@one, 1).should be_close(@one, @tolerance)
@e3_minus.mult(@one, 1).should be_close(0, @tolerance2)
end
-
- describe "with Object" do
- it "tries to coerce the other operand to self" do
- object = mock("Object")
- object.should_receive(:coerce).with(@e3_minus).and_return([@e3_minus, @e3_plus])
- @e3_minus.mult(object, 1).should == BigDecimal("9")
- end
- end
end
diff --git a/spec/ruby/library/bigdecimal/nan_spec.rb b/spec/ruby/library/bigdecimal/nan_spec.rb
index 705492614b..9eaf69b610 100644
--- a/spec/ruby/library/bigdecimal/nan_spec.rb
+++ b/spec/ruby/library/bigdecimal/nan_spec.rb
@@ -4,20 +4,20 @@ require 'bigdecimal'
describe "BigDecimal#nan?" do
it "returns true if self is not a number" do
- BigDecimal("NaN").nan?.should == true
+ BigDecimal("NaN").should.nan?
end
it "returns false if self is not a NaN" do
- BigDecimal("Infinity").nan?.should == false
- BigDecimal("-Infinity").nan?.should == false
- BigDecimal("0").nan?.should == false
- BigDecimal("+0").nan?.should == false
- BigDecimal("-0").nan?.should == false
- BigDecimal("2E40001").nan?.should == false
- BigDecimal("3E-20001").nan?.should == false
- BigDecimal("0E-200000000").nan?.should == false
- BigDecimal("0E200000000000").nan?.should == false
- BigDecimal("0.000000000000000000000000").nan?.should == false
+ BigDecimal("Infinity").should_not.nan?
+ BigDecimal("-Infinity").should_not.nan?
+ BigDecimal("0").should_not.nan?
+ BigDecimal("+0").should_not.nan?
+ BigDecimal("-0").should_not.nan?
+ BigDecimal("2E40001").should_not.nan?
+ BigDecimal("3E-20001").should_not.nan?
+ BigDecimal("0E-200000000").should_not.nan?
+ BigDecimal("0E200000000000").should_not.nan?
+ BigDecimal("0.000000000000000000000000").should_not.nan?
end
end
diff --git a/spec/ruby/library/bigdecimal/nonzero_spec.rb b/spec/ruby/library/bigdecimal/nonzero_spec.rb
index f43c4393cd..31421ebdf4 100644
--- a/spec/ruby/library/bigdecimal/nonzero_spec.rb
+++ b/spec/ruby/library/bigdecimal/nonzero_spec.rb
@@ -10,11 +10,11 @@ describe "BigDecimal#nonzero?" do
infinity = BigDecimal("Infinity")
infinity_minus = BigDecimal("-Infinity")
nan = BigDecimal("NaN")
- infinity.nonzero?.should equal(infinity)
- infinity_minus.nonzero?.should equal(infinity_minus)
- nan.nonzero?.should equal(nan)
- e3_minus.nonzero?.should equal(e3_minus)
- e2_plus.nonzero?.should equal(e2_plus)
+ infinity.nonzero?.should.equal?(infinity)
+ infinity_minus.nonzero?.should.equal?(infinity_minus)
+ nan.nonzero?.should.equal?(nan)
+ e3_minus.nonzero?.should.equal?(e3_minus)
+ e2_plus.nonzero?.should.equal?(e2_plus)
end
it "returns nil otherwise" do
diff --git a/spec/ruby/library/bigdecimal/plus_spec.rb b/spec/ruby/library/bigdecimal/plus_spec.rb
index cefc43aeaa..d1934841c8 100644
--- a/spec/ruby/library/bigdecimal/plus_spec.rb
+++ b/spec/ruby/library/bigdecimal/plus_spec.rb
@@ -30,8 +30,8 @@ describe "BigDecimal#+" do
end
it "returns NaN if NaN is involved" do
- (@one + @nan).nan?.should == true
- (@nan + @one).nan?.should == true
+ (@one + @nan).should.nan?
+ (@nan + @one).should.nan?
end
it "returns Infinity or -Infinity if these are involved" do
@@ -41,7 +41,7 @@ describe "BigDecimal#+" do
end
it "returns NaN if Infinity + (- Infinity)" do
- (@infinity + @infinity_minus).nan?.should == true
+ (@infinity + @infinity_minus).should.nan?
end
describe "with Object" do
diff --git a/spec/ruby/library/bigdecimal/precs_spec.rb b/spec/ruby/library/bigdecimal/precs_spec.rb
deleted file mode 100644
index f9320f2b9e..0000000000
--- a/spec/ruby/library/bigdecimal/precs_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require_relative '../../spec_helper'
-require 'bigdecimal'
-
-describe "BigDecimal#precs" do
-
- before :each do
- @infinity = BigDecimal("Infinity")
- @infinity_neg = BigDecimal("-Infinity")
- @nan = BigDecimal("NaN")
- @zero = BigDecimal("0")
- @zero_neg = BigDecimal("-0")
-
- @arr = [BigDecimal("2E40001"), BigDecimal("3E-20001"),\
- @infinity, @infinity_neg, @nan, @zero, @zero_neg]
- @precision = BigDecimal::BASE.to_s.length - 1
- end
-
- it "returns array of two values" do
- @arr.each do |x|
- x.precs.kind_of?(Array).should == true
- x.precs.size.should == 2
- end
- end
-
- it "returns Integers as array values" do
- @arr.each do |x|
- x.precs[0].kind_of?(Integer).should == true
- x.precs[1].kind_of?(Integer).should == true
- end
- end
-
- it "returns the current value of significant digits as the first value" do
- BigDecimal("3.14159").precs[0].should >= 6
- BigDecimal('1').precs[0].should == BigDecimal('1' + '0' * 100).precs[0]
- [@infinity, @infinity_neg, @nan, @zero, @zero_neg].each do |value|
- value.precs[0].should <= @precision
- end
- end
-
- it "returns the maximum number of significant digits as the second value" do
- BigDecimal("3.14159").precs[1].should >= 6
- BigDecimal('1').precs[1].should >= 1
- BigDecimal('1' + '0' * 100).precs[1] >= 101
- [@infinity, @infinity_neg, @nan, @zero, @zero_neg].each do |value|
- value.precs[1].should >= 1
- end
- end
-end
diff --git a/spec/ruby/library/bigdecimal/quo_spec.rb b/spec/ruby/library/bigdecimal/quo_spec.rb
index a5c5651778..65a4330303 100644
--- a/spec/ruby/library/bigdecimal/quo_spec.rb
+++ b/spec/ruby/library/bigdecimal/quo_spec.rb
@@ -6,7 +6,7 @@ describe "BigDecimal#quo" do
it_behaves_like :bigdecimal_quo, :quo, []
it "returns NaN if NaN is involved" do
- BigDecimal("1").quo(BigDecimal("NaN")).nan?.should == true
- BigDecimal("NaN").quo(BigDecimal("1")).nan?.should == true
+ BigDecimal("1").quo(BigDecimal("NaN")).should.nan?
+ BigDecimal("NaN").quo(BigDecimal("1")).should.nan?
end
end
diff --git a/spec/ruby/library/bigdecimal/remainder_spec.rb b/spec/ruby/library/bigdecimal/remainder_spec.rb
index 04233edece..27a2986570 100644
--- a/spec/ruby/library/bigdecimal/remainder_spec.rb
+++ b/spec/ruby/library/bigdecimal/remainder_spec.rb
@@ -37,9 +37,11 @@ describe "BigDecimal#remainder" do
@neg_int.remainder(@pos_frac).should == @neg_int - @pos_frac * (@neg_int / @pos_frac).truncate
end
- it "returns NaN used with zero" do
- @mixed.remainder(@zero).nan?.should == true
- @zero.remainder(@zero).nan?.should == true
+ version_is BigDecimal::VERSION, "3.3.0" do
+ it "raises ZeroDivisionError used with zero" do
+ -> { @mixed.remainder(@zero) }.should.raise(ZeroDivisionError)
+ -> { @zero.remainder(@zero) }.should.raise(ZeroDivisionError)
+ end
end
it "returns zero if used on zero" do
@@ -47,28 +49,11 @@ describe "BigDecimal#remainder" do
end
it "returns NaN if NaN is involved" do
- @nan.remainder(@nan).nan?.should == true
- @nan.remainder(@one).nan?.should == true
- @one.remainder(@nan).nan?.should == true
- @infinity.remainder(@nan).nan?.should == true
- @nan.remainder(@infinity).nan?.should == true
- end
-
- it "returns NaN if Infinity is involved" do
- @infinity.remainder(@infinity).nan?.should == true
- @infinity.remainder(@one).nan?.should == true
- @infinity.remainder(@mixed).nan?.should == true
- @infinity.remainder(@one_minus).nan?.should == true
- @infinity.remainder(@frac_1).nan?.should == true
- @one.remainder(@infinity).nan?.should == true
-
- @infinity_minus.remainder(@infinity_minus).nan?.should == true
- @infinity_minus.remainder(@one).nan?.should == true
- @one.remainder(@infinity_minus).nan?.should == true
- @frac_2.remainder(@infinity_minus).nan?.should == true
-
- @infinity.remainder(@infinity_minus).nan?.should == true
- @infinity_minus.remainder(@infinity).nan?.should == true
+ @nan.remainder(@nan).should.nan?
+ @nan.remainder(@one).should.nan?
+ @one.remainder(@nan).should.nan?
+ @infinity.remainder(@nan).should.nan?
+ @nan.remainder(@infinity).should.nan?
end
it "coerces arguments to BigDecimal if possible" do
@@ -86,7 +71,7 @@ describe "BigDecimal#remainder" do
it "raises TypeError if the argument cannot be coerced to BigDecimal" do
-> {
@one.remainder('2')
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
end
end
diff --git a/spec/ruby/library/bigdecimal/round_spec.rb b/spec/ruby/library/bigdecimal/round_spec.rb
index 501a1a7342..622e129d93 100644
--- a/spec/ruby/library/bigdecimal/round_spec.rb
+++ b/spec/ruby/library/bigdecimal/round_spec.rb
@@ -217,18 +217,18 @@ describe "BigDecimal#round" do
end
it 'raise exception, if self is special value' do
- -> { BigDecimal('NaN').round }.should raise_error(FloatDomainError)
- -> { BigDecimal('Infinity').round }.should raise_error(FloatDomainError)
- -> { BigDecimal('-Infinity').round }.should raise_error(FloatDomainError)
+ -> { BigDecimal('NaN').round }.should.raise(FloatDomainError)
+ -> { BigDecimal('Infinity').round }.should.raise(FloatDomainError)
+ -> { BigDecimal('-Infinity').round }.should.raise(FloatDomainError)
end
it 'do not raise exception, if self is special value and precision is given' do
- -> { BigDecimal('NaN').round(2) }.should_not raise_error(FloatDomainError)
- -> { BigDecimal('Infinity').round(2) }.should_not raise_error(FloatDomainError)
- -> { BigDecimal('-Infinity').round(2) }.should_not raise_error(FloatDomainError)
+ -> { BigDecimal('NaN').round(2) }.should_not.raise(FloatDomainError)
+ -> { BigDecimal('Infinity').round(2) }.should_not.raise(FloatDomainError)
+ -> { BigDecimal('-Infinity').round(2) }.should_not.raise(FloatDomainError)
end
- it "raise for a non-existent round mode" do
- -> { @p1_50.round(0, :nonsense) }.should raise_error(ArgumentError, "invalid rounding mode")
+ it 'raise for a non-existent round mode' do
+ -> { @p1_50.round(0, :nonsense) }.should.raise(ArgumentError, "invalid rounding mode (nonsense)")
end
end
diff --git a/spec/ruby/library/bigdecimal/shared/clone.rb b/spec/ruby/library/bigdecimal/shared/clone.rb
index e58df3a94b..03de6d0fc3 100644
--- a/spec/ruby/library/bigdecimal/shared/clone.rb
+++ b/spec/ruby/library/bigdecimal/shared/clone.rb
@@ -5,20 +5,9 @@ describe :bigdecimal_clone, shared: true do
@obj = BigDecimal("1.2345")
end
- ruby_version_is "" ... "2.5" do
- it "copies the BigDecimal's value to a newly allocated object" do
- copy = @obj.public_send(@method)
+ it "returns self" do
+ copy = @obj.public_send(@method)
- copy.should_not equal(@obj)
- copy.should == @obj
- end
- end
-
- ruby_version_is "2.5" do
- it "returns self" do
- copy = @obj.public_send(@method)
-
- copy.should equal(@obj)
- end
+ copy.should.equal?(@obj)
end
end
diff --git a/spec/ruby/library/bigdecimal/shared/modulo.rb b/spec/ruby/library/bigdecimal/shared/modulo.rb
index 67c0ecf2fc..63470d0977 100644
--- a/spec/ruby/library/bigdecimal/shared/modulo.rb
+++ b/spec/ruby/library/bigdecimal/shared/modulo.rb
@@ -80,37 +80,43 @@ describe :bigdecimal_modulo, shared: true do
end
it "returns NaN if NaN is involved" do
- @nan.send(@method, @nan).nan?.should == true
- @nan.send(@method, @one).nan?.should == true
- @one.send(@method, @nan).nan?.should == true
- @infinity.send(@method, @nan).nan?.should == true
- @nan.send(@method, @infinity).nan?.should == true
+ @nan.send(@method, @nan).should.nan?
+ @nan.send(@method, @one).should.nan?
+ @one.send(@method, @nan).should.nan?
+ @infinity.send(@method, @nan).should.nan?
+ @nan.send(@method, @infinity).should.nan?
end
it "returns NaN if the dividend is Infinity" do
- @infinity.send(@method, @infinity).nan?.should == true
- @infinity.send(@method, @one).nan?.should == true
- @infinity.send(@method, @mixed).nan?.should == true
- @infinity.send(@method, @one_minus).nan?.should == true
- @infinity.send(@method, @frac_1).nan?.should == true
+ @infinity.send(@method, @infinity).should.nan?
+ @infinity.send(@method, @one).should.nan?
+ @infinity.send(@method, @mixed).should.nan?
+ @infinity.send(@method, @one_minus).should.nan?
+ @infinity.send(@method, @frac_1).should.nan?
- @infinity_minus.send(@method, @infinity_minus).nan?.should == true
- @infinity_minus.send(@method, @one).nan?.should == true
+ @infinity_minus.send(@method, @infinity_minus).should.nan?
+ @infinity_minus.send(@method, @one).should.nan?
- @infinity.send(@method, @infinity_minus).nan?.should == true
- @infinity_minus.send(@method, @infinity).nan?.should == true
+ @infinity.send(@method, @infinity_minus).should.nan?
+ @infinity_minus.send(@method, @infinity).should.nan?
end
- it "returns the dividend if the divisor is Infinity" do
- @one.send(@method, @infinity).should == @one
- @one.send(@method, @infinity_minus).should == @one
- @frac_2.send(@method, @infinity_minus).should == @frac_2
+ version_is BigDecimal::VERSION, "3.3.0" do
+ it "returns the dividend if the divisor is Infinity and signs are same" do
+ @one.send(@method, @infinity).should == @one
+ (-@frac_2).send(@method, @infinity_minus).should == -@frac_2
+ end
+
+ it "returns the divisor if the divisor is Infinity and signs are different" do
+ (-@one).send(@method, @infinity).should == @infinity
+ @frac_2.send(@method, @infinity_minus).should == @infinity_minus
+ end
end
it "raises TypeError if the argument cannot be coerced to BigDecimal" do
-> {
@one.send(@method, '2')
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
end
end
@@ -118,8 +124,8 @@ describe :bigdecimal_modulo_zerodivisionerror, shared: true do
it "raises ZeroDivisionError if other is zero" do
bd5667 = BigDecimal("5667.19")
- -> { bd5667.send(@method, 0) }.should raise_error(ZeroDivisionError)
- -> { bd5667.send(@method, BigDecimal("0")) }.should raise_error(ZeroDivisionError)
- -> { @zero.send(@method, @zero) }.should raise_error(ZeroDivisionError)
+ -> { bd5667.send(@method, 0) }.should.raise(ZeroDivisionError)
+ -> { bd5667.send(@method, BigDecimal("0")) }.should.raise(ZeroDivisionError)
+ -> { @zero.send(@method, @zero) }.should.raise(ZeroDivisionError)
end
end
diff --git a/spec/ruby/library/bigdecimal/shared/mult.rb b/spec/ruby/library/bigdecimal/shared/mult.rb
index b94c9385de..c613df04c4 100644
--- a/spec/ruby/library/bigdecimal/shared/mult.rb
+++ b/spec/ruby/library/bigdecimal/shared/mult.rb
@@ -51,8 +51,8 @@ describe :bigdecimal_mult, shared: true do
values = @regular_vals + @zeroes
values.each do |val|
- @nan.send(@method, val, *@object).nan?.should == true
- val.send(@method, @nan, *@object).nan?.should == true
+ @nan.send(@method, val, *@object).should.nan?
+ val.send(@method, @nan, *@object).should.nan?
end
end
@@ -62,9 +62,9 @@ describe :bigdecimal_mult, shared: true do
values.each do |val|
@zeroes.each do |zero|
zero.send(@method, val, *@object).should == 0
- zero.send(@method, val, *@object).zero?.should == true
+ zero.send(@method, val, *@object).should.zero?
val.send(@method, zero, *@object).should == 0
- val.send(@method, zero, *@object).zero?.should == true
+ val.send(@method, zero, *@object).should.zero?
end
end
end
@@ -75,8 +75,8 @@ describe :bigdecimal_mult, shared: true do
values.each do |val|
infs.each do |inf|
- inf.send(@method, val, *@object).finite?.should == false
- val.send(@method, inf, *@object).finite?.should == false
+ inf.send(@method, val, *@object).should_not.finite?
+ val.send(@method, inf, *@object).should_not.finite?
end
end
@@ -89,9 +89,9 @@ describe :bigdecimal_mult, shared: true do
end
it "returns NaN if the result is undefined" do
- @zero.send(@method, @infinity, *@object).nan?.should == true
- @zero.send(@method, @infinity_minus, *@object).nan?.should == true
- @infinity.send(@method, @zero, *@object).nan?.should == true
- @infinity_minus.send(@method, @zero, *@object).nan?.should == true
+ @zero.send(@method, @infinity, *@object).should.nan?
+ @zero.send(@method, @infinity_minus, *@object).should.nan?
+ @infinity.send(@method, @zero, *@object).should.nan?
+ @infinity_minus.send(@method, @zero, *@object).should.nan?
end
end
diff --git a/spec/ruby/library/bigdecimal/shared/power.rb b/spec/ruby/library/bigdecimal/shared/power.rb
index a4848fb2e2..6dafb638e2 100644
--- a/spec/ruby/library/bigdecimal/shared/power.rb
+++ b/spec/ruby/library/bigdecimal/shared/power.rb
@@ -10,8 +10,8 @@ describe :bigdecimal_power, shared: true do
e = BigDecimal("1.00000000000000000000123456789")
one = BigDecimal("1")
ten = BigDecimal("10")
- # The tolerance is dependent upon the size of BASE_FIG
- tolerance = BigDecimal("1E-70")
+ # Accuracy is at least ndigits(== 30) + DOUBLE_FIG(== 16)
+ tolerance = BigDecimal("1E-46")
ten_powers = BigDecimal("1E10000")
pi = BigDecimal("3.14159265358979")
e3_minus.send(@method, 2).should == e3_minus_power_2
@@ -53,8 +53,8 @@ describe :bigdecimal_power, shared: true do
end
it "returns NaN if self is NaN" do
- BigDecimal("NaN").send(@method, -5).nan?.should == true
- BigDecimal("NaN").send(@method, 5).nan?.should == true
+ BigDecimal("NaN").send(@method, -5).should.nan?
+ BigDecimal("NaN").send(@method, 5).should.nan?
end
it "returns 0.0 if self is infinite and argument is negative" do
diff --git a/spec/ruby/library/bigdecimal/shared/quo.rb b/spec/ruby/library/bigdecimal/shared/quo.rb
index 4d6d64b787..18ff2fe9a5 100644
--- a/spec/ruby/library/bigdecimal/shared/quo.rb
+++ b/spec/ruby/library/bigdecimal/shared/quo.rb
@@ -31,6 +31,7 @@ describe :bigdecimal_quo, shared: true do
describe "with Object" do
it "tries to coerce the other operand to self" do
+ skip if @method == :div
object = mock("Object")
object.should_receive(:coerce).with(@one).and_return([@one, @two])
@one.send(@method, object, *@object).should == BigDecimal("0.5")
@@ -49,8 +50,8 @@ describe :bigdecimal_quo, shared: true do
end
it "returns NaN if Infinity / ((+|-) Infinity)" do
- @infinity.send(@method, @infinity_minus, *@object).nan?.should == true
- @infinity_minus.send(@method, @infinity, *@object).nan?.should == true
+ @infinity.send(@method, @infinity_minus, *@object).should.nan?
+ @infinity_minus.send(@method, @infinity, *@object).should.nan?
end
it "returns (+|-) Infinity if divided by zero" do
@@ -60,8 +61,8 @@ describe :bigdecimal_quo, shared: true do
end
it "returns NaN if zero is divided by zero" do
- @zero.send(@method, @zero, *@object).nan?.should == true
- @zero_minus.send(@method, @zero_plus, *@object).nan?.should == true
- @zero_plus.send(@method, @zero_minus, *@object).nan?.should == true
+ @zero.send(@method, @zero, *@object).should.nan?
+ @zero_minus.send(@method, @zero_plus, *@object).should.nan?
+ @zero_plus.send(@method, @zero_minus, *@object).should.nan?
end
end
diff --git a/spec/ruby/library/bigdecimal/shared/to_int.rb b/spec/ruby/library/bigdecimal/shared/to_int.rb
index 02f6092f23..3c9f3b4f97 100644
--- a/spec/ruby/library/bigdecimal/shared/to_int.rb
+++ b/spec/ruby/library/bigdecimal/shared/to_int.rb
@@ -1,12 +1,12 @@
require 'bigdecimal'
-describe :bigdecimal_to_int , shared: true do
+describe :bigdecimal_to_int, shared: true do
it "raises FloatDomainError if BigDecimal is infinity or NaN" do
- -> { BigDecimal("Infinity").send(@method) }.should raise_error(FloatDomainError)
- -> { BigDecimal("NaN").send(@method) }.should raise_error(FloatDomainError)
+ -> { BigDecimal("Infinity").send(@method) }.should.raise(FloatDomainError)
+ -> { BigDecimal("NaN").send(@method) }.should.raise(FloatDomainError)
end
- it "returns Integer or Bignum otherwise" do
+ it "returns Integer otherwise" do
BigDecimal("3E-20001").send(@method).should == 0
BigDecimal("2E4000").send(@method).should == 2 * 10 ** 4000
BigDecimal("2").send(@method).should == 2
diff --git a/spec/ruby/library/bigdecimal/split_spec.rb b/spec/ruby/library/bigdecimal/split_spec.rb
index f9b4bab5f7..53b1f649d9 100644
--- a/spec/ruby/library/bigdecimal/split_spec.rb
+++ b/spec/ruby/library/bigdecimal/split_spec.rb
@@ -58,16 +58,16 @@ describe "BigDecimal#split" do
end
it "third value: the base (currently always ten)" do
- @arr[2].should == 10
- @arr_neg[2].should == 10
- @arr_big[2].should == 10
- @arr_big_neg[2].should == 10
- @huge[2].should == 10
- @infinity.split[2].should == 10
- @nan.split[2].should == 10
- @infinity_neg.split[2].should == 10
- @zero.split[2].should == 10
- @zero_neg.split[2].should == 10
+ @arr[2].should == 10
+ @arr_neg[2].should == 10
+ @arr_big[2].should == 10
+ @arr_big_neg[2].should == 10
+ @huge[2].should == 10
+ @infinity.split[2].should == 10
+ @nan.split[2].should == 10
+ @infinity_neg.split[2].should == 10
+ @zero.split[2].should == 10
+ @zero_neg.split[2].should == 10
end
it "fourth value: the exponent" do
diff --git a/spec/ruby/library/bigdecimal/sqrt_spec.rb b/spec/ruby/library/bigdecimal/sqrt_spec.rb
index d149003b9f..1f3ef9a8c3 100644
--- a/spec/ruby/library/bigdecimal/sqrt_spec.rb
+++ b/spec/ruby/library/bigdecimal/sqrt_spec.rb
@@ -36,44 +36,46 @@ describe "BigDecimal#sqrt" do
BigDecimal('121').sqrt(5).should be_close(11, 0.00001)
end
- it "returns square root of 0.9E-99999 with desired precision" do
- @frac_2.sqrt(1).to_s.should =~ /\A0\.3E-49999\z/i
+ platform_is_not c_long_size: 32 do # fails on i686
+ it "returns square root of 0.9E-99999 with desired precision" do
+ @frac_2.sqrt(1).to_s.should =~ /\A0\.3E-49999\z/i
+ end
end
it "raises ArgumentError when no argument is given" do
-> {
@one.sqrt
- }.should raise_error(ArgumentError)
+ }.should.raise(ArgumentError)
end
it "raises ArgumentError if a negative number is given" do
-> {
@one.sqrt(-1)
- }.should raise_error(ArgumentError)
+ }.should.raise(ArgumentError)
end
it "raises ArgumentError if 2 arguments are given" do
-> {
@one.sqrt(1, 1)
- }.should raise_error(ArgumentError)
+ }.should.raise(ArgumentError)
end
it "raises TypeError if nil is given" do
-> {
@one.sqrt(nil)
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
end
it "raises TypeError if a string is given" do
-> {
@one.sqrt("stuff")
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
end
it "raises TypeError if a plain Object is given" do
-> {
@one.sqrt(Object.new)
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
end
it "returns 1 if precision is 0 or 1" do
@@ -84,7 +86,7 @@ describe "BigDecimal#sqrt" do
it "raises FloatDomainError on negative values" do
-> {
BigDecimal('-1').sqrt(10)
- }.should raise_error(FloatDomainError)
+ }.should.raise(FloatDomainError)
end
it "returns positive infinity for infinity" do
@@ -94,13 +96,13 @@ describe "BigDecimal#sqrt" do
it "raises FloatDomainError for negative infinity" do
-> {
@infinity_minus.sqrt(1)
- }.should raise_error(FloatDomainError)
+ }.should.raise(FloatDomainError)
end
it "raises FloatDomainError for NaN" do
-> {
@nan.sqrt(1)
- }.should raise_error(FloatDomainError)
+ }.should.raise(FloatDomainError)
end
it "returns 0 for 0, +0.0 and -0.0" do
diff --git a/spec/ruby/library/bigdecimal/sub_spec.rb b/spec/ruby/library/bigdecimal/sub_spec.rb
index 29ec851193..3b62a0c794 100644
--- a/spec/ruby/library/bigdecimal/sub_spec.rb
+++ b/spec/ruby/library/bigdecimal/sub_spec.rb
@@ -35,14 +35,6 @@ describe "BigDecimal#sub" do
@frac_1.sub(@frac_1, 1000000).should == @zero
end
- describe "with Object" do
- it "tries to coerce the other operand to self" do
- object = mock("Object")
- object.should_receive(:coerce).with(@frac_3).and_return([@frac_3, @frac_4])
- @frac_3.sub(object, 1).should == BigDecimal("-0.9E15")
- end
- end
-
describe "with Rational" do
it "produces a BigDecimal" do
(@three - Rational(500, 2)).should == BigDecimal('-0.247e3')
@@ -50,13 +42,13 @@ describe "BigDecimal#sub" do
end
it "returns NaN if NaN is involved" do
- @one.sub(@nan, 1).nan?.should == true
- @nan.sub(@one, 1).nan?.should == true
+ @one.sub(@nan, 1).should.nan?
+ @nan.sub(@one, 1).should.nan?
end
it "returns NaN if both values are infinite with the same signs" do
- @infinity.sub(@infinity, 1).nan?.should == true
- @infinity_minus.sub(@infinity_minus, 1).nan?.should == true
+ @infinity.sub(@infinity, 1).should.nan?
+ @infinity_minus.sub(@infinity_minus, 1).should.nan?
end
it "returns Infinity or -Infinity if these are involved" do
diff --git a/spec/ruby/library/bigdecimal/to_f_spec.rb b/spec/ruby/library/bigdecimal/to_f_spec.rb
index 1cc25d5c40..f5220d995a 100644
--- a/spec/ruby/library/bigdecimal/to_f_spec.rb
+++ b/spec/ruby/library/bigdecimal/to_f_spec.rb
@@ -20,9 +20,9 @@ describe "BigDecimal#to_f" do
end
it "returns number of type float" do
- BigDecimal("3.14159").to_f.should be_kind_of(Float)
- @vals.each { |val| val.to_f.should be_kind_of(Float) }
- @spec_vals.each { |val| val.to_f.should be_kind_of(Float) }
+ BigDecimal("3.14159").to_f.should.is_a?(Float)
+ @vals.each { |val| val.to_f.should.is_a?(Float) }
+ @spec_vals.each { |val| val.to_f.should.is_a?(Float) }
end
it "rounds correctly to Float precision" do
@@ -41,7 +41,7 @@ describe "BigDecimal#to_f" do
@zero.to_f.should == 0
@zero.to_f.to_s.should == "0.0"
- @nan.to_f.nan?.should == true
+ @nan.to_f.should.nan?
@infinity.to_f.infinite?.should == 1
@infinity_minus.to_f.infinite?.should == -1
diff --git a/spec/ruby/library/bigdecimal/to_i_spec.rb b/spec/ruby/library/bigdecimal/to_i_spec.rb
index 09481fce15..e5e65c562e 100644
--- a/spec/ruby/library/bigdecimal/to_i_spec.rb
+++ b/spec/ruby/library/bigdecimal/to_i_spec.rb
@@ -3,5 +3,5 @@ require_relative 'shared/to_int'
require 'bigdecimal'
describe "BigDecimal#to_i" do
- it_behaves_like :bigdecimal_to_int, :to_i
+ it_behaves_like :bigdecimal_to_int, :to_i
end
diff --git a/spec/ruby/library/bigdecimal/to_r_spec.rb b/spec/ruby/library/bigdecimal/to_r_spec.rb
index 91d2b33993..a112c002ef 100644
--- a/spec/ruby/library/bigdecimal/to_r_spec.rb
+++ b/spec/ruby/library/bigdecimal/to_r_spec.rb
@@ -4,13 +4,25 @@ require 'bigdecimal'
describe "BigDecimal#to_r" do
it "returns a Rational" do
- BigDecimal("3.14159").to_r.should be_kind_of(Rational)
+ BigDecimal("3.14159").to_r.should.is_a?(Rational)
end
it "returns a Rational with bignum values" do
r = BigDecimal("3.141592653589793238462643").to_r
- r.numerator.should eql(3141592653589793238462643)
- r.denominator.should eql(1000000000000000000000000)
+ r.numerator.should.eql?(3141592653589793238462643)
+ r.denominator.should.eql?(1000000000000000000000000)
+ end
+
+ it "returns a Rational from a BigDecimal with an exponent" do
+ r = BigDecimal("1E2").to_r
+ r.numerator.should.eql?(100)
+ r.denominator.should.eql?(1)
+ end
+
+ it "returns a Rational from a negative BigDecimal with an exponent" do
+ r = BigDecimal("-1E2").to_r
+ r.numerator.should.eql?(-100)
+ r.denominator.should.eql?(1)
end
end
diff --git a/spec/ruby/library/bigdecimal/to_s_spec.rb b/spec/ruby/library/bigdecimal/to_s_spec.rb
index b6154c680d..5ec54765b5 100644
--- a/spec/ruby/library/bigdecimal/to_s_spec.rb
+++ b/spec/ruby/library/bigdecimal/to_s_spec.rb
@@ -8,6 +8,11 @@ describe "BigDecimal#to_s" do
@bigneg_str = "-3.1415926535897932384626433832795028841971693993"
@bigdec = BigDecimal(@bigdec_str)
@bigneg = BigDecimal(@bigneg_str)
+ @internal = Encoding.default_internal
+ end
+
+ after :each do
+ Encoding.default_internal = @internal
end
it "return type is of class String" do
@@ -26,7 +31,7 @@ describe "BigDecimal#to_s" do
end
it "takes an optional argument" do
- -> {@bigdec.to_s("F")}.should_not raise_error()
+ -> {@bigdec.to_s("F")}.should_not.raise()
end
it "starts with + if + is supplied and value is positive" do
@@ -34,9 +39,9 @@ describe "BigDecimal#to_s" do
@bigneg.to_s("+").should_not =~ /^\+.*/
end
- it "inserts a space every n chars, if integer n is supplied" do
+ it "inserts a space every n chars to fraction part, if integer n is supplied" do
re =\
- /\A0\.314 159 265 358 979 323 846 264 338 327 950 288 419 716 939 937E1\z/i
+ /\A0\.314 159 265 358 979 323 846 264 338 327 950 288 419 716 939 937E1\z/i
@bigdec.to_s(3).should =~ re
str1 = '-123.45678 90123 45678 9'
@@ -47,6 +52,10 @@ describe "BigDecimal#to_s" do
BigDecimal("1.2345").to_s('0F').should == "1.2345"
end
+ it "inserts a space every n chars to integer part, if integer n is supplied" do
+ BigDecimal('1000010').to_s('5F').should == "10 00010.0"
+ end
+
it "can return a leading space for values > 0" do
@bigdec.to_s(" F").should =~ /\ .*/
@bigneg.to_s(" F").should_not =~ /\ .*/
@@ -77,4 +86,13 @@ describe "BigDecimal#to_s" do
end
end
+ it "returns a String in US-ASCII encoding when Encoding.default_internal is nil" do
+ Encoding.default_internal = nil
+ BigDecimal('1.23').to_s.encoding.should.equal?(Encoding::US_ASCII)
+ end
+
+ it "returns a String in US-ASCII encoding when Encoding.default_internal is not nil" do
+ Encoding.default_internal = Encoding::IBM437
+ BigDecimal('1.23').to_s.encoding.should.equal?(Encoding::US_ASCII)
+ end
end
diff --git a/spec/ruby/library/bigdecimal/truncate_spec.rb b/spec/ruby/library/bigdecimal/truncate_spec.rb
index d3a15f62c7..cedc662aeb 100644
--- a/spec/ruby/library/bigdecimal/truncate_spec.rb
+++ b/spec/ruby/library/bigdecimal/truncate_spec.rb
@@ -4,11 +4,11 @@ require 'bigdecimal'
describe "BigDecimal#truncate" do
before :each do
- @arr = ['3.14159', '8.7', "0.314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593014782083152134043E1"]
- @big = BigDecimal("123456.789")
- @nan = BigDecimal('NaN')
- @infinity = BigDecimal('Infinity')
- @infinity_negative = BigDecimal('-Infinity')
+ @arr = ['3.14159', '8.7', "0.314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593014782083152134043E1"]
+ @big = BigDecimal("123456.789")
+ @nan = BigDecimal('NaN')
+ @infinity = BigDecimal('Infinity')
+ @infinity_negative = BigDecimal('-Infinity')
end
it "returns value of type Integer." do
@@ -58,9 +58,9 @@ describe "BigDecimal#truncate" do
end
it "returns NaN if self is NaN" do
- @nan.truncate(-1).nan?.should == true
- @nan.truncate(+1).nan?.should == true
- @nan.truncate(0).nan?.should == true
+ @nan.truncate(-1).should.nan?
+ @nan.truncate(+1).should.nan?
+ @nan.truncate(0).should.nan?
end
it "returns Infinity if self is infinite" do
@@ -74,8 +74,8 @@ describe "BigDecimal#truncate" do
end
it "returns the same value if self is special value" do
- -> { @nan.truncate }.should raise_error(FloatDomainError)
- -> { @infinity.truncate }.should raise_error(FloatDomainError)
- -> { @infinity_negative.truncate }.should raise_error(FloatDomainError)
+ -> { @nan.truncate }.should.raise(FloatDomainError)
+ -> { @infinity.truncate }.should.raise(FloatDomainError)
+ -> { @infinity_negative.truncate }.should.raise(FloatDomainError)
end
end
diff --git a/spec/ruby/library/bigdecimal/uminus_spec.rb b/spec/ruby/library/bigdecimal/uminus_spec.rb
index 5e2a786c4c..c780cdfac5 100644
--- a/spec/ruby/library/bigdecimal/uminus_spec.rb
+++ b/spec/ruby/library/bigdecimal/uminus_spec.rb
@@ -53,6 +53,6 @@ describe "BigDecimal#-@" do
@zero_neg.send(:-@).should == @zero
@zero_neg.send(:-@).sign.should == 1
- @nan.send(:-@).nan?.should == true
+ @nan.send(:-@).should.nan?
end
end
diff --git a/spec/ruby/library/bigdecimal/util_spec.rb b/spec/ruby/library/bigdecimal/util_spec.rb
index f41e131144..69663d4bd2 100644
--- a/spec/ruby/library/bigdecimal/util_spec.rb
+++ b/spec/ruby/library/bigdecimal/util_spec.rb
@@ -20,17 +20,15 @@ describe "BigDecimal's util method definitions" do
it "should define #to_d on BigDecimal" do
bd = BigDecimal("3.14")
- bd.to_d.should equal(bd)
+ bd.to_d.should.equal?(bd)
end
it "should define #to_d on Rational" do
Rational(22, 7).to_d(3).should == BigDecimal(3.14, 3)
end
- ruby_version_is "2.6" do
- it "should define #to_d on nil" do
- nil.to_d.should == BigDecimal(0)
- end
+ it "should define #to_d on nil" do
+ nil.to_d.should == BigDecimal(0)
end
end
diff --git a/spec/ruby/library/bigdecimal/zero_spec.rb b/spec/ruby/library/bigdecimal/zero_spec.rb
index c5d3acb8c3..2563210939 100644
--- a/spec/ruby/library/bigdecimal/zero_spec.rb
+++ b/spec/ruby/library/bigdecimal/zero_spec.rb
@@ -6,22 +6,22 @@ describe "BigDecimal#zero?" do
it "returns true if self does equal zero" do
really_small_zero = BigDecimal("0E-200000000")
really_big_zero = BigDecimal("0E200000000000")
- really_small_zero.zero?.should == true
- really_big_zero.zero?.should == true
- BigDecimal("0.000000000000000000000000").zero?.should == true
- BigDecimal("0").zero?.should == true
- BigDecimal("0E0").zero?.should == true
- BigDecimal("+0").zero?.should == true
- BigDecimal("-0").zero?.should == true
+ really_small_zero.should.zero?
+ really_big_zero.should.zero?
+ BigDecimal("0.000000000000000000000000").should.zero?
+ BigDecimal("0").should.zero?
+ BigDecimal("0E0").should.zero?
+ BigDecimal("+0").should.zero?
+ BigDecimal("-0").should.zero?
end
it "returns false otherwise" do
- BigDecimal("0000000001").zero?.should == false
- BigDecimal("2E40001").zero?.should == false
- BigDecimal("3E-20001").zero?.should == false
- BigDecimal("Infinity").zero?.should == false
- BigDecimal("-Infinity").zero?.should == false
- BigDecimal("NaN").zero?.should == false
+ BigDecimal("0000000001").should_not.zero?
+ BigDecimal("2E40001").should_not.zero?
+ BigDecimal("3E-20001").should_not.zero?
+ BigDecimal("Infinity").should_not.zero?
+ BigDecimal("-Infinity").should_not.zero?
+ BigDecimal("NaN").should_not.zero?
end
end