### Question:
BytesValue extends Value implements IByteOperations { public BytesValue negateBitwise() throws Exception { byte[] newValue = new byte[type.getBytes()]; for (int i = 0; i < newValue.length; ++i) { newValue[i] = (byte)~value[i]; } return new BytesValue(type, newValue); } BytesValue(ASTNode type, /*String*/ byte[] value); int getBytesCount(); @Override ASTNode getType(); @Override ASTNode toASTNode(boolean forJavaScript); String toHexConstantString(); @Override Object toJSONRepresentation(); BoolValue isEqualTo(BytesValue other); BoolValue isNotEqualTo(BytesValue other); BoolValue isSmallerThan(BytesValue value); BoolValue isSmallerThanOrEqualTo(BytesValue value); BoolValue isGreaterThan(BytesValue value); BoolValue isGreaterThanOrEqualTo(BytesValue value); BytesValue negateBitwise(); BytesValue bitwiseOr(Value otherValue); BytesValue bitwiseAnd(Value otherValue); BytesValue bitwiseXor(Value otherValue); BytesValue bitwiseShiftLeft(Value value); BytesValue bitwiseShiftRight(Value value); BytesValue indexAccess(Value index); IntegerValue length(); BytesValue convertToBytesType(ASTElementaryTypeName newType); IntegerValue convertToIntegerType(ASTElementaryTypeName newType);  }### Answer:
@Test public void negateBitwise() throws Exception { BytesTestValues[] a = new BytesTestValues[]{ new BytesTestValues("bytes2", new byte[]{b(0xff), b(0x00)}, null, 2, new byte[]{b(0x00), b(0xff)}) }; for (BytesTestValues testData :a) { ASTElementaryTypeName sourceType = TypeContainer.getByteType(testData.typeBytes); BytesValue source = new BytesValue(sourceType, testData.valueArray); BytesValue expectedResult = new BytesValue(sourceType, testData.operationResult); BytesValue resultValue = source.negateBitwise(); String resultString = resultValue.toASTNode(false).toSolidityCode(); String expectedResultString = expectedResult.toASTNode(false).toSolidityCode(); System.out.println("got " + resultString + " wanted " + expectedResultString); assert resultString.equals(expectedResultString); } }