|
Scala example source code file (TraverseTest.scala)
The TraverseTest.scala Scala example source codepackage scalaz import org.scalacheck.Prop.forAll object TraverseTest extends SpecLite { import scalaz._ import scalaz.State._ import std.AllInstances._ import std.AllFunctions._ import syntax.traverse._ "list" should { // ghci> import Data.Traversable // ghci> import Control.Monad.Writer // ghci> let (|>) = flip ($) // ghci> traverse (\x -> writer (x, x)) ["1", "2", "3"] |> runWriter // (["1","2","3"],"123") "apply effects in order" in { val s: Writer[String, List[Int]] = List(1, 2, 3).traverseU(x => Writer(x.toString, x)) s.run must_===(("123", List(1, 2, 3))) } "indexed" ! forAll { xs: List[Byte] => Traverse[List].indexed(xs) must_=== xs.zipWithIndex.map{case (a, b) => (b, a)} } "traverse through option effect" in { val s: Option[List[Int]] = List(1, 2, 3).traverseU((x: Int) => if (x < 3) some(x) else none) s must_===(none[List[Int]]) } "traverse int function as monoidal applicative" in { val s: Int = List(1, 2, 3) traverseU {_ + 1} s must_===(9) } "not blow the stack" in { val s: Option[List[Int]] = List.range(0, 32 * 1024).traverseU(x => some(x)) s.map(_.take(3)) must_===(some(List(0, 1, 2))) } "state traverse agrees with regular traverse" in { var N = 10 List.range(0,N).traverseS(x => modify((x: Int) => x+1))(0) must_=== ( List.range(0,N).traverseU(x => modify((x: Int) => x+1)).apply(0)) } "state traverse does not blow stack" in { val N = 10000 val s = List.range(0,N).traverseS(x => modify((x: Int) => x+1)) s.exec(0) must_=== (N) } } "stream" should { "apply effects in order" in { val s: Writer[String, Stream[Int]] = Stream(1, 2, 3).traverseU(x => Writer(x.toString, x)) s.run must_===(("123", Stream(1, 2, 3))) } // ghci> import Data.Traversable // ghci> traverse (\x -> if x < 3 then Just x else Nothing) [1 ..] // Nothing "allow partial traversal" in { val stream = Stream.from(1) val s: Option[Stream[Int]] = stream.traverseU((x: Int) => if (x < 3) some(x) else none) s must_===(none) } } "combos" should { "traverse with monadic join" in { val s: Writer[String, List[Int]] = List(1, 2, 3).traverseM[Writer[String, ?], Int](x => Writer(x.toString, List(x, x * 2))) s.run must_===(("123", List(1, 2, 2, 4, 3, 6))) } } "derived functions" should { "sequence" in { some(List(1, 2, 3)).sequence must_===(List(some(1), some(2), some(3))) List(some(1), some(2)).sequence must_===(some(List(1, 2))) List(some(1), none[Int]).sequence must_===(none) val states: List[State[Int, Int]] = List(State.modify[Int](_ + 1).map(_ => 0), for { i <- State.get[Int] _ <- State.put(i + 1) } yield i) val state: State[Int, List[Int]] = states.sequenceU state.run(0) must_===(2, (List(0, 1))) } "reverse" in { Traverse[List].reverse(List(1, 2, 3)) must_===(List(3, 2, 1)) } "mapAccumL/R" ! forAll { val L = Traverse[List]; import L.traverseSyntax._ (l: List[Int]) => { val (acc, l2) = l.mapAccumL(List[Int]())((acc,a) => (a :: acc, a)) val (acc2, l3) = l.mapAccumR(List[Int]())((acc,a) => (a :: acc, a)) acc == l.reverse && l2 == l && acc2 == l3 && l3 == l } } "double reverse" ! forAll { (is: List[Int]) => import syntax.monoid._ Endo(Traverse[List].reverse[Int]).multiply(2).apply(is) must_===(is) } } } Other Scala examples (source code examples)Here is a short list of links related to this Scala TraverseTest.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.