package fj.data; import fj.F; import fj.function.Booleans; import org.junit.Assert; import org.junit.Test; import static fj.P1.curry; import static fj.data.List.list; import static fj.function.Booleans.isnot; import static org.hamcrest.core.Is.is; /** * Created by amar on 28/01/15. */ public class BooleansTest { @Test public void testAnd(){ F<String, Boolean> f1 = a -> a.startsWith("fj"); F<String, Boolean> f2 = a -> a.contains("data"); F<String, Boolean> f3 = Booleans.and(f1, f2); Assert.assertTrue(f3.f("fj.data")); Assert.assertTrue(f3.f("fj.data.Function")); } @Test public void testOr(){ F<String, Boolean> f1 = a -> a.startsWith("fj"); F<String, Boolean> f2 = a -> a.startsWith("someOtherPackage"); F<String, Boolean> f3 = Booleans.or(f1, f2); Assert.assertTrue(f3.f("fj.data")); Assert.assertTrue(f3.f("someOtherPackage.fj.data")); Assert.assertFalse(f3.f("something.fj.data.Function")); } @Test public void testContramap(){ F<String, Boolean> f1 = a -> a.length() > 3; F<Integer, String> f2 = a -> a.toString(); F<Integer, Boolean> f3 = Booleans.contramap(f2, f1); Assert.assertTrue(f3.f(1000)); Assert.assertFalse(f3.f(100)); } @SuppressWarnings("unchecked") @Test public void testAndAll(){ F<String, Boolean> f1 = a -> a.endsWith("fj"); F<String, Boolean> f2 = a -> a.startsWith("someOtherPackage"); F<String, Boolean> f3 = a -> a.length() < 20; F<String, Boolean> f4 = Booleans.andAll(Stream.<F<String, Boolean>>stream(f1, f2, f3)); Assert.assertTrue(f4.f("someOtherPackage.fj")); Assert.assertFalse(f4.f("otther")); Assert.assertFalse(f4.f("someOtherPackage.fj.data.something.really.big")); } @SuppressWarnings("unchecked") @Test public void testIsNot(){ F<Integer, Boolean> f1 = a -> a == 4; List<String> result = list("some", "come", "done!").filter(isnot(String::length, f1)); Assert.assertThat(result.length(), is(1)); Assert.assertEquals(result, list("done!")); } }