[ https://issues.apache.org/jira/browse/BEAM-5866?focusedWorklogId=159378&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-159378 ]
ASF GitHub Bot logged work on BEAM-5866: ---------------------------------------- Author: ASF GitHub Bot Created on: 26/Oct/18 20:21 Start Date: 26/Oct/18 20:21 Worklog Time Spent: 10m Work Description: kanterov commented on a change in pull request #6845: [BEAM-5866] Override structuralValue in Row and Map coders URL: https://github.com/apache/beam/pull/6845#discussion_r228654137 ########## File path: sdks/java/core/src/test/java/org/apache/beam/sdk/coders/org/apache/beam/sdk/coders/RowCoderTest.java ########## @@ -145,4 +149,47 @@ public void testVerifyDeterministicNestedRow() throws NonDeterministicException coder.verifyDeterministic(); } + + @Test + public void testConsistentWithEqualsBytesField() { + Schema schema = Schema.of(Schema.Field.of("f1", FieldType.BYTES)); + Row row = Row.withSchema(schema).addValue(new byte[] {1, 2, 3, 4}).build(); + RowCoder coder = RowCoder.of(schema); + + CoderTestUtils.testConsistentWithEquals(coder, row); + } + + @Test + public void testStructuralValueBytesField() { + Schema schema = Schema.of(Schema.Field.of("f1", FieldType.BYTES)); + Row row = Row.withSchema(schema).addValue(new byte[] {1, 2, 3, 4}).build(); + RowCoder coder = RowCoder.of(schema); + + CoderTestUtils.testStructuralValueConsistentWithEquals(coder, row); + } + + @Test + @Ignore // TODO should it even be possible to create rows with such schema? Review comment: abstract `Map` implementations imply that there is either order or hashCode+equality for values. `byte[]`doesn't have either of that. `Map<byte[], ?>` will work only if we provide specialized implementation for it. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org Issue Time Tracking ------------------- Worklog Id: (was: 159378) Time Spent: 2h 20m (was: 2h 10m) > RowCoder doesn't implement structuralValue > ------------------------------------------ > > Key: BEAM-5866 > URL: https://issues.apache.org/jira/browse/BEAM-5866 > Project: Beam > Issue Type: Bug > Components: sdk-java-core > Reporter: Gleb Kanterov > Assignee: Gleb Kanterov > Priority: Major > Time Spent: 2h 20m > Remaining Estimate: 0h > > These two properties fail for RowCoder with `BYTES` field, or `Map<BYTES, ?>` > field. > {code} > public static <T> void testConsistentWithEquals(Coder<T> coder, T example) { > assumeTrue(coder.consistentWithEquals()); > byte[] bytes = encodeBytes(coder, example); > // even if the coder is non-deterministic, if the encoded bytes match, > // coder is consistent with equals, decoded values must be equal > T out0 = decodeBytes(coder, bytes); > T out1 = decodeBytes(coder, bytes); > assertEquals("If the encoded bytes match, decoded values must be equal", > out0, out1); > assertEquals( > "If two values are equal, their hash codes must be equal", > out0.hashCode(), > out1.hashCode()); > } > public static <T> void testStructuralValueConsistentWithEquals(Coder<T> > coder, T example) { > byte[] bytes = encodeBytes(coder, example); > // even if coder is non-deterministic, if the encoded bytes match, > // structural values must be equal > Object out0 = coder.structuralValue(decodeBytes(coder, bytes)); > Object out1 = coder.structuralValue(decodeBytes(coder, bytes)); > assertEquals("If the encoded bytes match, structural values must be > equal", out0, out1); > assertEquals( > "If two values are equal, their hash codes must be equal", > out0.hashCode(), > out1.hashCode()); > } > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)