| annotation class ValueContainer | |
| @ValueContainer | |
| class StringProperty(var v: String) { | |
| fun assign(v: String) { | |
| this.v = v | |
| } | |
| fun assign(v: StringProperty) { | |
| this.v = v.get() | |
| } | |
| fun get(): String { | |
| return v | |
| } | |
| } | |
| data class Task(val input: StringProperty) | |
| var result = "Fail" | |
| operator fun StringProperty.plusAssign(v: String) { | |
| result = v | |
| } | |
| operator fun StringProperty.plusAssign(v: StringProperty) { | |
| result = v.get() | |
| } | |
| operator fun StringProperty.set(i: Int, v: String) { | |
| result = v | |
| } | |
| operator fun StringProperty.set(i: Int, v: StringProperty) { | |
| result = v.get() | |
| } | |
| operator fun StringProperty.set(i: Int, j: Int, v: String) { | |
| result = v | |
| } | |
| operator fun StringProperty.set(i: Int, j: Int, v: StringProperty) { | |
| result = v.get() | |
| } | |
| operator fun StringProperty.set(i: Int, j: Int, k: Int, v: String) { | |
| result = v | |
| } | |
| operator fun StringProperty.set(i: Int, j: Int, k: Int, v: StringProperty) { | |
| result = v.get() | |
| } | |
| operator fun StringProperty.compareTo(v: String): Int { | |
| result = v | |
| return 0 | |
| } | |
| operator fun StringProperty.compareTo(v: StringProperty): Int { | |
| result = v.get() | |
| return 0 | |
| } | |
| fun box(): String { | |
| val task = Task(StringProperty("Fail")) | |
| // Double check that assign is correctly setup | |
| task.input = "OK" | |
| if (task.input.get() != "OK") return task.input.get() | |
| task?.input = "OK" | |
| if (task.input.get() != "OK") return task.input.get() | |
| result = "Fail" | |
| task.input += "OK" | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input += StringProperty("OK") | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input >= "OK" | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input >= StringProperty("OK") | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input <= "OK" | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input <= StringProperty("OK") | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input[0] = "OK" | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input[0] = StringProperty("OK") | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input[0, 0] = "OK" | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input[0, 0] = StringProperty("OK") | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input[0, 0, 0] = "OK" | |
| if (result != "OK") return result | |
| result = "Fail" | |
| task.input[0, 0, 0] = StringProperty("OK") | |
| if (result != "OK") return result | |
| return result | |
| } |