blob: 654c52b08aa22fdb23b782f993c2668b0f5a9554 [file] [log] [blame]
interface IntConvertible {
fun toInt(): Int
}
fun <FooTP> foo(init: Int, v: FooTP, l: Int.(FooTP) -> Int) = init.l(v)
fun <BarTP : IntConvertible> computeSum(array: Array<BarTP>) = foo(0, array) {
var res = this
for (element in it) res += element.toInt()
res
}
class N(val v: Int) : IntConvertible {
override fun toInt() = v
}
interface Grouping<GroupingInputTP, out GroupingOutputTP> {
fun keyOf(element: GroupingInputTP): GroupingOutputTP
}
fun <GroupingByTP> groupingBy(keySelector: (Char) -> GroupingByTP): Grouping<Char, GroupingByTP> {
fun <T> foo(p0: T, p1: GroupingByTP) {}
foo(0, keySelector('a'))
class A<T>(p0: T, p1: GroupingByTP) {}
A(0, keySelector('a'))
return object : Grouping<Char, GroupingByTP> {
override fun keyOf(element: Char): GroupingByTP = keySelector(element)
}
}
class Delft<DelftTP> {
fun getComparator(other: DelftTP) = { this == other }
}
fun box(): String {
if (computeSum(arrayOf(N(2), N(14))) != 16) return "Fail1"
if (groupingBy { it }.keyOf('A') != 'A') return "Fail2"
return "OK"
}