From a260037002dd63e05212e98d36d444c494aa4004 Mon Sep 17 00:00:00 2001 From: "gogainda@yandex.ru" Date: Wed, 16 Dec 2020 00:13:54 +0100 Subject: [PATCH] Ruby 2.7: extend logic --- spec/ruby/core/integer/element_reference_spec.rb | 8 +------- src/main/ruby/truffleruby/core/integer.rb | 12 ++++-------- test/mri/excludes/TestInteger.rb | 3 +-- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/spec/ruby/core/integer/element_reference_spec.rb b/spec/ruby/core/integer/element_reference_spec.rb index 4c236a11e79b..7197ecdc0323 100644 --- a/spec/ruby/core/integer/element_reference_spec.rb +++ b/spec/ruby/core/integer/element_reference_spec.rb @@ -131,16 +131,10 @@ 0b000001[-3, 4].should == 0b1000 end - it "ignores negative upper boundary" do - 0b101001101[1..-1].should == 0b10100110 - 0b101001101[1..-2].should == 0b10100110 - 0b101001101[1..-3].should == 0b10100110 - end - it "ignores upper boundary smaller than lower boundary" do 0b101001101[4..1].should == 0b10100 0b101001101[4..2].should == 0b10100 - 0b101001101[4..3].should == 0b10100 + 0b101001101[-4..-5].should == 0b1010011010000 end it "raises FloatDomainError if any boundary is infinity" do diff --git a/src/main/ruby/truffleruby/core/integer.rb b/src/main/ruby/truffleruby/core/integer.rb index 992876f5995a..9f2163adc52d 100644 --- a/src/main/ruby/truffleruby/core/integer.rb +++ b/src/main/ruby/truffleruby/core/integer.rb @@ -88,20 +88,16 @@ def [](index, len = undefined) num = self >> range.begin mask = mask(range, len) - return num if range.end < 0 - return num if range.end < range.begin - num & mask + range.end < range.begin ? num : num & mask elsif Primitive.nil? range.end - start = range.begin - return self >> start + return self >> range.begin else result = self & mask(range, range.end) - raise ArgumentError, 'The beginless range for Integer#[] results in infinity' if result != 0 + raise ArgumentError, 'The beginless range for Integer#[] results in infinity' if result != 0 && range.end >= 0 - result + 0 end - end private def validate_range(index) diff --git a/test/mri/excludes/TestInteger.rb b/test/mri/excludes/TestInteger.rb index 4c3b198ec0d5..71d3b1d31df1 100644 --- a/test/mri/excludes/TestInteger.rb +++ b/test/mri/excludes/TestInteger.rb @@ -11,5 +11,4 @@ exclude :test_floor, "needs investigation" exclude :test_pow, "needs investigation" exclude :test_truncate, "needs investigation" -exclude :test_Integer_with_invalid_exception, "needs investigation" -exclude :test_aref, "needs investigation" \ No newline at end of file +exclude :test_Integer_with_invalid_exception, "needs investigation" \ No newline at end of file