summaryrefslogtreecommitdiff
path: root/calc_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'calc_test.go')
-rw-r--r--calc_test.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/calc_test.go b/calc_test.go
index e80e8b9..a6d5f97 100644
--- a/calc_test.go
+++ b/calc_test.go
@@ -2518,3 +2518,58 @@ func TestCalcHLOOKUP(t *testing.T) {
assert.Equal(t, "", result, formula)
}
}
+
+func TestCalcIRR(t *testing.T) {
+ cellData := [][]interface{}{{-1}, {0.2}, {0.24}, {0.288}, {0.3456}, {0.4147}}
+ f := prepareCalcData(cellData)
+ formulaList := map[string]string{
+ "=IRR(A1:A4)": "-0.136189509034157",
+ "=IRR(A1:A6)": "0.130575760006905",
+ "=IRR(A1:A4,-0.1)": "-0.136189514994621",
+ }
+ for formula, expected := range formulaList {
+ assert.NoError(t, f.SetCellFormula("Sheet1", "B1", formula))
+ result, err := f.CalcCellValue("Sheet1", "B1")
+ assert.NoError(t, err, formula)
+ assert.Equal(t, expected, result, formula)
+ }
+ calcError := map[string]string{
+ "=IRR()": "IRR requires at least 1 argument",
+ "=IRR(0,0,0)": "IRR allows at most 2 arguments",
+ "=IRR(0,\"\")": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=IRR(A2:A3)": "#NUM!",
+ }
+ for formula, expected := range calcError {
+ assert.NoError(t, f.SetCellFormula("Sheet1", "B1", formula))
+ result, err := f.CalcCellValue("Sheet1", "B1")
+ assert.EqualError(t, err, expected, formula)
+ assert.Equal(t, "", result, formula)
+ }
+}
+
+func TestCalcMIRR(t *testing.T) {
+ cellData := [][]interface{}{{-100}, {18}, {22.5}, {28}, {35.5}, {45}}
+ f := prepareCalcData(cellData)
+ formulaList := map[string]string{
+ "=MIRR(A1:A5,0.055,0.05)": "0.025376365108071",
+ "=MIRR(A1:A6,0.055,0.05)": "0.1000268752662",
+ }
+ for formula, expected := range formulaList {
+ assert.NoError(t, f.SetCellFormula("Sheet1", "B1", formula))
+ result, err := f.CalcCellValue("Sheet1", "B1")
+ assert.NoError(t, err, formula)
+ assert.Equal(t, expected, result, formula)
+ }
+ calcError := map[string]string{
+ "=MIRR()": "MIRR requires 3 arguments",
+ "=MIRR(A1:A5,\"\",0)": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=MIRR(A1:A5,0,\"\")": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=MIRR(B1:B5,0,0)": "#DIV/0!",
+ }
+ for formula, expected := range calcError {
+ assert.NoError(t, f.SetCellFormula("Sheet1", "B1", formula))
+ result, err := f.CalcCellValue("Sheet1", "B1")
+ assert.EqualError(t, err, expected, formula)
+ assert.Equal(t, "", result, formula)
+ }
+}