-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
spec/mspec/tool/wrap_with_guard.rb 'ruby_version_is ""..."3.4"' spec/ruby/core/integer/coerce_spec.rb spec/mspec/tool/wrap_with_guard.rb 'ruby_version_is ""..."3.4"' spec/ruby/shared/rational/coerce.rb spec/mspec/tool/wrap_with_guard.rb 'ruby_version_is ""..."3.4"' spec/ruby/library/bigmath/log_spec.rb and example of at_spec.rb
- Loading branch information
Showing
4 changed files
with
123 additions
and
112 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,104 +1,107 @@ | ||
require_relative '../../spec_helper' | ||
|
||
require 'bigdecimal' | ||
|
||
describe "Integer#coerce" do | ||
context "fixnum" do | ||
describe "when given a Fixnum" do | ||
it "returns an array containing two Fixnums" do | ||
1.coerce(2).should == [2, 1] | ||
1.coerce(2).map { |i| i.class }.should == [Integer, Integer] | ||
end | ||
end | ||
ruby_version_is ""..."3.4" do | ||
|
||
describe "when given a String" do | ||
it "raises an ArgumentError when trying to coerce with a non-number String" do | ||
-> { 1.coerce(":)") }.should raise_error(ArgumentError) | ||
require 'bigdecimal' | ||
|
||
describe "Integer#coerce" do | ||
context "fixnum" do | ||
describe "when given a Fixnum" do | ||
it "returns an array containing two Fixnums" do | ||
1.coerce(2).should == [2, 1] | ||
1.coerce(2).map { |i| i.class }.should == [Integer, Integer] | ||
end | ||
end | ||
|
||
it "returns an array containing two Floats" do | ||
1.coerce("2").should == [2.0, 1.0] | ||
1.coerce("-2").should == [-2.0, 1.0] | ||
describe "when given a String" do | ||
it "raises an ArgumentError when trying to coerce with a non-number String" do | ||
-> { 1.coerce(":)") }.should raise_error(ArgumentError) | ||
end | ||
|
||
it "returns an array containing two Floats" do | ||
1.coerce("2").should == [2.0, 1.0] | ||
1.coerce("-2").should == [-2.0, 1.0] | ||
end | ||
end | ||
end | ||
|
||
it "raises a TypeError when trying to coerce with nil" do | ||
-> { 1.coerce(nil) }.should raise_error(TypeError) | ||
end | ||
it "raises a TypeError when trying to coerce with nil" do | ||
-> { 1.coerce(nil) }.should raise_error(TypeError) | ||
end | ||
|
||
it "tries to convert the given Object into a Float by using #to_f" do | ||
(obj = mock('1.0')).should_receive(:to_f).and_return(1.0) | ||
2.coerce(obj).should == [1.0, 2.0] | ||
it "tries to convert the given Object into a Float by using #to_f" do | ||
(obj = mock('1.0')).should_receive(:to_f).and_return(1.0) | ||
2.coerce(obj).should == [1.0, 2.0] | ||
|
||
(obj = mock('0')).should_receive(:to_f).and_return('0') | ||
-> { 2.coerce(obj).should == [1.0, 2.0] }.should raise_error(TypeError) | ||
end | ||
(obj = mock('0')).should_receive(:to_f).and_return('0') | ||
-> { 2.coerce(obj).should == [1.0, 2.0] }.should raise_error(TypeError) | ||
end | ||
|
||
it "raises a TypeError when given an Object that does not respond to #to_f" do | ||
-> { 1.coerce(mock('x')) }.should raise_error(TypeError) | ||
-> { 1.coerce(1..4) }.should raise_error(TypeError) | ||
-> { 1.coerce(:test) }.should raise_error(TypeError) | ||
it "raises a TypeError when given an Object that does not respond to #to_f" do | ||
-> { 1.coerce(mock('x')) }.should raise_error(TypeError) | ||
-> { 1.coerce(1..4) }.should raise_error(TypeError) | ||
-> { 1.coerce(:test) }.should raise_error(TypeError) | ||
end | ||
end | ||
end | ||
|
||
context "bignum" do | ||
it "coerces other to a Bignum and returns [other, self] when passed a Fixnum" do | ||
a = bignum_value | ||
ary = a.coerce(2) | ||
context "bignum" do | ||
it "coerces other to a Bignum and returns [other, self] when passed a Fixnum" do | ||
a = bignum_value | ||
ary = a.coerce(2) | ||
|
||
ary[0].should be_kind_of(Integer) | ||
ary[1].should be_kind_of(Integer) | ||
ary.should == [2, a] | ||
end | ||
ary[0].should be_kind_of(Integer) | ||
ary[1].should be_kind_of(Integer) | ||
ary.should == [2, a] | ||
end | ||
|
||
it "returns [other, self] when passed a Bignum" do | ||
a = bignum_value | ||
b = bignum_value | ||
ary = a.coerce(b) | ||
it "returns [other, self] when passed a Bignum" do | ||
a = bignum_value | ||
b = bignum_value | ||
ary = a.coerce(b) | ||
|
||
ary[0].should be_kind_of(Integer) | ||
ary[1].should be_kind_of(Integer) | ||
ary.should == [b, a] | ||
end | ||
ary[0].should be_kind_of(Integer) | ||
ary[1].should be_kind_of(Integer) | ||
ary.should == [b, a] | ||
end | ||
|
||
it "raises a TypeError when not passed a Fixnum or Bignum" do | ||
a = bignum_value | ||
it "raises a TypeError when not passed a Fixnum or Bignum" do | ||
a = bignum_value | ||
|
||
-> { a.coerce(nil) }.should raise_error(TypeError) | ||
-> { a.coerce(mock('str')) }.should raise_error(TypeError) | ||
-> { a.coerce(1..4) }.should raise_error(TypeError) | ||
-> { a.coerce(:test) }.should raise_error(TypeError) | ||
end | ||
-> { a.coerce(nil) }.should raise_error(TypeError) | ||
-> { a.coerce(mock('str')) }.should raise_error(TypeError) | ||
-> { a.coerce(1..4) }.should raise_error(TypeError) | ||
-> { a.coerce(:test) }.should raise_error(TypeError) | ||
end | ||
|
||
it "coerces both values to Floats and returns [other, self] when passed a Float" do | ||
a = bignum_value | ||
a.coerce(1.2).should == [1.2, a.to_f] | ||
end | ||
it "coerces both values to Floats and returns [other, self] when passed a Float" do | ||
a = bignum_value | ||
a.coerce(1.2).should == [1.2, a.to_f] | ||
end | ||
|
||
it "coerces both values to Floats and returns [other, self] when passed a String" do | ||
a = bignum_value | ||
a.coerce("123").should == [123.0, a.to_f] | ||
end | ||
it "coerces both values to Floats and returns [other, self] when passed a String" do | ||
a = bignum_value | ||
a.coerce("123").should == [123.0, a.to_f] | ||
end | ||
|
||
it "calls #to_f to coerce other to a Float" do | ||
b = mock("bignum value") | ||
b.should_receive(:to_f).and_return(1.2) | ||
it "calls #to_f to coerce other to a Float" do | ||
b = mock("bignum value") | ||
b.should_receive(:to_f).and_return(1.2) | ||
|
||
a = bignum_value | ||
ary = a.coerce(b) | ||
a = bignum_value | ||
ary = a.coerce(b) | ||
|
||
ary.should == [1.2, a.to_f] | ||
ary.should == [1.2, a.to_f] | ||
end | ||
end | ||
end | ||
|
||
context "bigdecimal" 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 | ||
context "bigdecimal" 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 | ||
end | ||
|
||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,13 @@ | ||
require_relative '../../spec_helper' | ||
require 'bigdecimal' | ||
|
||
describe "BigDecimal#log" do | ||
it "handles high-precision Rational arguments" do | ||
result = BigDecimal('0.22314354220170971436137296411949880462556361100856391620766259404746040597133837784E0') | ||
r = Rational(1_234_567_890, 987_654_321) | ||
BigMath.log(r, 50).should == result | ||
ruby_version_is ""..."3.4" do | ||
require 'bigdecimal' | ||
|
||
describe "BigDecimal#log" do | ||
it "handles high-precision Rational arguments" do | ||
result = BigDecimal('0.22314354220170971436137296411949880462556361100856391620766259404746040597133837784E0') | ||
r = Rational(1_234_567_890, 987_654_321) | ||
BigMath.log(r, 50).should == result | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,34 +1,37 @@ | ||
require_relative '../../spec_helper' | ||
|
||
require 'bigdecimal' | ||
ruby_version_is ""..."3.4" do | ||
|
||
describe :rational_coerce, shared: true 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 be_true | ||
result.last.is_a?(Float).should be_true | ||
end | ||
require 'bigdecimal' | ||
|
||
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 be_true | ||
result.last.is_a?(Rational).should be_true | ||
end | ||
describe :rational_coerce, shared: true 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 be_true | ||
result.last.is_a?(Float).should be_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 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 be_true | ||
result.last.is_a?(Rational).should be_true | ||
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 "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_error(TypeError, /BigDecimal can't be coerced into Rational/) | ||
it "raises an error when passed a BigDecimal" do | ||
-> { | ||
Rational(500, 3).coerce(BigDecimal('166.666666666')) | ||
}.should raise_error(TypeError, /BigDecimal can't be coerced into Rational/) | ||
end | ||
end | ||
end |