From 936401370d1af3d74e70c3d68a1b1a626bfa40ca Mon Sep 17 00:00:00 2001 From: Andy Scott Date: Mon, 30 Oct 2017 15:50:10 -0700 Subject: [PATCH] Add Validated.cond and Validated.condNel --- core/src/main/scala/cats/data/Validated.scala | 14 ++++++++++++++ .../src/test/scala/cats/tests/ValidatedSuite.scala | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/core/src/main/scala/cats/data/Validated.scala b/core/src/main/scala/cats/data/Validated.scala index e0b000e8d0..4cc8d56884 100644 --- a/core/src/main/scala/cats/data/Validated.scala +++ b/core/src/main/scala/cats/data/Validated.scala @@ -587,4 +587,18 @@ private[data] trait ValidatedFunctions { * Converts an `Ior[A, B]` to a `Validated[A, B]`. */ def fromIor[A, B](ior: Ior[A, B]): Validated[A, B] = ior.fold(invalid, valid, (_, b) => valid(b)) + + /** + * If the condition is satisfied, return the given `B` as valid, + * otherwise return the given `A` as invalid. + */ + final def cond[A, B](test: Boolean, b: => B, a: => A): Validated[A, B] = + if (test) valid(b) else invalid(a) + + /** + * If the condition is satisfied, return the given `B` as valid NEL, + * otherwise return the given `A` as invalid NEL. + */ + final def condNel[A, B](test: Boolean, b: => B, a: => A): ValidatedNel[A, B] = + if (test) validNel(b) else invalidNel(a) } diff --git a/tests/src/test/scala/cats/tests/ValidatedSuite.scala b/tests/src/test/scala/cats/tests/ValidatedSuite.scala index c52720f4c5..137311a05f 100644 --- a/tests/src/test/scala/cats/tests/ValidatedSuite.scala +++ b/tests/src/test/scala/cats/tests/ValidatedSuite.scala @@ -267,4 +267,16 @@ class ValidatedSuite extends CatsSuite { } } } + + test("cond consistent with Either.cond + toValidated") { + forAll { (cond: Boolean, s: String, i: Int) => + Validated.cond(cond, s, i) should === (Either.cond(cond, s, i).toValidated) + } + } + + test("condNel consistent with Either.cond + toValidatedNel") { + forAll { (cond: Boolean, s: String, i: Int) => + Validated.condNel(cond, s, i) should === (Either.cond(cond, s, i).toValidatedNel) + } + } }