@@ -1173,6 +1173,9 @@ func TestCalcCellValue(t *testing.T) {
11731173 // T.INV.2T
11741174 "=T.INV.2T(1,10)" : "0" ,
11751175 "=T.INV.2T(0.5,10)" : "0.699812061312432" ,
1176+ // TINV
1177+ "=TINV(1,10)" : "0" ,
1178+ "=TINV(0.5,10)" : "0.699812061312432" ,
11761179 // TRIMMEAN
11771180 "=TRIMMEAN(A1:B4,10%)" : "2.5" ,
11781181 "=TRIMMEAN(A1:B4,70%)" : "2.5" ,
@@ -3067,6 +3070,12 @@ func TestCalcCellValue(t *testing.T) {
30673070 "=T.INV.2T(0.25,\" \" )" : "strconv.ParseFloat: parsing \" \" : invalid syntax" ,
30683071 "=T.INV.2T(0,10)" : "#NUM!" ,
30693072 "=T.INV.2T(0.25,0.5)" : "#NUM!" ,
3073+ // TINV
3074+ "=TINV()" : "TINV requires 2 arguments" ,
3075+ "=TINV(\" \" ,10)" : "strconv.ParseFloat: parsing \" \" : invalid syntax" ,
3076+ "=TINV(0.25,\" \" )" : "strconv.ParseFloat: parsing \" \" : invalid syntax" ,
3077+ "=TINV(0,10)" : "#NUM!" ,
3078+ "=TINV(0.25,0.5)" : "#NUM!" ,
30703079 // TRIMMEAN
30713080 "=TRIMMEAN()" : "TRIMMEAN requires 2 arguments" ,
30723081 "=TRIMMEAN(A1,\" \" )" : "strconv.ParseFloat: parsing \" \" : invalid syntax" ,
@@ -4888,6 +4897,58 @@ func TestCalcSHEETS(t *testing.T) {
48884897 }
48894898}
48904899
4900+ func TestCalcTTEST (t * testing.T ) {
4901+ cellData := [][]interface {}{
4902+ {4 , 8 , nil , 1 , 1 },
4903+ {5 , 3 , nil , 1 , 1 },
4904+ {2 , 7 },
4905+ {5 , 3 },
4906+ {8 , 5 },
4907+ {9 , 2 },
4908+ {3 , 2 },
4909+ {2 , 7 },
4910+ {3 , 9 },
4911+ {8 , 4 },
4912+ {9 , 4 },
4913+ {5 , 7 },
4914+ }
4915+ f := prepareCalcData (cellData )
4916+ formulaList := map [string ]string {
4917+ "=TTEST(A1:A12,B1:B12,1,1)" : "0.44907068944428" ,
4918+ "=TTEST(A1:A12,B1:B12,1,2)" : "0.436717306029283" ,
4919+ "=TTEST(A1:A12,B1:B12,1,3)" : "0.436722015384755" ,
4920+ "=TTEST(A1:A12,B1:B12,2,1)" : "0.898141378888559" ,
4921+ "=TTEST(A1:A12,B1:B12,2,2)" : "0.873434612058567" ,
4922+ "=TTEST(A1:A12,B1:B12,2,3)" : "0.873444030769511" ,
4923+ }
4924+ for formula , expected := range formulaList {
4925+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C1" , formula ))
4926+ result , err := f .CalcCellValue ("Sheet1" , "C1" )
4927+ assert .NoError (t , err , formula )
4928+ assert .Equal (t , expected , result , formula )
4929+ }
4930+ calcError := map [string ]string {
4931+ "=TTEST()" : "TTEST requires 4 arguments" ,
4932+ "=TTEST(\" \" ,B1:B12,1,1)" : "#NUM!" ,
4933+ "=TTEST(A1:A12,\" \" ,1,1)" : "#NUM!" ,
4934+ "=TTEST(A1:A12,B1:B12,\" \" ,1)" : "strconv.ParseFloat: parsing \" \" : invalid syntax" ,
4935+ "=TTEST(A1:A12,B1:B12,1,\" \" )" : "strconv.ParseFloat: parsing \" \" : invalid syntax" ,
4936+ "=TTEST(A1:A12,B1:B12,0,1)" : "#NUM!" ,
4937+ "=TTEST(A1:A12,B1:B12,1,0)" : "#NUM!" ,
4938+ "=TTEST(A1:A2,B1:B1,1,1)" : "#N/A" ,
4939+ "=TTEST(A13:A14,B13:B14,1,1)" : "#NUM!" ,
4940+ "=TTEST(A12:A13,B12:B13,1,1)" : "#DIV/0!" ,
4941+ "=TTEST(A13:A14,B13:B14,1,2)" : "#NUM!" ,
4942+ "=TTEST(D1:D4,E1:E4,1,3)" : "#NUM!" ,
4943+ }
4944+ for formula , expected := range calcError {
4945+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C1" , formula ))
4946+ result , err := f .CalcCellValue ("Sheet1" , "C1" )
4947+ assert .EqualError (t , err , expected , formula )
4948+ assert .Equal (t , "" , result , formula )
4949+ }
4950+ }
4951+
48914952func TestCalcZTEST (t * testing.T ) {
48924953 f := NewFile ()
48934954 assert .NoError (t , f .SetSheetRow ("Sheet1" , "A1" , & []int {4 , 5 , 2 , 5 , 8 , 9 , 3 , 2 , 3 , 8 , 9 , 5 }))
0 commit comments