TEZ-3937. Empty partition BitSet to byte[] conversion creates one extra byte in round...
authorJason Lowe <jlowe@apache.org>
Mon, 21 May 2018 14:32:08 +0000 (09:32 -0500)
committerJason Lowe <jlowe@apache.org>
Mon, 21 May 2018 14:32:08 +0000 (09:32 -0500)
tez-common/src/main/java/org/apache/tez/common/TezUtilsInternal.java
tez-common/src/test/java/org/apache/tez/common/TestTezUtils.java

index 5ba2972..5d7aea3 100644 (file)
@@ -238,7 +238,7 @@ public class TezUtilsInternal {
     if (bits == null) {
       return null;
     }
-    byte[] bytes = new byte[bits.length() / 8 + 1];
+    byte[] bytes = new byte[(bits.length() + 7) / 8];
     for (int i = 0; i < bits.length(); i++) {
       if (bits.get(i)) {
         bytes[(bytes.length) - (i / 8) - 1] |= 1 << (i % 8);
index 16efc8f..04eb2c0 100644 (file)
@@ -81,11 +81,11 @@ public class TestTezUtils {
   public void testBitSetToByteArray() {
     BitSet bitSet = createBitSet(0);
     byte[] bytes = TezUtilsInternal.toByteArray(bitSet);
-    Assert.assertTrue(bytes.length == ((bitSet.length() / 8) + 1));
+    Assert.assertEquals(bytes.length, (bitSet.length() + 7) / 8);
 
     bitSet = createBitSet(1000);
     bytes = TezUtilsInternal.toByteArray(bitSet);
-    Assert.assertTrue(bytes.length == ((bitSet.length() / 8) + 1));
+    Assert.assertEquals(bytes.length, (bitSet.length() + 7) / 8);
   }
 
   @Test (timeout=2000)