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()) }