abstract class A : HashSet<Any>, SortedSet<Any> {
  constructor() /* primary */ {
    super/*HashSet*/<@FlexibleNullability Any?>()
    /* <init>() */

  }

  override fun spliterator(): Spliterator<Any> {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

}

abstract class B : HashSet<Any>, SortedSet<Any> {
  constructor() /* primary */ {
    super/*HashSet*/<@FlexibleNullability Any?>()
    /* <init>() */

  }

  override fun first(): Any {
    return 1
  }

  override fun remove(element: Any): Boolean {
    return true
  }

  override fun spliterator(): Spliterator<Any> {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

}

abstract class C : ArrayList<Any>, SortedSet<Any> {
  constructor() /* primary */ {
    super/*ArrayList*/<@FlexibleNullability Any?>()
    /* <init>() */

  }

  override fun spliterator(): Spliterator<Any> {
    TODO(reason = "Not yet implemented")
  }

}

fun test(a: A, b: B, c: C) {
  a.<get-size>() /*~> Unit */
  a.first() /*~> Unit */
  a.last() /*~> Unit */
  a.add(element = 1) /*~> Unit */
  a.add(element = null) /*~> Unit */
  a.remove(element = 1) /*~> Unit */
  a.remove(element = null) /*~> Unit */
  a.spliterator() /*~> Unit */
  b.<get-size>() /*~> Unit */
  b.first() /*~> Unit */
  b.last() /*~> Unit */
  b.add(element = 1) /*~> Unit */
  b.add(element = null) /*~> Unit */
  b.remove(element = 1) /*~> Unit */
  b.remove<Any?>(element = null) /*~> Unit */
  b.spliterator() /*~> Unit */
  c.<get-size>() /*~> Unit */
  c.first() /*~> Unit */
  c.last() /*~> Unit */
  c.add(element = 1) /*~> Unit */
  c.add(element = null) /*~> Unit */
  c.remove(element = 1) /*~> Unit */
  c.remove(element = null) /*~> Unit */
  c.spliterator() /*~> Unit */
  c.removeAt(p0 = 1) /*~> Unit */
}
