// IGNORE_BACKEND: JS fun jsNullUndefinedHashCode() { assertEquals(js("null").unsafeCast().hashCode(), js("null").unsafeCast().hashCode()) assertEquals(js("undefined").unsafeCast().hashCode(), js("undefined").unsafeCast().hashCode()) assertEquals(js("null").unsafeCast().hashCode(), js("undefined").unsafeCast().hashCode()) } fun jsObjectHashCode() { val obj1 = js("{}").unsafeCast() val obj2 = js("{}").unsafeCast() val nullProtoObj1 = js("Object.create(null)").unsafeCast() val nullProtoObj2 = js("Object.create(null)").unsafeCast() val arr1 = js("[]").unsafeCast() val arr2 = js("[]").unsafeCast() assertEquals(obj1.hashCode(), obj1.hashCode()) assertEquals(obj2.hashCode(), obj2.hashCode()) assertEquals(nullProtoObj1.hashCode(), nullProtoObj1.hashCode()) assertEquals(nullProtoObj2.hashCode(), nullProtoObj2.hashCode()) assertEquals(arr1.hashCode(), arr1.hashCode()) assertEquals(arr2.hashCode(), arr2.hashCode()) assertNotEquals(obj1.hashCode(), obj2.hashCode()) assertNotEquals(obj1.hashCode(), nullProtoObj1.hashCode()) assertNotEquals(obj1.hashCode(), nullProtoObj2.hashCode()) assertNotEquals(obj1.hashCode(), arr1.hashCode()) assertNotEquals(obj1.hashCode(), arr2.hashCode()) assertNotEquals(obj2.hashCode(), obj1.hashCode()) assertNotEquals(obj2.hashCode(), nullProtoObj1.hashCode()) assertNotEquals(obj2.hashCode(), nullProtoObj2.hashCode()) assertNotEquals(obj2.hashCode(), arr1.hashCode()) assertNotEquals(obj2.hashCode(), arr2.hashCode()) assertNotEquals(nullProtoObj1.hashCode(), obj1.hashCode()) assertNotEquals(nullProtoObj1.hashCode(), obj2.hashCode()) assertNotEquals(nullProtoObj1.hashCode(), nullProtoObj2.hashCode()) assertNotEquals(nullProtoObj1.hashCode(), arr1.hashCode()) assertNotEquals(nullProtoObj1.hashCode(), arr2.hashCode()) assertNotEquals(nullProtoObj2.hashCode(), obj1.hashCode()) assertNotEquals(nullProtoObj2.hashCode(), obj2.hashCode()) assertNotEquals(nullProtoObj2.hashCode(), nullProtoObj1.hashCode()) assertNotEquals(nullProtoObj2.hashCode(), arr1.hashCode()) assertNotEquals(nullProtoObj2.hashCode(), arr2.hashCode()) assertNotEquals(arr1.hashCode(), obj1.hashCode()) assertNotEquals(arr1.hashCode(), obj2.hashCode()) assertNotEquals(arr1.hashCode(), nullProtoObj1.hashCode()) assertNotEquals(arr1.hashCode(), nullProtoObj2.hashCode()) assertNotEquals(arr1.hashCode(), arr2.hashCode()) assertNotEquals(arr2.hashCode(), obj1.hashCode()) assertNotEquals(arr2.hashCode(), obj2.hashCode()) assertNotEquals(arr2.hashCode(), nullProtoObj1.hashCode()) assertNotEquals(arr2.hashCode(), nullProtoObj2.hashCode()) assertNotEquals(arr2.hashCode(), arr1.hashCode()) } fun jsFunctionHashCode() { val fun1 = js("function() {}").unsafeCast() val fun2 = js("function() {}").unsafeCast() val randomObject = js("{}").unsafeCast() assertEquals(fun1.hashCode(), fun1.hashCode()) assertEquals(fun2.hashCode(), fun2.hashCode()) assertEquals(randomObject.hashCode(), randomObject.hashCode()) assertNotEquals(fun1.hashCode(), fun2.hashCode()) assertNotEquals(fun1.hashCode(), randomObject.hashCode()) assertNotEquals(fun2.hashCode(), fun1.hashCode()) assertNotEquals(fun2.hashCode(), randomObject.hashCode()) assertNotEquals(randomObject.hashCode(), fun1.hashCode()) assertNotEquals(randomObject.hashCode(), fun2.hashCode()) } fun jsNumberHashCode() { assertEquals(js("4").unsafeCast().hashCode(), js("4").unsafeCast().hashCode()) assertEquals(js("5").unsafeCast().hashCode(), js("5").unsafeCast().hashCode()) assertEquals(js("-4").unsafeCast().hashCode(), js("-4").unsafeCast().hashCode()) assertEquals(js("0").unsafeCast().hashCode(), js("-0").unsafeCast().hashCode()) assertEquals(js("NaN").unsafeCast().hashCode(), js("NaN").unsafeCast().hashCode()) assertEquals(js("Infinity").unsafeCast().hashCode(), js("Infinity").unsafeCast().hashCode()) assertEquals(js("-Infinity").unsafeCast().hashCode(), js("-Infinity").unsafeCast().hashCode()) assertNotEquals(js("-Infinity").unsafeCast().hashCode(), js("Infinity").unsafeCast().hashCode()) assertNotEquals(js("4").unsafeCast().hashCode(), js("5").unsafeCast().hashCode()) assertNotEquals(js("4").unsafeCast().hashCode(), js("-4").unsafeCast().hashCode()) assertNotEquals(js("5").unsafeCast().hashCode(), js("4").unsafeCast().hashCode()) assertNotEquals(js("5").unsafeCast().hashCode(), js("-4").unsafeCast().hashCode()) assertNotEquals(js("-4").unsafeCast().hashCode(), js("4").unsafeCast().hashCode()) assertNotEquals(js("-4").unsafeCast().hashCode(), js("5").unsafeCast().hashCode()) } fun jsBooleanHashCode() { assertEquals(js("true").unsafeCast().hashCode(), js("true").unsafeCast().hashCode()) assertEquals(js("false").unsafeCast().hashCode(), js("false").unsafeCast().hashCode()) assertNotEquals(js("true").unsafeCast().hashCode(), js("false").unsafeCast().hashCode()) } fun jsStringHashCode() { assertEquals(js("'Test'").unsafeCast().hashCode(), js("'Test'").unsafeCast().hashCode()) assertEquals(js("'Test1'").unsafeCast().hashCode(), js("'Test1'").unsafeCast().hashCode()) assertEquals(js("' Test'").unsafeCast().hashCode(), js("' Test'").unsafeCast().hashCode()) assertNotEquals(js("'Test'").unsafeCast().hashCode(), js("' Test'").unsafeCast().hashCode()) assertNotEquals(js("'Test'").unsafeCast().hashCode(), js("'Test1'").unsafeCast().hashCode()) assertNotEquals(js("'Test1'").unsafeCast().hashCode(), js("'Test'").unsafeCast().hashCode()) assertNotEquals(js("'Test1'").unsafeCast().hashCode(), js("' Test'").unsafeCast().hashCode()) assertNotEquals(js("' Test'").unsafeCast().hashCode(), js("'Test'").unsafeCast().hashCode()) assertNotEquals(js("' Test'").unsafeCast().hashCode(), js("'Test1'").unsafeCast().hashCode()) } fun jsBigIntHashCode() { assertEquals(js("BigInt(4)").unsafeCast().hashCode(), js("BigInt(4)").unsafeCast().hashCode()) assertEquals(js("BigInt(5)").unsafeCast().hashCode(), js("BigInt(5)").unsafeCast().hashCode()) assertEquals(js("BigInt(-4)").unsafeCast().hashCode(), js("BigInt(-4)").unsafeCast().hashCode()) assertNotEquals(js("BigInt(4)").unsafeCast().hashCode(), js("BigInt(5)").unsafeCast().hashCode()) assertNotEquals(js("BigInt(4)").unsafeCast().hashCode(), js("BigInt(-4)").unsafeCast().hashCode()) assertNotEquals(js("BigInt(5)").unsafeCast().hashCode(), js("BigInt(4)").unsafeCast().hashCode()) assertNotEquals(js("BigInt(5)").unsafeCast().hashCode(), js("BigInt(-4)").unsafeCast().hashCode()) assertNotEquals(js("BigInt(-4)").unsafeCast().hashCode(), js("BigInt(4)").unsafeCast().hashCode()) assertNotEquals(js("BigInt(-4)").unsafeCast().hashCode(), js("BigInt(5)").unsafeCast().hashCode()) } fun jsSymbolHashCode() { val symbol1 = js("Symbol()").unsafeCast() val symbol2 = js("Symbol()").unsafeCast() val symbol3 = js("Symbol.for('test')").unsafeCast() assertEquals(symbol1.hashCode(), symbol1.hashCode()) assertEquals(symbol2.hashCode(), symbol2.hashCode()) assertEquals(symbol3.hashCode(), symbol3.hashCode()) assertEquals(symbol3.hashCode(), js("Symbol.for('test')").unsafeCast().hashCode()) assertNotEquals(symbol1.hashCode(), symbol2.hashCode()) assertNotEquals(symbol1.hashCode(), symbol3.hashCode()) assertNotEquals(symbol1.hashCode(), js("Symbol.for('test')").unsafeCast().hashCode()) assertNotEquals(symbol2.hashCode(), symbol1.hashCode()) assertNotEquals(symbol2.hashCode(), symbol3.hashCode()) assertNotEquals(symbol2.hashCode(), js("Symbol.for('test')").unsafeCast().hashCode()) assertNotEquals(symbol3.hashCode(), symbol1.hashCode()) assertNotEquals(symbol3.hashCode(), symbol2.hashCode()) } fun box(): String { jsNullUndefinedHashCode() jsObjectHashCode() jsFunctionHashCode() jsNumberHashCode() jsBooleanHashCode() jsStringHashCode() jsBigIntHashCode() jsSymbolHashCode() return "OK" }