blob: c8f4a72e12bd43f2019d8db421682e19688dd2fd [file] [log] [blame]
// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata.typeargument_app
import com.android.tools.r8.kotlin.metadata.typeargument_lib.CoVariant
import com.android.tools.r8.kotlin.metadata.typeargument_lib.ContraVariant
import com.android.tools.r8.kotlin.metadata.typeargument_lib.Invariant
import com.android.tools.r8.kotlin.metadata.typeargument_lib.SomeClass
import com.android.tools.r8.kotlin.metadata.typeargument_lib.asList
import com.android.tools.r8.kotlin.metadata.typeargument_lib.asObfuscatedClass
import com.android.tools.r8.kotlin.metadata.typeargument_lib.unBoxAndBox
import com.android.tools.r8.kotlin.metadata.typeargument_lib.unboxAndPutInBox
import com.android.tools.r8.kotlin.metadata.typeargument_lib.update
class SomeSubClass(val x : Int) : SomeClass(), Comparable<SomeClass> {
override fun compareTo(other: SomeClass): Int {
if (other !is SomeSubClass) {
return -1;
}
return x.compareTo(other.x);
}
}
fun testInvariant() {
val subtype1 = SomeSubClass(42)
val subtype2 = SomeSubClass(1)
val inv = Invariant<SomeSubClass, String>("Hello World!")
println(inv.classGenerics(subtype1).x)
println(inv.funGenerics(subtype2).x)
println(inv.funGenericsWithUpperBound(subtype1).x)
println(inv.funGenericsWithUpperBounds(subtype1, subtype2).x)
println(inv.mixedGenerics(subtype2).x)
}
fun testCoVariant() {
println(CoVariant(42).classGenerics().t)
}
fun testContraVariant() {
ContraVariant<Number>().classGenerics(42)
}
fun testExtension() {
println(CoVariant(42).unBoxAndBox().t)
println(CoVariant(1).update(42).t)
println(CoVariant(1).unboxAndPutInBox(CoVariant(42)).t)
println(CoVariant(42).asList().t.get(0))
val asList = CoVariant(42).asList(1, 2)
println(asList.t.get(0))
println(asList.t.get(1))
println(CoVariant(7).asObfuscatedClass().t.get(0).get(0).x)
}
fun main() {
testInvariant()
testCoVariant()
testContraVariant();
testExtension()
}