From 6bedbf462544a7917fdc8d8c44276079a6e156cf Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Sun, 28 Apr 2019 23:24:09 +0900 Subject: numeric.c: Extend Integer#[] to support range arguments ```` 0b01001101[2, 4] #=> 0b0011 0b01001100[2..5] #=> 0b0011 0b01001100[2...6] #=> 0b0011 ^^^^ ```` [Feature #8842] --- test/ruby/test_integer.rb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'test') diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb index ad088aa72f..2334cab50a 100644 --- a/test/ruby/test_integer.rb +++ b/test/ruby/test_integer.rb @@ -23,6 +23,31 @@ class TestInteger < Test::Unit::TestCase (-64..64).each do |idx| assert_equal((n >> idx) & 1, n[idx]) end + [*-66..-62, *-34..-30, *-5..5, *30..34, *62..66].each do |idx| + (0..100).each do |len| + assert_equal((n >> idx) & ((1 << len) - 1), n[idx, len], "#{ n }[#{ idx }, #{ len }]") + end + (0..100).each do |len| + assert_equal((n >> idx) & ((1 << (len + 1)) - 1), n[idx..idx+len], "#{ n }[#{ idx }..#{ idx+len }]") + assert_equal((n >> idx) & ((1 << len) - 1), n[idx...idx+len], "#{ n }[#{ idx }...#{ idx+len }]") + end + + # endless + assert_equal((n >> idx), n[idx..], "#{ n }[#{ idx }..]") + assert_equal((n >> idx), n[idx...], "#{ n }[#{ idx }...#]") + + # beginless + if idx >= 0 && n & ((1 << (idx + 1)) - 1) != 0 + assert_raise(ArgumentError, "#{ n }[..#{ idx }]") { n[..idx] } + else + assert_equal(0, n[..idx], "#{ n }[..#{ idx }]") + end + if idx >= 0 && n & ((1 << idx) - 1) != 0 + assert_raise(ArgumentError, "#{ n }[...#{ idx }]") { n[...idx] } + else + assert_equal(0, n[...idx], "#{ n }[...#{ idx }]") + end + end end # assert_equal(1, (1 << 0x40000000)[0x40000000], "[ruby-dev:31271]") -- cgit v1.2.3