summaryrefslogtreecommitdiff
path: root/spec/ruby/core/fixnum/bit_length_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/fixnum/bit_length_spec.rb')
-rw-r--r--spec/ruby/core/fixnum/bit_length_spec.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/spec/ruby/core/fixnum/bit_length_spec.rb b/spec/ruby/core/fixnum/bit_length_spec.rb
new file mode 100644
index 0000000000..8c9f69b7d7
--- /dev/null
+++ b/spec/ruby/core/fixnum/bit_length_spec.rb
@@ -0,0 +1,42 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe "Fixnum#bit_length" do
+ it "returns the position of the leftmost bit of a positive number" do
+ 0.bit_length.should == 0
+ 1.bit_length.should == 1
+ 2.bit_length.should == 2
+ 3.bit_length.should == 2
+ 4.bit_length.should == 3
+ n = fixnum_max.bit_length
+ fixnum_max[n].should == 0
+ fixnum_max[n-1].should == 1
+
+ 0.bit_length.should == 0
+ 1.bit_length.should == 1
+ 0xff.bit_length.should == 8
+ 0x100.bit_length.should == 9
+ (2**12-1).bit_length.should == 12
+ (2**12).bit_length.should == 13
+ (2**12+1).bit_length.should == 13
+ end
+
+ it "returns the position of the leftmost 0 bit of a negative number" do
+ -1.bit_length.should == 0
+ -2.bit_length.should == 1
+ -3.bit_length.should == 2
+ -4.bit_length.should == 2
+ -5.bit_length.should == 3
+ n = fixnum_min.bit_length
+ fixnum_min[n].should == 1
+ fixnum_min[n-1].should == 0
+
+ (-2**12-1).bit_length.should == 13
+ (-2**12).bit_length.should == 12
+ (-2**12+1).bit_length.should == 12
+ -0x101.bit_length.should == 9
+ -0x100.bit_length.should == 8
+ -0xff.bit_length.should == 8
+ -2.bit_length.should == 1
+ -1.bit_length.should == 0
+ end
+end