| class MyNumber(val i: Int) { | |
| operator fun inc(): MyNumber = MyNumber(i+1) | |
| } | |
| class MNR(var ref: MyNumber) {} | |
| fun test1() : Boolean { | |
| var m = MyNumber(42) | |
| m++ | |
| if (m.i != 43) return false | |
| return true | |
| } | |
| fun test2() : Boolean { | |
| var m = MyNumber(44) | |
| var m2 = m++ | |
| if (m2.i != 44) return false | |
| if (m.i != 45) return false | |
| return true | |
| } | |
| fun test3() : Boolean { | |
| var mnr = MNR(MyNumber(42)) | |
| mnr.ref++ | |
| if (mnr.ref.i != 43) return false | |
| return true | |
| } | |
| fun test4() : Boolean { | |
| var mnr = MNR(MyNumber(42)) | |
| val m3 = mnr.ref++ | |
| if (m3.i != 42) return false | |
| return true | |
| } | |
| fun test5() : Boolean { | |
| var mnr = Array<MyNumber>(2,{MyNumber(42)}) | |
| mnr[0]++ | |
| if (mnr[0].i != 43) return false | |
| return true | |
| } | |
| fun test6() : Boolean { | |
| var mnr = Array<MyNumber>(2,{it -> MyNumber(42-it)}) | |
| mnr[1] = mnr[0]++ | |
| if (mnr[0].i != 43) return false | |
| if (mnr[1].i != 42) return false | |
| return true | |
| } | |
| class MyArrayList<T>() { | |
| private var value17: T? = null | |
| private var value39: T? = null | |
| operator fun get(index: Int): T { | |
| if (index == 17) return value17!! | |
| if (index == 39) return value39!! | |
| throw Exception() | |
| } | |
| operator fun set(index: Int, value: T): T? { | |
| if (index == 17) value17 = value | |
| else if (index == 39) value39 = value | |
| else throw Exception() | |
| return null | |
| } | |
| } | |
| fun test7() : Boolean { | |
| var mnr = MyArrayList<MyNumber>() | |
| mnr[17] = MyNumber(42) | |
| mnr[17]++ | |
| if (mnr[17].i != 43) return false | |
| return true | |
| } | |
| fun test8() : Boolean { | |
| var mnr = MyArrayList<MyNumber>() | |
| mnr[17] = MyNumber(42) | |
| mnr[39] = mnr[17]++ | |
| if (mnr[17].i != 43) return false | |
| if (mnr[39].i != 42) return false | |
| return true | |
| } | |
| fun box() : String { | |
| var m = MyNumber(42) | |
| if (!test1()) return "fail test 1" | |
| if (!test2()) return "fail test 2" | |
| if (!test3()) return "fail test 3" | |
| if (!test4()) return "fail test 4" | |
| if (!test5()) return "fail test 5" | |
| if (!test6()) return "fail test 6" | |
| if (!test7()) return "fail test 7" | |
| if (!test8()) return "fail test 8" | |
| ++m | |
| if (m.i != 43) return "fail 0" | |
| var m1 = ++m | |
| if (m1.i != 44) return "fail 3" | |
| if (m.i != 44) return "fail 4" | |
| return "OK" | |
| } |