| var log = "" |
| |
| fun logged(value: String) = |
| value.also { log += value } |
| |
| object A { |
| var x = "" |
| var gets = "" |
| var sets = "" |
| |
| operator fun get(vararg va: String): String { |
| for (s in va) { |
| gets += s |
| } |
| log += "get;" |
| return x |
| } |
| |
| operator fun set(vararg va: String, value: String) { |
| for (s in va) { |
| sets += s |
| } |
| log += "set;" |
| x = value |
| } |
| } |
| |
| operator fun String.inc() = this + logged("inc;") |
| |
| fun box(): String { |
| A.x = "start;" |
| val xx = A[logged("1;"), logged("2;"), logged("3;")]++ |
| if (xx != "start;") return "Failed xx: $xx" |
| if (A.x != "start;inc;") return "Failed A.x: ${A.x}" |
| if (A.gets != "1;2;3;") return "Failed A.gets: ${A.gets}" |
| if (A.sets != "1;2;3;") return "Failed A.sets: ${A.sets}" |
| if (log != "1;2;3;get;inc;set;") return "Failed log: $log" |
| return "OK" |
| } |