You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2007/01/30 12:08:14 UTC

svn commit: r501368 - /db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/FormatableBitSetTest.java

Author: kahatlen
Date: Tue Jan 30 03:08:13 2007
New Revision: 501368

URL: http://svn.apache.org/viewvc?view=rev&rev=501368
Log:
DERBY-2191: More test cases for FormatableBitSet.getNumBitsSet()

Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/FormatableBitSetTest.java

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/FormatableBitSetTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/FormatableBitSetTest.java?view=diff&rev=501368&r1=501367&r2=501368
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/FormatableBitSetTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/FormatableBitSetTest.java Tue Jan 30 03:08:13 2007
@@ -33,6 +33,7 @@
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.lang.reflect.Method;
 
 
 /**
@@ -47,6 +48,19 @@
     private FormatableBitSet bitset18C;
 
     /**
+     * <code>Integer.bitCount</code> method. Only available in JDK 1.5 or
+     * later.
+     */
+    private final static Method bitCount;
+    static {
+        Method m = null;
+        try {
+            m = Integer.class.getMethod("bitCount", new Class[]{Integer.TYPE});
+        } catch (Throwable t) {}
+        bitCount = m;
+    }
+
+    /**
      * Create a test with the given name.
      *
      * @param name name of the test.
@@ -91,8 +105,15 @@
      * @throws Exception
      */
     public static Test suite() {
-        return new TestSuite(FormatableBitSetTest.class,
+        TestSuite ts = new TestSuite(FormatableBitSetTest.class,
                              "FormatableBitSetTest suite");
+
+        if (bitCount != null) {
+            ts.addTest(new FormatableBitSetTest("numBitsSetInOneByte"));
+            ts.addTest(new FormatableBitSetTest("numBitsSetInTwoBytes"));
+        }
+
+        return ts;
     }
 
     /**
@@ -485,6 +506,39 @@
         bitset18.xor(bitset18C);
         assertEquals(14,bitset18.getNumBitsSet());
         assertTrue(bitset18.invariantHolds());
+    }
+
+    // count one-bits in a byte with Integer.bitCount()
+    private static int bitsInByte(byte b) throws Exception {
+        Integer arg = new Integer(b & 0xff);
+        Integer ret = (Integer) bitCount.invoke(null, new Object[] { arg });
+        return ret.intValue();
+    }
+
+    // test getNumBitsSet() for a one-byte bit set
+    public void numBitsSetInOneByte() throws Exception {
+        for (int i = Byte.MIN_VALUE; i <= Byte.MAX_VALUE; ++i) {
+            final byte b = (byte) i;
+            FormatableBitSet bs = new FormatableBitSet(new byte[] { b });
+            assertEquals("invalid bit count for b=" + b,
+                         bitsInByte(b), bs.getNumBitsSet());
+        }
+    }
+
+    // test getNumBitsSet() for a two-byte bit set
+    public void numBitsSetInTwoBytes() throws Exception {
+        for (int i = Byte.MIN_VALUE; i <= Byte.MAX_VALUE; ++i) {
+            final byte b1 = (byte) i;
+            final int bits1 = bitsInByte(b1);
+            for (int j = Byte.MIN_VALUE; j <= Byte.MAX_VALUE; ++j) {
+                final byte b2 = (byte) j;
+                FormatableBitSet bs =
+                    new FormatableBitSet(new byte[] { b1, b2 });
+                assertEquals(
+                    "invalid bit count for b1=" + b1 + " and b2=" + b2,
+                    bits1 + bitsInByte(b2), bs.getNumBitsSet());
+            }
+        }
     }
 
     // Test case for writeExternal(ObjectOut) and readExternal(ObjectOut)