summaryrefslogtreecommitdiff
path: root/calc_test.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2021-12-04 13:07:58 +0800
committerxuri <xuri.me@gmail.com>2021-12-04 13:11:01 +0800
commite0c6fa1beb0f1025489bbd21859bc9134c1d661a (patch)
tree6f42d081f7fbc4381ff70652f5c2dc3312ea7dc3 /calc_test.go
parent577a07f08c6121d627323db00fdf9e74989a5515 (diff)
Update docs for SetSheetStyle, and added 2 formula functions
ref #65: new formula functions DURATION and MDURATION fix incorrect example in SetSheetStyle docs
Diffstat (limited to 'calc_test.go')
-rw-r--r--calc_test.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/calc_test.go b/calc_test.go
index c18176f..2f1b310 100644
--- a/calc_test.go
+++ b/calc_test.go
@@ -1472,6 +1472,8 @@ func TestCalcCellValue(t *testing.T) {
"=DOLLARDE(1.01,16)": "1.0625",
// DOLLARFR
"=DOLLARFR(1.0625,16)": "1.01",
+ // DURATION
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,4)": "6.674422798483131",
// EFFECT
"=EFFECT(0.1,4)": "0.103812890625",
"=EFFECT(0.025,2)": "0.02515625",
@@ -1491,6 +1493,8 @@ func TestCalcCellValue(t *testing.T) {
"=ISPMT(0.05/12,1,60,50000)": "-204.8611111111111",
"=ISPMT(0.05/12,2,60,50000)": "-201.38888888888886",
"=ISPMT(0.05/12,2,1,50000)": "208.33333333333334",
+ // MDURATION
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,4)": "6.543551763218756",
// NOMINAL
"=NOMINAL(0.025,12)": "0.0247180352381129",
// NPER
@@ -2916,6 +2920,19 @@ func TestCalcCellValue(t *testing.T) {
"=DOLLARFR(0,\"\")": "strconv.ParseFloat: parsing \"\": invalid syntax",
"=DOLLARFR(0,-1)": "#NUM!",
"=DOLLARFR(0,0)": "#DIV/0!",
+ // DURATION
+ "=DURATION()": "DURATION requires 5 or 6 arguments",
+ "=DURATION(\"\",\"03/31/2025\",10%,8%,4)": "#VALUE!",
+ "=DURATION(\"04/01/2015\",\"\",10%,8%,4)": "#VALUE!",
+ "=DURATION(\"03/31/2025\",\"04/01/2015\",10%,8%,4)": "DURATION requires maturity > settlement",
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",-1,8%,4)": "DURATION requires coupon >= 0",
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",10%,-1,4)": "DURATION requires yld >= 0",
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",\"\",8%,4)": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",10%,\"\",4)": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,\"\")": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,3)": "#NUM!",
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,4,\"\")": "#NUM!",
+ "=DURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,4,5)": "invalid basis",
// EFFECT
"=EFFECT()": "EFFECT requires 2 arguments",
"=EFFECT(\"\",0)": "strconv.ParseFloat: parsing \"\": invalid syntax",
@@ -2964,6 +2981,19 @@ func TestCalcCellValue(t *testing.T) {
"=ISPMT(0,\"\",0,0)": "strconv.ParseFloat: parsing \"\": invalid syntax",
"=ISPMT(0,0,\"\",0)": "strconv.ParseFloat: parsing \"\": invalid syntax",
"=ISPMT(0,0,0,\"\")": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ // MDURATION
+ "=MDURATION()": "MDURATION requires 5 or 6 arguments",
+ "=MDURATION(\"\",\"03/31/2025\",10%,8%,4)": "#VALUE!",
+ "=MDURATION(\"04/01/2015\",\"\",10%,8%,4)": "#VALUE!",
+ "=MDURATION(\"03/31/2025\",\"04/01/2015\",10%,8%,4)": "MDURATION requires maturity > settlement",
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",-1,8%,4)": "MDURATION requires coupon >= 0",
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",10%,-1,4)": "MDURATION requires yld >= 0",
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",\"\",8%,4)": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",10%,\"\",4)": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,\"\")": "strconv.ParseFloat: parsing \"\": invalid syntax",
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,3)": "#NUM!",
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,4,\"\")": "#NUM!",
+ "=MDURATION(\"04/01/2015\",\"03/31/2025\",10%,8%,4,5)": "invalid basis",
// NOMINAL
"=NOMINAL()": "NOMINAL requires 2 arguments",
"=NOMINAL(\"\",0)": "strconv.ParseFloat: parsing \"\": invalid syntax",