summaryrefslogtreecommitdiff
path: root/test/ruby/test_integer.rb
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2019-04-28 23:24:09 +0900
committerYusuke Endoh <mame@ruby-lang.org>2019-04-28 23:40:57 +0900
commit6bedbf462544a7917fdc8d8c44276079a6e156cf (patch)
treef1adf82ecab59b605930a6321b119a80f2e85d72 /test/ruby/test_integer.rb
parentcb550246136b90a63b4f75f5e7cfaccb9da08eda (diff)
numeric.c: Extend Integer#[] to support range arguments
```` 0b01001101[2, 4] #=> 0b0011 0b01001100[2..5] #=> 0b0011 0b01001100[2...6] #=> 0b0011 ^^^^ ```` [Feature #8842]
Diffstat (limited to 'test/ruby/test_integer.rb')
-rw-r--r--test/ruby/test_integer.rb25
1 files changed, 25 insertions, 0 deletions
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]")