You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "pieter martin (JIRA)" <ji...@apache.org> on 2016/04/11 01:28:25 UTC

[jira] [Commented] (TINKERPOP-1259) SerializationTest.shouldSerializeTree fails due to id() and hashCode()

    [ https://issues.apache.org/jira/browse/TINKERPOP-1259?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15234342#comment-15234342 ] 

pieter martin commented on TINKERPOP-1259:
------------------------------------------

Ok, had another look.

So my first analysis was wrong, but I still think its a problem with TinkerPop.

{{DetachedVertexProperty}}'s {{hashCode()}} calls the inherited {{DetachedElement}}'s {{hashCode()}} which is calling 

{code}
element.id().hashCode()
{code}

However it should be calling 
{code}
property.key().hashCode() + property.value().hashCode()
{code}

It will call this if {{DetachedVertexProperty}} has its own {{hashCode()}} method

{code}
    @Override
    public int hashCode() {
        return ElementHelper.hashCode((Property)this);
    }
{code}

in which case the correct hashCode is returned and the test passes in Sqlg.

> SerializationTest.shouldSerializeTree fails due to id() and hashCode()
> ----------------------------------------------------------------------
>
>                 Key: TINKERPOP-1259
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1259
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: test-suite
>    Affects Versions: 3.2.1
>            Reporter: pieter martin
>
> The tests fails on the last 
> {code}
> assertEquals("The objects differ", after, before)
> {code}
> The 2 trees are however correct but due to differences in the {{DetachedVertexProperty}} and {{SqlgVertexProperty}} {{id()}}, {{equals()}} and {{hashCode()}} implementation the 2 trees are not equal.
> {{DetachedVertexProperty}} uses the {{element}}'s {{id}} as its {{id}} and that is used in the {{equals}} and {{hashCode}} method basically making a property equal to an element.
> {{SqlgVertexProperty}} has a more sophisticated {{id()}}
> {code}
> return (long) (this.key().hashCode() + this.value().hashCode() + this.element().id().hashCode())
> {code}
> If I change this to be the same as {{DetachedVertexProperty}} then the test passes but I am not sure that it would be correct.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)