@@ -33,14 +33,16 @@ class BigDecimal
3333 end
3434 end
3535
36- it_behaves_like :bigdecimal_modulo , :mod_part_of_divmod
36+ version_is BigDecimal ::VERSION , "" ..."4.0.0" do
37+ it_behaves_like :bigdecimal_modulo , :mod_part_of_divmod
38+ end
3739
3840 it "raises ZeroDivisionError if other is zero" do
3941 bd5667 = BigDecimal ( "5667.19" )
40-
42+ zero = BigDecimal ( "0" )
4143 -> { bd5667 . mod_part_of_divmod ( 0 ) } . should raise_error ( ZeroDivisionError )
4244 -> { bd5667 . mod_part_of_divmod ( BigDecimal ( "0" ) ) } . should raise_error ( ZeroDivisionError )
43- -> { @ zero. mod_part_of_divmod ( @ zero) } . should raise_error ( ZeroDivisionError )
45+ -> { zero . mod_part_of_divmod ( zero ) } . should raise_error ( ZeroDivisionError )
4446 end
4547end
4648
@@ -73,14 +75,25 @@ class BigDecimal
7375 @zeroes = [ @zero , @zero_pos , @zero_neg ]
7476 end
7577
76- it "divides value, returns an array" do
77- res = @a . divmod ( 5 )
78- res . kind_of? ( Array ) . should == true
78+ version_is BigDecimal ::VERSION , "" ..."4.0.0" do
79+ it "divides value, returns [BigDecimal, BigDecimal]" do
80+ res = @a . divmod ( 5 )
81+ res . kind_of? ( Array ) . should == true
82+ DivmodSpecs . check_both_bigdecimal ( res )
83+ end
84+ end
85+
86+ version_is BigDecimal ::VERSION , "4.0.0" do
87+ it "divides value, returns [Integer, BigDecimal]" do
88+ res = @a . divmod ( 5 )
89+ res . kind_of? ( Array ) . should == true
90+ res [ 0 ] . kind_of? ( Integer ) . should == true
91+ res [ 1 ] . kind_of? ( BigDecimal ) . should == true
92+ end
7993 end
8094
8195 it "array contains quotient and modulus as BigDecimal" do
8296 res = @a . divmod ( 5 )
83- DivmodSpecs . check_both_bigdecimal ( res )
8497 res [ 0 ] . should == BigDecimal ( '0.8E1' )
8598 res [ 1 ] . should == BigDecimal ( '2.00000000000000000001' )
8699
@@ -123,17 +136,27 @@ class BigDecimal
123136 values_and_zeroes . each do |val1 |
124137 values . each do |val2 |
125138 res = val1 . divmod ( val2 )
126- DivmodSpecs . check_both_bigdecimal ( res )
127139 res [ 0 ] . should == ( ( val1 /val2 ) . floor )
128140 res [ 1 ] . should == ( val1 - res [ 0 ] * val2 )
129141 end
130142 end
131143 end
132144
133- it "returns an array of two NaNs if NaN is involved" do
134- ( @special_vals + @regular_vals + @zeroes ) . each do |val |
135- DivmodSpecs . check_both_nan ( val . divmod ( @nan ) )
136- DivmodSpecs . check_both_nan ( @nan . divmod ( val ) )
145+ version_is BigDecimal ::VERSION , "4.0.0" do
146+ it "raise FloatDomainError error if NaN is involved" do
147+ ( @special_vals + @regular_vals + @zeroes ) . each do |val |
148+ -> { val . divmod ( @nan ) } . should raise_error ( FloatDomainError )
149+ -> { @nan . divmod ( val ) } . should raise_error ( FloatDomainError )
150+ end
151+ end
152+ end
153+
154+ version_is BigDecimal ::VERSION , "" ..."4.0.0" do
155+ it "returns an array of two NaNs if NaN is involved" do
156+ ( @special_vals + @regular_vals + @zeroes ) . each do |val |
157+ DivmodSpecs . check_both_nan ( val . divmod ( @nan ) )
158+ DivmodSpecs . check_both_nan ( @nan . divmod ( val ) )
159+ end
137160 end
138161 end
139162
@@ -145,12 +168,14 @@ class BigDecimal
145168 end
146169 end
147170
148- it "returns an array of Infinity and NaN if the dividend is Infinity" do
149- @regular_vals . each do |val |
150- array = @infinity . divmod ( val )
151- array . length . should == 2
152- array [ 0 ] . infinite? . should == ( val > 0 ? 1 : -1 )
153- array [ 1 ] . should . nan?
171+ version_is BigDecimal ::VERSION , "" ..."4.0.0" do
172+ it "returns an array of Infinity and NaN if the dividend is Infinity" do
173+ @regular_vals . each do |val |
174+ array = @infinity . divmod ( val )
175+ array . length . should == 2
176+ array [ 0 ] . infinite? . should == ( val > 0 ? 1 : -1 )
177+ array [ 1 ] . should . nan?
178+ end
154179 end
155180 end
156181
0 commit comments