gs-predicate/src/test/scala/gs/predicate/v0/api/PredicateResultTests.scala

82 lines
2.5 KiB
Scala

package gs.predicate.v0.api
import Predicate.Result
import gs.predicate.v0.api.Predicate.Result.allMatch
import munit.FunSuite
class PredicateResultTests extends FunSuite:
test("should represent matched and missed") {
val r1 = Result.matched()
val r2 = Result.missed()
assertEquals(r1.unwrap(), true)
assertEquals(r1.isMatch, true)
assertEquals(r1.isMiss, false)
assertEquals(r2.unwrap(), false)
assertEquals(r2.isMatch, false)
assertEquals(r2.isMiss, true)
}
test("should instantiate given some Boolean value") {
val r1 = Result(true)
val r2 = Result(false)
assertEquals(r1.unwrap(), true)
assertEquals(r1.isMatch, true)
assertEquals(r1.isMiss, false)
assertEquals(r2.unwrap(), false)
assertEquals(r2.isMatch, false)
assertEquals(r2.isMiss, true)
}
test("should support logical AND") {
val r1 = Result.matched()
val r2 = Result.missed()
val r3 = Result.matched()
val r4 = Result.matched()
val r5 = Result.missed()
assertEquals(r1.and(r3).and(r4), Result.matched())
assertEquals(r1.and(r2).and(r4), Result.missed())
assertEquals(r5.and(r1).and(r4), Result.missed())
}
test("should support logical OR") {
val r1 = Result.matched()
val r2 = Result.missed()
val r3 = Result.matched()
val r4 = Result.matched()
val r5 = Result.missed()
assertEquals(r1.or(r3).or(r4), Result.matched())
assertEquals(r1.or(r2).or(r4), Result.matched())
assertEquals(r5.or(r1).or(r4), Result.matched())
assertEquals(r2.or(r5), Result.missed())
}
test("should support all (true if all results are true)") {
val r1 = Result.matched()
val r2 = Result.missed()
val r3 = Result.matched()
val r4 = Result.matched()
val r5 = Result.missed()
val l1 = List(r1, r3, r4)
val l2 = List(r1, r2, r3, r4, r5)
val l3 = List()
assertEquals(l1.allMatch(), Result.matched())
assertEquals(l2.allMatch(), Result.missed())
assertEquals(l3.allMatch(), Result.missed())
}
test("should support any (true if any results are true)") {
val r1 = Result.matched()
val r2 = Result.missed()
val r3 = Result.matched()
val r4 = Result.matched()
val r5 = Result.missed()
val l1 = List(r1, r3, r4)
val l2 = List(r1, r2, r3, r4, r5)
val l3 = List(r2, r5)
val l4 = List.empty[Result]
assertEquals(l1.anyMatch(), Result.matched())
assertEquals(l2.anyMatch(), Result.matched())
assertEquals(l3.anyMatch(), Result.missed())
assertEquals(l4.anyMatch(), Result.missed())
}