|
Scala example source code file (ValidationTest.scala)
The ValidationTest.scala Scala example source codepackage scalaz import scalaz.scalacheck.ScalazProperties._ import scalaz.scalacheck.ScalazArbitrary._ import org.scalacheck.Prop.forAll object ValidationTest extends SpecLite { import std.AllInstances._ checkAll("Validation", order.laws[Validation[Int, Int]]) type ValidationInt[A] = Validation[Int, A] checkAll("Validation", semigroup.laws[ValidationInt[Int]]) checkAll("Validation", monoid.laws[ValidationInt[Int]]) checkAll("Validation", plus.laws[ValidationInt]) checkAll("Validation", applicative.laws[ValidationInt]) checkAll("Validation", traverse.laws[ValidationInt]) checkAll("Validation", bifunctor.laws[Validation]) checkAll("Validation", bitraverse.laws[Validation]) checkAll("Validation", associative.laws[Validation]) "fpoint and point" in { import syntax.applicative._ import std.AllInstances._ val vi = Validation.success[String, Int](0) val voi: Validation[String, Option[Int]] = vi map (Some(_)) val ovi: Option[Validation[String, Int]] = vi.point[Option] voi must_===(Validation.success[String, Option[Int]](Some(0))) ovi must_===(Some(vi)) { import syntax.functor._ val voi2: Validation[String, Option[Int]] = vi.fpoint[Option] voi2 must_===(Validation.success[String, Option[Int]](Some(0))) println("hi") } } "show" in { import syntax.show._ Validation.success[String, Int](0).shows must_===("Success(0)") Validation.failure[String, Int]("fail").shows must_===("Failure(\"fail\")") } "ap2" should { "accumulate failures in order" in { import syntax.show._ val fail1 = Failure("1").toValidationNel val fail2 = Failure("2").toValidationNel val f = (_:Int) + (_:Int) Apply[ValidationNel[String, ?]].ap2(fail1, fail2)(Success(f)).shows must_===("""Failure(["1","2"])""") } } "apply2" should { "accumulate failures in order" in { import syntax.show._ val fail1 = Failure("1").toValidationNel val fail2 = Failure("2").toValidationNel val f = (_:Int) + (_:Int) Apply[ValidationNel[String, ?]].apply2(fail1, fail2)(f).shows must_===("""Failure(["1","2"])""") } } "findSuccess" should { import syntax.show._ "accumulate failures in order" in { val fail1 = Validation.failure[String, Int]("1").toValidationNel val fail2 = Validation.failure[String, Int]("2").toValidationNel (fail1 findSuccess fail2).shows must_===("""Failure(["1","2"])""") } "return first success" in { val succ = Validation.success[String, Int](1).toValidationNel val fail = Validation.failure[String, Int]("2").toValidationNel (succ findSuccess fail).shows must_===(succ.shows) (fail findSuccess succ).shows must_===(succ.shows) } } "excepting" in { import syntax.std.string._ import syntax.validation._ def errmsg(i: Int) = "Int must be positive: " + i (List("1", "2", "3") map (_.parseInt.leftMap(_.toString) excepting { case i if i < 0 => errmsg(i) })) must_===(List(1.success[String], 2.success[String], 3.success[String])) (List("1", "-2", "3") map (_.parseInt.leftMap(_.toString) excepting { case i if i < 0 => errmsg(i) })) must_===(List(1.success[String], errmsg(-2).failure[Int], 3.success[String])) implicit val ShowAny: Show[Any] = Show.showA; implicit val EqualAny: Equal[Any] = Equal.equalA def errmsgA(i: Int): Any = errmsg(i) (List("1", "2", "3") map (_.parseInt.leftMap(_.toString) excepting { case i if i < 0 => errmsgA(i) })) must_===(List(1.success[Any], 2.success[Any], 3.success[Any])) (List("1", "-2", "3") map (_.parseInt.leftMap(_.toString) excepting { case i if i < 0 => errmsgA(i) })) must_===(List(1.success[Any], errmsgA(-2).failure[Int], 3.success[Any])) } "ensure" in { import syntax.std.string._ import syntax.validation._ List("1", "2") map (_.parseInt.leftMap(_.toString).ensure("Fail")(_ >= 0)) must_===(List(1.success[String], 2.success[String])) List("1", "-2") map (_.parseInt.leftMap(_.toString).ensure("Fail")(_ >= 0)) must_===(List(1.success[String], "Fail".failure[Int])) } "toMaybe" ! forAll { x: Validation[String, Int] => val m = x.toMaybe if (x.isSuccess) m.isJust else m.isEmpty } object instances { def show[E: Show, A: Show] = Show[Validation[E, A]] def equal[E: Equal, A: Equal] = Equal[Validation[E, A]] def order[E: Order, A: Order] = Order[Validation[E, A]] def semigroup[E: Semigroup, A: Semigroup] = Semigroup[Validation[E, A]] def applicative[E: Semigroup] = Applicative[Validation[E, ?]] def traverse[E: Semigroup] = Traverse[Validation[E, ?]] def plus[E: Semigroup] = Plus[Validation[E, ?]] def bitraverse = Bitraverse[Validation] // checking absence of ambiguity def equal[E: Order, A: Order] = Equal[Validation[E, A]] } } Other Scala examples (source code examples)Here is a short list of links related to this Scala ValidationTest.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.