| // 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" |
| } |