Giving objects some basic and stable hashCode
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 16 Dec 2012 21:19:26 +0100
changeset 335b8fd5ab83a20
parent 334 b5dd05670bef
child 336 4c0c01da763d
Giving objects some basic and stable hashCode
emul/src/main/java/java/lang/Object.java
vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareHashTest.java
     1.1 --- a/emul/src/main/java/java/lang/Object.java	Sun Dec 16 20:48:21 2012 +0100
     1.2 +++ b/emul/src/main/java/java/lang/Object.java	Sun Dec 16 21:19:26 2012 +0100
     1.3 @@ -104,6 +104,11 @@
     1.4       * @see     java.lang.Object#equals(java.lang.Object)
     1.5       * @see     java.lang.System#identityHashCode
     1.6       */
     1.7 +    @JavaScriptBody(args = "self", body = 
     1.8 +        "if (self.$hashCode) return self.$hashCode;\n"
     1.9 +        + "var h = Math.random() * Math.pow(2, 32);\n"
    1.10 +        + "return self.$hashCode = h & h;"
    1.11 +    )
    1.12      public native int hashCode();
    1.13  
    1.14      /**
     2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareHashTest.java	Sun Dec 16 20:48:21 2012 +0100
     2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareHashTest.java	Sun Dec 16 21:19:26 2012 +0100
     2.3 @@ -30,6 +30,11 @@
     2.4          return "Ahoj".hashCode();
     2.5      }
     2.6      
     2.7 +    @Compare public int hashRemainsYieldsZero() {
     2.8 +        Object o = new Object();
     2.9 +        return o.hashCode() - o.hashCode();
    2.10 +    }
    2.11 +    
    2.12      @Factory
    2.13      public static Object[] create() {
    2.14          return CompareVMs.create(CompareHashTest.class);