| // TARGET_BACKEND: JS_IR, JS_IR_ES6 | |
| // FILE: lib.kt | |
| package foo | |
| inline fun String.charCodeAt(i: Int): Int = asDynamic().charCodeAt(i) | |
| // Because String in JS doesn't have hashCode method | |
| fun String.myHashCode(): Int { | |
| var hash = 0 | |
| for (i in 0..length - 1) { | |
| hash = 31 * hash + charCodeAt(i) | |
| } | |
| return hash | |
| } | |
| class Foo(val name: String) { | |
| override fun equals(other: Any?): Boolean { | |
| if (other is Foo) return name == other.name | |
| return this === other | |
| } | |
| override fun hashCode(): Int = name.myHashCode() | |
| override fun toString(): String = "Foo($name)" | |
| } | |
| // FILE: main.kt | |
| package foo | |
| fun box(): String { | |
| val james = Foo("James") | |
| val anotherJames = Foo("James") | |
| val max = Foo("Max") | |
| assertEquals(true, james == anotherJames) | |
| assertEquals(false, james == max) | |
| assertEquals("James".myHashCode(), james.hashCode()) | |
| assertEquals("Max".myHashCode(), max.hashCode()) | |
| assertEquals("Foo(James)", james.toString()) | |
| assertEquals("Foo(Max)", max.toString()) | |
| return "OK" | |
| } |