ByteArrayHelper { public static void setBit(byte[] input, int index, boolean choice) { if (index < 0) { throw new IllegalAccessError("Bit index must not be negative."); } if (choice) { input[index / 8] |= ((byte) 0x01) << (7 - (index % 8)); } else { input[index / 8] &= 0xFF ^ ((byte) 0x01) << (7 - (index % 8)); } } private  ByteArrayHelper(); static boolean getBit(byte[] input, int index); static void setBit(byte[] input, int index, boolean choice); static void xor(List<byte[]> vector1, List<byte[]> vector2); static void xor(byte[] arr1, byte[] arr2); static void shiftArray(byte[] input, byte[] output, int positions);  }
@Test public void testSetBit() { byte[] byteArray = new byte[] { (byte) 0x54, (byte) 0x04 }; ByteArrayHelper.setBit(byteArray, 13, false); byte[] expected = new byte[] { (byte) 0x54, (byte) 0x00 }; for (int i = 0; i < byteArray.length; i++) { assertEquals(expected[i], byteArray[i]); } byteArray = new byte[] { (byte) 0x54, (byte) 0x04 }; ByteArrayHelper.setBit(byteArray, 15, true); expected = new byte[] { (byte) 0x54, (byte) 0x05 }; for (int i = 0; i < byteArray.length; i++) { assertEquals(expected[i], byteArray[i]); } byteArray = new byte[] { (byte) 0x54, (byte) 0x04 }; ByteArrayHelper.setBit(byteArray, 2, false); expected = new byte[] { (byte) 0x54, (byte) 0x04 }; for (int i = 0; i < byteArray.length; i++) { assertEquals(expected[i], byteArray[i]); } byteArray = new byte[] { (byte) 0x54, (byte) 0x04 }; ByteArrayHelper.setBit(byteArray, 3, true); expected = new byte[] { (byte) 0x54, (byte) 0x04 }; for (int i = 0; i < byteArray.length; i++) { assertEquals(expected[i], byteArray[i]); } }
@Test(expected = IllegalAccessError.class) public void testSetBitIllegal() { ByteArrayHelper.setBit(new byte[]{}, -1, true); }