[
https://issues.apache.org/jira/browse/BEAM-5866?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gleb Kanterov updated BEAM-5866:
--------------------------------
Description:
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}
> 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
>
> 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)