import collection._
import mutable.Buffer
import parallel.immutable.ParVector
import parallel.mutable.ParArray
import reflect.ClassTag
object Test {
def printResult[A,B](msg: String, obj: A, expected: B)(implicit tag: ClassTag[A], tag2: ClassTag[B]) = {
print(" :" + msg +": ")
val isArray = obj match {
case x: Array[Int] => true
case _ => false
}
val expectedEquals =
if(isArray) obj.asInstanceOf[Array[Int]].toSeq == expected.asInstanceOf[Array[Int]].toSeq
else obj == expected
val tagEquals = tag == tag2
if(expectedEquals && tagEquals) print("OK")
else print("FAILED")
if(!expectedEquals) print(", " + obj + " != " + expected)
if(!tagEquals) print(", " + tag + " != " + tag2)
println("")
}
val testVector = Vector(1,2,3)
val testBuffer = Buffer(1,2,3)
val testGenSeq = GenSeq(1,2,3)
val testSeq = Seq(1,2,3)
val testStream = Stream(1,2,3)
val testArray = Array(1,2,3)
val testParVector = ParVector(1,2,3)
val testParArray = ParArray(1,2,3)
def testConversion[A: ClassTag](name: String, col: => GenTraversableOnce[A]): Unit = {
val tmp = col
println("-- Testing " + name + " ---")
printResult("[Direct] Vector ", col.toVector, testVector)
printResult("[Copy] Vector ", col.convertTo[Vector], testVector)
printResult("[Direct] Buffer ", col.toBuffer, testBuffer)
printResult("[Copy] Buffer ", col.convertTo[Buffer], testBuffer)
printResult("[Direct] GenSeq ", col.toSeq, testGenSeq)
printResult("[Copy] GenSeq ", col.convertTo[GenSeq], testGenSeq)
printResult("[Copy] Seq ", col.convertTo[Seq], testSeq)
printResult("[Direct] Stream ", col.toStream, testStream)
printResult("[Copy] Stream ", col.convertTo[Stream], testStream)
printResult("[Direct] Array ", col.toArray, testArray)
printResult("[Copy] Array ", col.convertTo[Array], testArray)
printResult("[Copy] ParVector", col.convertTo[ParVector], testParVector)
printResult("[Copy] ParArray ", col.convertTo[ParArray], testParArray)
}
def main(args: Array[String]): Unit = {
testConversion("iterator", (1 to 3).iterator)
testConversion("Vector", Vector(1,2,3))
testConversion("List", List(1,2,3))
testConversion("Buffer", Buffer(1,2,3))
testConversion("ParVector", ParVector(1,2,3))
testConversion("ParArray", ParArray(1,2,3))
testConversion("Set", Set(1,2,3))
testConversion("SetView", Set(1,2,3).view)
testConversion("BufferView", Buffer(1,2,3).view)
}
}