Make Array.indices extension property, move to stdlib

This is not something that needs to be intrinsified. Note that compiler
optimizations are still possible and the fact whether 'indices' is a member or
an extension is irrelevant to the optimizer
This commit is contained in:
Alexander Udalov
2014-11-14 20:56:27 +03:00
parent 36a9a99b4f
commit 93696ff9bd
22 changed files with 234 additions and 294 deletions
@@ -0,0 +1,9 @@
fun box(): String {
val a = Array<Int>(5, {it})
val x = a.indices.iterator()
while (x.hasNext()) {
val i = x.next()
if (a[i] != i) return "Fail $i ${a[i]}"
}
return "OK"
}
@@ -0,0 +1,9 @@
fun box(): String {
val a = CharArray(5)
val x = a.indices.iterator()
while (x.hasNext()) {
val i = x.next()
if (a[i] != 0.toChar()) return "Fail $i ${a[i]}"
}
return "OK"
}
@@ -0,0 +1,13 @@
fun box() : String {
val a = arrayOfNulls<String>(3)
a[0] = "a"
a[1] = "b"
a[2] = "c"
var result = 0
for(i in a.indices) {
result += i
}
if (result != 3) return "FAIL"
return "OK"
}
@@ -0,0 +1,34 @@
fun findPairless(a : IntArray) : Int {
@loop for (i in a.indices) {
for (j in a.indices) {
if (i != j && a[i] == a[j]) continue@loop
}
return a[i]
}
return -1
}
fun hasDuplicates(a : IntArray) : Boolean {
var duplicate = false
@loop for (i in a.indices) {
for (j in a.indices) {
if (i != j && a[i] == a[j]) {
duplicate = true
break@loop
}
}
}
return duplicate
}
fun box() : String {
val a = IntArray(5)
a[0] = 0
a[1] = 0
a[2] = 1
a[3] = 1
a[4] = 5
if(findPairless(a) != 5) return "fail"
return if(hasDuplicates(a)) "OK" else "fail"
}