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/18 12:10:32 UTC

svn commit: r497398 - in /db/derby/code/trunk/java: engine/org/apache/derby/iapi/services/io/FormatableBitSet.java testing/org/apache/derbyTesting/unitTests/junit/FormatableBitSetTest.java

Author: kahatlen
Date: Thu Jan 18 03:10:31 2007
New Revision: 497398

URL: http://svn.apache.org/viewvc?view=rev&rev=497398
Log:
DERBY-2191: Make boundary checking more consistent in FormatableBitSet

Patch contributed by Dyre Tjeldvoll.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/FormatableBitSet.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/FormatableBitSetTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/FormatableBitSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/FormatableBitSet.java?view=diff&rev=497398&r1=497397&r2=497398
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/FormatableBitSet.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/FormatableBitSet.java Thu Jan 18 03:10:31 2007
@@ -74,6 +74,14 @@
 
 	private transient int	lengthAsBits;
 
+	private void checkPosition(int p) {
+		if (p < 0 || lengthAsBits <= p) {
+			throw new
+				IllegalArgumentException("Bit position "+p+
+										 " is outside the legal range");
+		}
+	}
+
 	/**
 	 * Niladic Constructor
 	 */
@@ -446,29 +454,12 @@
 	 */
 	public final boolean isSet(int position)
 	{
-		if (SanityManager.DEBUG)
-		{
-			if (position >= this.getLength())
-            {
-                SanityManager.THROWASSERT(
-                   "Attempt to get a bit position (" + position +
-                   ")" +
-                   "that exceeds the max length (" + this.getLength() + ")");
-            }
-		}
+		checkPosition(position);
 
-		try {
-
-			int bytepos = position / 8;
-			int bitpos = 7 - (position % 8);
-
-			return ((value[bytepos] & (1 << bitpos)) != 0);
+		int bytepos = position / 8;
+		int bitpos = 7 - (position % 8);
 
-		} catch (ArrayIndexOutOfBoundsException e) {
-			// Should not happen, handle it just in case not all cases are tested
-			// by insane server.
-			return false;
-		}
+		return ((value[bytepos] & (1 << bitpos)) != 0);
 	}
 
 	/**
@@ -490,21 +481,7 @@
 	 */
 	public void set(int position)
 	{
-
-		if (SanityManager.DEBUG)
-		{
-            if (position >= this.getLength())
-            {
-                SanityManager.THROWASSERT(
-				   "Attempt to set a bit position that exceeds the max length ("
-                   + this.getLength() + ")");
-            }
-		}
-
-		// Should not happen, handle it just in case not all cases are tested
-		// by insane server.
-		if (position >= getLength())
-			grow(position);
+		checkPosition(position);
 
 		int bytepos = position / 8;
 		int bitpos = 7 - (position % 8);
@@ -520,26 +497,10 @@
 	 */
 	public void clear(int position)
 	{
-		int	bytepos;
-		int	bitpos;
-
-		if (SanityManager.DEBUG)
-		{
-            if (position >= this.getLength())
-            {
-                SanityManager.THROWASSERT(
-                   "Attempt to set a bit position that exceeds the max length ("
-                   + this.getLength() + ")");
-            }
-		}
+		checkPosition(position);
 
-		// Should not happen, handle it just in case not all cases are tested
-		// by insane server.
-		if (position >= getLength())
-			grow(position);
-
-		bytepos = position / 8;
-		bitpos = 7 - (position % 8);
+		int bytepos = position / 8;
+		int bitpos = 7 - (position % 8);
 
 		value[bytepos] &= ~(1 << bitpos);
 	}

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=497398&r1=497397&r2=497398
==============================================================================
--- 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 Thu Jan 18 03:10:31 2007
@@ -267,17 +267,16 @@
 
     // Test cases for isSet(int)
     public void testIsSetEmpty() {
-        empty.isSet(-1);
-        if (SanityManager.DEBUG) {
-            try { empty.isSet(0); fail(); } catch (AssertFailure af) {}
-        }
-        else {
-            assertFalse(empty.isSet(0));
-        }
+        try { empty.isSet(-8); fail(); } catch (IllegalArgumentException iae) {}
+        try { empty.isSet(-1); fail(); } catch (IllegalArgumentException iae) {}
+        try { empty.isSet(0); fail(); } catch (IllegalArgumentException iae) {}
     }
     public void testIsSet() {
-        // Should trigger an exception?
-        assertFalse(bitset18C.isSet(-1));
+        try { bitset18C.isSet(-8); fail(); }
+        catch (IllegalArgumentException iae) {}
+
+        try { bitset18C.isSet(-1); fail(); }
+        catch (IllegalArgumentException iae) {}
 
         assertFalse(bitset18C.isSet(0));
         assertFalse(bitset18C.isSet(1));
@@ -297,74 +296,42 @@
         assertTrue(bitset18C.isSet(15));
         assertTrue(bitset18C.isSet(16));
         assertTrue(bitset18C.isSet(17));
-
-        if (SanityManager.DEBUG) {
-            try { bitset18C.isSet(18); fail(); } catch (AssertFailure af) {}
-        }
-        else {
-            // Should fail?
-            assertFalse(bitset18C.isSet(18));
-        }
+        try { bitset18C.isSet(18); fail(); }
+        catch (IllegalArgumentException iae) {}
     }
 
     // Test cases for set(int)
     public void testSetEmpty() {
-        try { empty.set(-1); fail(); } 
-        catch (ArrayIndexOutOfBoundsException e) {}
-        if (SanityManager.DEBUG) {
-            try { empty.set(0); fail(); } catch (AssertFailure af) {}
-        }
-        else {
-            try { empty.set(0); fail(); }
-            catch (ArrayIndexOutOfBoundsException e) {}
-        }
+        try { empty.set(-8); fail(); } catch (IllegalArgumentException iae) {}
+        try { empty.set(-1); fail(); } catch (IllegalArgumentException iae) {}
+        try { empty.set(0); fail(); } catch (IllegalArgumentException iae) {}
     }
     public void testSet() {
-        // Should trigger an exception?
-        bitset18.set(-1);
+        try { bitset18.set(-8); fail(); }
+        catch (IllegalArgumentException iae) {}
+        try { bitset18.set(-1); fail(); }
+        catch (IllegalArgumentException iae) {}
         bitset18.set(0);
         bitset18.set(1);
-        if (SanityManager.DEBUG) {
-            try { bitset18.set(18); fail(); } catch (AssertFailure af) {}
-        }
-        else {
-            bitset18.set(18);
-            assertEquals(18,bitset18.getLength());
-            assertEquals(3,bitset18.getLengthInBytes());
-            assertEquals(3,bitset18.getByteArray().length);
-            assertEquals(9,bitset18.getNumBitsSet());
-        }
+        try { bitset18.set(18); fail(); }
+        catch (IllegalArgumentException iae) {}
     }
 
     // Test cases for clear(int)
     public void testClearEmpty() {
-        try { empty.clear(-1); fail(); } 
-        catch (ArrayIndexOutOfBoundsException e) {}
-        if (SanityManager.DEBUG) {
-            try { empty.clear(0); fail(); } catch (AssertFailure af) {}
-        }
-        else {
-            try { empty.clear(0); fail(); } 
-            catch (ArrayIndexOutOfBoundsException e) {}
-        }
+        try { empty.clear(-8); fail(); } catch (IllegalArgumentException iae) {}
+        try { empty.clear(-1); fail(); } catch (IllegalArgumentException iae) {}
+        try { empty.clear(0); fail(); } catch (IllegalArgumentException iae) {}
     }
     public void testClear() {
-        // Should trigger an exception?
-        bitset18.clear(-1);
+        try { bitset18.clear(-8); fail(); }
+        catch (IllegalArgumentException iae) {}
+        try { bitset18.clear(-1); fail(); }
+        catch (IllegalArgumentException iae) {}
         bitset18.clear(0);
         bitset18.clear(1);
-
-        if (SanityManager.DEBUG) {
-            try { bitset18.clear(18); fail(); } catch (AssertFailure af) {}
-        }
-        else {
-            bitset18.clear(18);
-            assertEquals(18,bitset18.getLength());
-            assertEquals(3,bitset18.getLengthInBytes());
-            assertEquals(3,bitset18.getByteArray().length);
-            // Should have been 9?
-            assertEquals(7,bitset18.getNumBitsSet());
-        }
+        try { bitset18.clear(18); fail(); }
+        catch (IllegalArgumentException iae) {}
     }
 
     // Test cases for anySetBit()
@@ -507,13 +474,8 @@
             try { bitset18.xor(bitset18C); fail(); } catch (AssertFailure af) {}
         }
         else {
-            bitset18.xor(bitset18C);
-            // Should have been 18?
-            assertEquals(17,bitset18.getLength());
-            assertEquals(3,bitset18.getLengthInBytes());
-            assertEquals(3,bitset18.getByteArray().length);
-            // Should have been 9?
-            assertEquals(13,bitset18.getNumBitsSet());
+            try { bitset18.xor(bitset18C); fail(); }
+            catch (IllegalArgumentException iae) {}
         }
         //assertEquals(14,bitset18.getNumBitsSet());
     }