When by String constants:

Generate TABLESWITCH/LOOKUPSWITCH bytecode operation for when operator by String constants
This commit is contained in:
Denis Zharkov
2014-07-16 20:09:49 +04:00
committed by Evgeny Gerashchenko
parent 5a1c995b5c
commit d4cb822ee8
18 changed files with 511 additions and 75 deletions
@@ -0,0 +1,20 @@
import kotlin.test.assertEquals
fun foo(x : String) : String {
when (x) {
"abc" -> return "abc"
"efg", "ghi", "abc" -> return "efg_ghi"
else -> return "other"
}
}
fun box() : String {
assertEquals("abc", foo("abc"))
assertEquals("efg_ghi", foo("efg"))
assertEquals("efg_ghi", foo("ghi"))
assertEquals("other", foo("xyz"))
return "OK"
}
@@ -0,0 +1,24 @@
import kotlin.test.assertEquals
fun foo(x : String) : String {
assert("abz]".hashCode() == "aby|".hashCode())
when (x) {
"abz]" -> return "abz"
"ghi" -> return "ghi"
"aby|" -> return "aby"
"abz]" -> return "fail"
}
return "other"
}
fun box() : String {
assertEquals("abz", foo("abz]"))
assertEquals("aby", foo("aby|"))
assertEquals("ghi", foo("ghi"))
assertEquals("other", foo("xyz"))
return "OK"
}
@@ -0,0 +1,20 @@
import kotlin.test.assertEquals
fun foo(x : String) : String {
return when (x) {
"abc", "cde" -> "abc_cde"
"efg", "ghi" -> "efg_ghi"
else -> "other"
}
}
fun box() : String {
assertEquals("abc_cde", foo("abc"))
assertEquals("abc_cde", foo("cde"))
assertEquals("efg_ghi", foo("efg"))
assertEquals("efg_ghi", foo("ghi"))
assertEquals("other", foo("xyz"))
return "OK"
}
@@ -0,0 +1,23 @@
import kotlin.test.assertEquals
fun foo(x : String) : String {
assert("abz]".hashCode() == "aby|".hashCode())
when (x) {
"abz]", "cde" -> return "abz_cde"
"aby|", "ghi", "abz]" -> return "aby_ghi"
}
return "other"
}
fun box() : String {
assertEquals("abz_cde", foo("abz]"))
assertEquals("abz_cde", foo("cde"))
assertEquals("aby_ghi", foo("aby|"))
assertEquals("aby_ghi", foo("ghi"))
assertEquals("other", foo("xyz"))
return "OK"
}
@@ -0,0 +1,38 @@
import kotlin.test.assertEquals
fun foo1(x : String) : String {
when (x) {
"abc", "cde" -> return "abc_cde"
"efg", "ghi" -> return "efg_ghi"
}
return "other"
}
fun foo2(x : String) : String {
when (x) {
"abc", "cde" -> return "abc_cde"
"efg", "ghi" -> return "efg_ghi"
else -> return "other"
}
}
fun box() : String {
//foo1
assertEquals("abc_cde", foo1("abc"))
assertEquals("abc_cde", foo1("cde"))
assertEquals("efg_ghi", foo1("efg"))
assertEquals("efg_ghi", foo1("ghi"))
assertEquals("other", foo1("xyz"))
//foo2
assertEquals("abc_cde", foo2("abc"))
assertEquals("abc_cde", foo2("cde"))
assertEquals("efg_ghi", foo2("efg"))
assertEquals("efg_ghi", foo2("ghi"))
assertEquals("other", foo2("xyz"))
return "OK"
}