/*
 * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
 * that can be found in the LICENSE file.
 */
// WITH_STDLIB

import kotlin.test.*

// non-generic interface, generic impl, vtable call + interface call
open class A<T> {
    open var size: T = 56 as T
}

interface C {
    var size: Int
}

open class B : C, A<Int>()

open class D: B() {
    override var size: Int = 117
}

fun <T> foo(a: A<T>) {
    a.size = 42 as T
}

fun box(): String {
    val b = B()

    foo(b)
    if (b.size != 42) return "fail 1"
    val d = D()
    if (d.size != 117) return "fail 2"
    foo(d)
    if (d.size != 42) return "fail 3"

    return "OK"
}
