abstract class A : SortedMap<Boolean, Boolean> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

abstract class B : SortedMap<Boolean, Boolean> {
  override val values: MutableCollection<Boolean>
    field = values
    override get

  override val size: Int
    field = size
    override get

  constructor(values: MutableCollection<Boolean>, size: Int) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override operator fun get(key: Boolean?): Boolean? {
    return true
  }

  override fun remove(key: Boolean?): Boolean? {
    return true
  }

}

fun test(a: A, b: B) {
  a.<get-size>() /*~> Unit */
  a.set<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>(key = true, value = true)
  a.set<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>(key = null, value = null)
  a.get(key = true) /*~> Unit */
  a.get(key = null) /*~> Unit */
  a.remove(key = null) /*~> Unit */
  a.remove(key = true) /*~> Unit */
  b.<get-size>() /*~> Unit */
  b.<get-values>() /*~> Unit */
  b.set<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>(key = false, value = false)
  b.set<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>(key = null, value = null)
  b.remove(key = null) /*~> Unit */
  b.remove(key = true) /*~> Unit */
  b.get(key = null) /*~> Unit */
  b.get(key = true) /*~> Unit */
}
