]> Cypherpunks repositories - gostls13.git/commitdiff
math/big: test both bitLen and bitLen_g
authorRobert Griesemer <gri@golang.org>
Thu, 26 Jan 2012 18:08:21 +0000 (10:08 -0800)
committerRobert Griesemer <gri@golang.org>
Thu, 26 Jan 2012 18:08:21 +0000 (10:08 -0800)
Also: simpler, more direct test.

R=golang-dev, dave.andersen
CC=golang-dev
https://golang.org/cl/5573070

src/pkg/math/big/arith_test.go

index cd02ba3674949f5e23717d08130657d42af987ce..c7e3d284c2de624679f0104b6f1e1963d0790a46 100644 (file)
@@ -334,29 +334,21 @@ func TestMulAddWWW(t *testing.T) {
        }
 }
 
-func TestWordBitLen(t *testing.T) {
-       // Test every possible output of bitLen with the high bit set
-       // and then with all bits below max set
-       z := bitLen(0)
-       if z != 0 {
-               t.Errorf("0 got %d want 0", z)
-       }
-       x := Word(1) // Will be ...00010000...
-       y := Word(1) // Will be ...00011111...
-       for i := 1; i <= _W; i++ {
-               z = bitLen(x)
-               if z != i {
-                       t.Errorf("%x got %d want %d", x, z, i)
-               }
-               z = bitLen(y)
-               if z != i {
-                       t.Errorf("%x got %d want %d", y, z, i)
+func testWordBitLen(t *testing.T, fname string, f func(Word) int) {
+       for i := 0; i <= _W; i++ {
+               x := Word(1) << uint(i-1) // i == 0 => x == 0
+               n := f(x)
+               if n != i {
+                       t.Errorf("got %d; want %d for %s(%#x)", n, i, fname, x)
                }
-               x <<= 1
-               y = (y << 1) | 0x1
        }
 }
 
+func TestWordBitLen(t *testing.T) {
+       testWordBitLen(t, "bitLen", bitLen)
+       testWordBitLen(t, "bitLen_g", bitLen_g)
+}
+
 // runs b.N iterations of bitLen called on a Word containing (1 << nbits)-1.
 func benchmarkBitLenN(b *testing.B, nbits uint) {
        testword := Word((uint64(1) << nbits) - 1)