package name.abuchen.portfolio.math; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import java.math.BigDecimal; import java.time.LocalDate; import java.time.Month; import java.util.Arrays; import org.hamcrest.number.IsCloseTo; import org.junit.Test; public class IRRTest { @Test public void testSimpleExcelTestCase() { double result = IRR.calculate(Arrays.asList( // LocalDate.of(2010, Month.JANUARY, 1), // LocalDate.of(2010, Month.DECEMBER, 31)), // Arrays.asList(-200d, 210d)); result = new BigDecimal(result).setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue(); double excel = new BigDecimal(0.050140747d).setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue(); assertThat(result, is(excel)); } @Test public void testComplexExcelTestCaseWithSlowCurve() { double result = IRR.calculate(Arrays.asList( // LocalDate.of(2002, Month.NOVEMBER, 30), // LocalDate.of(2007, Month.JUNE, 11), // LocalDate.of(2008, Month.MAY, 11), // LocalDate.of(2009, Month.MAY, 1), // LocalDate.of(2010, Month.JUNE, 1), // LocalDate.of(2011, Month.MAY, 2), // LocalDate.of(2012, Month.APRIL, 30), // LocalDate.of(2012, Month.DECEMBER, 6)), // Arrays.asList(-4398d, 200d, 270d, 280d, 280d, 300d, 330d, 14508d)); double excel = 0.1444629967d; assertThat(result, IsCloseTo.closeTo(excel, 0.0001d)); } }