scala/ScalaBook/chapter-11/test-iter


object Case {
  import scalabook.iter._
  import java.io.File

  val start = new File("1")
  val processor = (file: File) => { println(file.getName) }
  val provider = new FileChildrenProvider

  ////////// ITERATOR-based //////////////
  // provider could be made an implicit parameter, so that we
  // do not repeat it al the time
  val dfsPre = new PreOrderDFS(start, provider)
  val dfsPost = new PostOrderDFS(start, provider)
  val bfs = new BFS(start, provider)

  //////////// TRAVERSABLE-based ///////////////////
  val tprovider = FileTraversableProvider
  val tdfsPre = new PreOrderDFST(start, tprovider)
  val tdfsPost = new PostOrderDFST(start, tprovider)


  def run(msg: String, itemName: String, item: Either[NodeIteratorSkeleton[File], Traversable[File]]) {
    def sep1 = println("=" * (msg.length * 2))
    def sep2 = println("-" * (msg.length * 2))

    println
    sep1
    println(msg)
    sep2
    item.fold(
      _.foreach(f => println(f.getName)),
      _.foreach(f => println(f.getName)))
    //item.foreach(f => println(f.getName))
    sep2
    printf("%s = %s", itemName,
           item.fold(
             _.toString(_.getName),
             _.toString(_.getName)))
    println
    sep1
    println
  }
}

import Case._

run("Depth-FS (preorder)", "dfsPre", Left(dfsPre))
run("Depth-FS (postorder)", "dfsPost", Left(dfsPost))
run("Breadth-FS", "bfs", Left(bfs))

run("Depth-FS (preorder) (trav)", "tdfsPre", Right(tdfsPre))
run("Depth-FS (postorder) (trav)", "tdfsPost", Right(tdfsPost))