1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/spec/ruby/core/integer/pow_spec.rb
eregon 401b64c4e8 Update to ruby/spec@c1b568b
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-04 15:09:32 +00:00

51 lines
1.8 KiB
Ruby

require_relative '../../spec_helper'
require_relative 'fixtures/classes'
require_relative 'shared/exponent'
ruby_version_is "2.5" do
describe "Integer#pow" do
context "one argument is passed" do
it_behaves_like :integer_exponent, :pow
end
context "two arguments are passed" do
it "returns modulo of self raised to the given power" do
2.pow(5, 12).should == 8
2.pow(6, 13).should == 12
2.pow(7, 14).should == 2
2.pow(8, 15).should == 1
end
ruby_bug '#13669', '2.5'...'2.5.1' do
it "works well with bignums" do
2.pow(61, 5843009213693951).should eql 3697379018277258
2.pow(62, 5843009213693952).should eql 1551748822859776
2.pow(63, 5843009213693953).should eql 3103497645717974
2.pow(64, 5843009213693954).should eql 363986077738838
end
end
it "handles sign like #divmod does" do
2.pow(5, 12).should == 8
2.pow(5, -12).should == -4
-2.pow(5, 12).should == 4
-2.pow(5, -12).should == -8
end
it "ensures all arguments are integers" do
-> { 2.pow(5, 12.0) }.should raise_error(TypeError, /2nd argument not allowed unless all arguments are integers/)
-> { 2.pow(5, Rational(12, 1)) }.should raise_error(TypeError, /2nd argument not allowed unless all arguments are integers/)
end
it "raises TypeError for non-numeric value" do
-> { 2.pow(5, "12") }.should raise_error(TypeError)
-> { 2.pow(5, []) }.should raise_error(TypeError)
-> { 2.pow(5, nil) }.should raise_error(TypeError)
end
it "raises a ZeroDivisionError when the given argument is 0" do
-> { 2.pow(5, 0) }.should raise_error(ZeroDivisionError)
end
end
end
end