diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NumberTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NumberTest.java index f604983de8c..17fffbab883 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NumberTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NumberTest.java @@ -81,6 +81,10 @@ public final class NumberTest extends SingleFileTranslationTest { checkFooBoxIsOk(); } + public void testLongHashCode() throws Exception { + checkFooBoxIsOk(); + } + public void testLongArray() throws Exception { checkFooBoxIsOk(); } diff --git a/js/js.translator/testData/long.js b/js/js.translator/testData/long.js index 391e5e797a9..d38adbd3d4f 100644 --- a/js/js.translator/testData/long.js +++ b/js/js.translator/testData/long.js @@ -279,6 +279,10 @@ this.getLowBitsUnsigned(); }; + /** @return {number} The 32-bit hashCode of this value. */ + Kotlin.Long.prototype.hashCode = function() { + return this.high_ ^ this.low_; + }; /** * @param {number=} opt_radix The radix in which the text should be written. diff --git a/js/js.translator/testData/number/cases/longHashCode.kt b/js/js.translator/testData/number/cases/longHashCode.kt new file mode 100644 index 00000000000..3bf479a750a --- /dev/null +++ b/js/js.translator/testData/number/cases/longHashCode.kt @@ -0,0 +1,17 @@ +package foo + +fun box(): String { + var l1: Long = 0x12344478935690 + var l2: Long = 0x12344478935698 + var diff: Long = l2 - l1 + l1 += (diff / 2) + l2 -= (diff / 2) + + assertEquals(l1, l2, "When L1 == L2") + assertEquals(l1.hashCode(), l2.hashCode(), "L1.hashCode() == L2.hashCode()") + + var l3: Any = l2 + assertEquals(l1.hashCode(), l3.hashCode(), "Any(Long).hashCode()") + + return "OK" +} \ No newline at end of file