object Test {
import collection.{ immutable, mutable, generic }
def TheOneTrueCBF = collection.IndexedSeq.ReusableCBF
val cbf1 = implicitly[generic.CanBuildFrom[immutable.Vector[Int], Int, collection.IndexedSeq[Int]]]
val cbf2 = implicitly[generic.CanBuildFrom[immutable.IndexedSeq[Int], Int, collection.IndexedSeq[Int]]]
val cbf3 = implicitly[generic.CanBuildFrom[collection.IndexedSeq[Int], Int, collection.IndexedSeq[Int]]]
val cbf4 = implicitly[generic.CanBuildFrom[immutable.Vector[Int], Int, immutable.IndexedSeq[Int]]]
val cbf5 = implicitly[generic.CanBuildFrom[immutable.Vector[Int], Int, immutable.Vector[Int]]]
val cbf6 = implicitly[generic.CanBuildFrom[immutable.IndexedSeq[Int], Int, immutable.IndexedSeq[Int]]]
def check[C](v: C) = {
assert(v == Vector(1, 2, 3, 4))
assert(v.isInstanceOf[Vector[_]])
}
def checkRealMccoy(x: AnyRef) = {
assert(x eq TheOneTrueCBF, cbf1)
}
val v = immutable.Vector(1, 2, 3)
val iiv: immutable.IndexedSeq[Int] = immutable.Vector(1, 2, 3)
val iv: IndexedSeq[Int] = immutable.Vector(1, 2, 3)
def main(args: Array[String]): Unit = {
List(cbf1, cbf2, cbf3, cbf4, cbf5, cbf6) foreach checkRealMccoy
check(v.:+(4)(cbf1))
check(v.:+(4)(cbf2))
check(v.:+(4)(cbf3))
check(iiv.:+(4)(cbf2))
check(iiv.:+(4)(cbf3))
check(iv.:+(4)(cbf3))
}
}