summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@shopify.com>2026-04-29 16:48:39 +0900
committerGitHub <noreply@github.com>2026-04-29 16:48:39 +0900
commiteadefdd07f0ab876d80f8949ea00d8983d8edd72 (patch)
treeda1aa02abaa78e9ef11a49638fcfbe08fc74da75 /test
parent3345854fa882f6bd70bbd7853010b43b9c8fe73d (diff)
Introduce `IO::Buffer#bit_count`. (#16784)
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_io_buffer.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/ruby/test_io_buffer.rb b/test/ruby/test_io_buffer.rb
index 1b9bbf1055..5662f0daf9 100644
--- a/test/ruby/test_io_buffer.rb
+++ b/test/ruby/test_io_buffer.rb
@@ -694,6 +694,36 @@ class TestIOBuffer < Test::Unit::TestCase
assert_equal IO::Buffer.for("\xce\xcd\xcc\xcb\xce\xcd\xcc\xcb\xce\xcd"), source.dup.not!
end
+ def test_bit_count
+ # All ones: 8 bits set per byte
+ assert_equal 8, IO::Buffer.for("\xFF").bit_count
+ # All zeros: no bits set
+ assert_equal 0, IO::Buffer.for("\x00").bit_count
+ # Mixed: 0xFF (8) + 0x00 (0) + 0x0F (4) = 12
+ assert_equal 12, IO::Buffer.for("\xFF\x00\x0F").bit_count
+ # Subrange: offset=0, length=1 => 0xFF => 8
+ assert_equal 8, IO::Buffer.for("\xFF\x00\x0F").bit_count(0, 1)
+ # Subrange: offset=1, length=1 => 0x00 => 0
+ assert_equal 0, IO::Buffer.for("\xFF\x00\x0F").bit_count(1, 1)
+ # Subrange: offset=2, length=1 => 0x0F => 4
+ assert_equal 4, IO::Buffer.for("\xFF\x00\x0F").bit_count(2, 1)
+ # Subrange: offset=1, length=2 => 0x00 + 0x0F = 4
+ assert_equal 4, IO::Buffer.for("\xFF\x00\x0F").bit_count(1, 2)
+ # Empty buffer: 0
+ assert_equal 0, IO::Buffer.new(0).bit_count
+ # 8-byte aligned: 8 bytes of 0xFF => 64 bits
+ assert_equal 64, IO::Buffer.for("\xFF" * 8).bit_count
+ # Cross 8-byte boundary: 9 bytes of 0xFF => 72 bits
+ assert_equal 72, IO::Buffer.for("\xFF" * 9).bit_count
+ # offset=0 with no length => defaults to full buffer:
+ assert_equal 12, IO::Buffer.for("\xFF\x00\x0F").bit_count(0)
+ # offset=1 with no length => 0x00 + 0x0F = 4:
+ assert_equal 4, IO::Buffer.for("\xFF\x00\x0F").bit_count(1)
+ # Out-of-range raises
+ assert_raise(ArgumentError) { IO::Buffer.for("\xFF").bit_count(0, 2) }
+ assert_raise(ArgumentError) { IO::Buffer.for("\xFF").bit_count(1, 1) }
+ end
+
def test_shared
message = "Hello World"
buffer = IO::Buffer.new(64, IO::Buffer::MAPPED | IO::Buffer::SHARED)