### Question:
BytesValues { public static BytesValue concatenate(BytesValue... values) { int size = 0; for (BytesValue value : values) { size += value.size(); } MutableBytesValue result = MutableBytesValue.create(size); int offset = 0; for (BytesValue value : values) { value.copyTo(result, offset); offset += value.size(); } return result; } private  BytesValues(); static int countZeros(BytesValue value); static BytesValue trimLeadingZeros(BytesValue value); static BytesValue toMinimalBytes(long l); static BytesValue ofUnsignedByte(int v); static BytesValue ofUnsignedShort(int v); static BytesValue ofUnsignedInt(long v); static BytesValue ofUnsignedIntLittleEndian(long v); static int extractInt(BytesValue value); static int extractIntLittleEndian(BytesValue value); static long extractLong(BytesValue value); static BytesValue concatenate(BytesValue... values); static BigInteger asUnsignedBigInteger(BytesValue bytes); static String asString(BytesValue bytes); static BigInteger asSignedBigInteger(BytesValue bytes); static BytesValue and(BytesValue b1, BytesValue b2); static BytesValue or(BytesValue b1, BytesValue b2);  }### Answer:
@Test public void hexConcatenate() { assertEquals(h("0x"), concatenate(h("0x"), h("0x"))); assertEquals(h("0x1234"), concatenate(h("0x1234"), h("0x"))); assertEquals(h("0x1234"), concatenate(h("0x"), h("0x1234"))); assertEquals(h("0x12345678"), concatenate(h("0x1234"), h("0x5678"))); int valCount = 10; BytesValue[] values = new BytesValue[valCount]; StringBuilder res = new StringBuilder(); for (int i = 0; i < valCount; i++) { String hex = "1234"; values[i] = h(hex); res.append(hex); } assertEquals(h(res.toString()), concatenate(values)); }