@Test public void testFunctions() { final AtomicLong lf = new AtomicLong(10L); Assert.assertEquals(Anoa.of(10L), handler.function(lf::getAndAdd).apply(handler.of(1L))); Assert.assertEquals(11L, lf.get()); Assert.assertEquals( Anoa.empty(Stream.of(Meta.OTHER)), handler .functionChecked( __ -> { throw new IOException(); }) .apply(handler.of(1L))); final AtomicLong lf2 = new AtomicLong(10L); Assert.assertEquals( Anoa.of(10L), handler.biFunction((Long x, Long y) -> lf2.getAndAdd(x + y)).apply(Anoa.of(1L), 1L)); Assert.assertEquals(12L, lf2.get()); Assert.assertEquals( Anoa.empty(Stream.of(Meta.OTHER)), handler .biFunctionChecked( (_1, _2) -> { throw new IOException(); }) .apply(Anoa.of(1L), 1L)); }