package water.util.fp; import org.junit.Test; import java.util.Collections; import java.util.Iterator; import static org.junit.Assert.*; import static water.util.fp.FP.*; /** * Tests set for FP library */ public class FPTest { @Test public void testSome() throws Exception { Some<String> sut = new Some<>("Hello Junit"); assertFalse(sut.isEmpty()); assertEquals("Hello Junit", sut.get()); assertEquals("Hello Junit", sut.get()); Iterator<String> sui1 = sut.iterator(); Iterator<String> sui2 = sut.iterator(); assertTrue(sui1.hasNext()); assertTrue(sui1.hasNext()); assertTrue(sui2.hasNext()); assertTrue(sui2.hasNext()); assertEquals("Hello Junit", sui1.next()); assertFalse(sui1.hasNext()); assertFalse(sui1.hasNext()); assertTrue(sui2.hasNext()); assertTrue(sui2.hasNext()); assertFalse(sut.isEmpty()); assertTrue(sut.nonEmpty()); assertEquals("Some(3.141592653589793)", Some(Math.PI).toString()); } @Test public void testOption() throws Exception { Option<String> sut1 = Some("Hello Junit"); // should not compile // sut.get(); Iterator<String> sui1 = sut1.iterator(); assertTrue(sui1.hasNext()); assertEquals("Hello Junit", sui1.next()); assertFalse(sui1.hasNext()); assertFalse(sut1.isEmpty()); assertTrue(sut1.nonEmpty()); assertTrue(None.isEmpty()); assertFalse(None.nonEmpty()); assertFalse(None.iterator().hasNext()); Option<String> sut2 = Option("Hello Junit"); assertEquals(sut1, sut2); assertNotEquals(Option("Hello JuniT"), sut1); Option<String> sut3 = Option(null); assertEquals(None, sut3); Option<Integer> sut4 = sut1.flatMap( new Function<String, Option<Integer>>() { public Option<Integer> apply(String s) { return Option(s.length() - 1); } }); assertEquals(Option(10), sut4); Option<?> sute = Option(None); } @Test public void testFlatten() throws Exception { Option<String> sut1 = Some("Hello Junit"); Option<Option<String>> sutopt = Option(sut1); assertEquals(sut1, flatten(sutopt)); assertEquals(None, flatten(Option(None))); assertEquals(None, flatten((Option<Option<Object>>)None)); } @Test public void testHeadOption() throws Exception { assertEquals(None, headOption(Collections.emptyList())); final Option<Double> expected = Some(Math.PI); final Option<Double> expected2 = Some(Math.PI); assertTrue(expected.equals(expected2)); assertEquals(expected, expected2); assertEquals(expected, headOption(Collections.nCopies(7, Math.PI))); assertEquals(expected, headOption(Collections.nCopies(1, Math.PI))); assertEquals(None, headOption(Collections.nCopies(0, Math.PI))); } @Test public void testHeadOption1() throws Exception { assertEquals(Some(Math.PI), headOption(Collections.nCopies(7, Math.PI).iterator())); assertEquals(Some(Math.PI), headOption(Collections.nCopies(1, Math.PI).iterator())); assertEquals(None, headOption(Collections.nCopies(0, Math.PI).iterator())); } }