]> source.dussan.org Git - poi.git/commitdiff
add COVARIANCE.S function
authorPJ Fanning <fanningpj@apache.org>
Sun, 5 Jun 2022 19:55:50 +0000 (19:55 +0000)
committerPJ Fanning <fanningpj@apache.org>
Sun, 5 Jun 2022 19:55:50 +0000 (19:55 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1901687 13f79535-47bb-0310-9956-ffa450edef68

poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java
poi/src/main/java/org/apache/poi/ss/formula/functions/Covar.java
poi/src/test/java/org/apache/poi/ss/formula/functions/TestCovar.java

index a8a1afc4e8a2b085e14f85fe6aa91dacf40f93bc..af7c4c0aa1e4b5cb9f0211b16098a79e9b949b71 100644 (file)
@@ -91,6 +91,7 @@ public final class AnalysisToolPak implements UDFFinder {
         r(m, "COUPNUM", null);
         r(m, "COUPPCD", null);
         r(m, "COVARIANCE.P", Covar.instanceP);
+        r(m, "COVARIANCE.S", Covar.instanceS);
         r(m, "CUBEKPIMEMBER", null);
         r(m, "CUBEMEMBER", null);
         r(m, "CUBEMEMBERPROPERTY", null);
index 203df5e0beb1f343c25ef8fef8f5bea3ed23ba94..0228873549243413e47fff38805f4f35c8096fdd 100644 (file)
@@ -42,6 +42,8 @@ public class Correl extends TwoArrayFunction {
 
     public static final Correl instance = new Correl();
 
+    private Correl() {}
+
     @Override
     public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1) {
         try {
index 43f35d64e319f712ca4e30671ad9234ccf1fbc9d..ac838837e4189d19b7e71518419b941db7df20f0 100644 (file)
@@ -37,7 +37,14 @@ import java.util.List;
  */
 public class Covar extends TwoArrayFunction implements FreeRefFunction {
 
-    public static final Covar instanceP = new Covar();
+    public static final Covar instanceP = new Covar(false);
+    public static final Covar instanceS = new Covar(true);
+
+    private final boolean sampleBased;
+
+    private Covar(boolean sampleBased) {
+        this.sampleBased = sampleBased;
+    }
 
     @Override
     public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1) {
@@ -45,7 +52,7 @@ public class Covar extends TwoArrayFunction implements FreeRefFunction {
             final List<DoubleList> arrays = getNumberArrays(arg0, arg1);
             final Covariance covar = new Covariance();
             final double result = covar.covariance(
-                    arrays.get(0).toArray(), arrays.get(1).toArray(), false);
+                    arrays.get(0).toArray(), arrays.get(1).toArray(), sampleBased);
             return new NumberEval(result);
         } catch (EvaluationException e) {
             return e.getErrorEval();
index cbfbc69b0d05d2ca74e7b48b765f8d16fa181192..a80a69ffe3612bff2dc2fc584b9fbfcabbd92ca8 100644 (file)
@@ -46,6 +46,7 @@ final class TestCovar {
             HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
             assertDouble(fe, cell, "COVAR(A2:A6,B2:B6)", 5.2, 0.0000000005);
             assertDouble(fe, cell, "COVARIANCE.P(A2:A6,B2:B6)", 5.2, 0.0000000005);
+            assertDouble(fe, cell, "COVARIANCE.S(A2:A6,B2:B6)", 6.5, 0.0000000005);
         }
     }
 
@@ -58,6 +59,7 @@ final class TestCovar {
             HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
             assertDouble(fe, cell, "COVAR(A2:A6,B2:B6)", 5.5625, 0.0000000005);
             assertDouble(fe, cell, "COVARIANCE.P(A2:A6,B2:B6)", 5.5625, 0.0000000005);
+            assertDouble(fe, cell, "COVARIANCE.S(A2:A6,B2:B6)", 7.416666666666666, 0.0000000005);
         }
     }
 
@@ -70,6 +72,7 @@ final class TestCovar {
             HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
             assertDouble(fe, cell, "COVAR(A2:A6,B2:B6)", 5.5625, 0.0000000005);
             assertDouble(fe, cell, "COVARIANCE.P(A2:A6,B2:B6)", 5.5625, 0.0000000005);
+            assertDouble(fe, cell, "COVARIANCE.S(A2:A6,B2:B6)", 7.416666666666666, 0.0000000005);
         }
     }
 
@@ -82,8 +85,10 @@ final class TestCovar {
             HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
             assertError(fe, cell, "COVAR(A2:A6,B2:B5)", FormulaError.NA);
             assertError(fe, cell, "COVARIANCE.P(A2:A6,B2:B5)", FormulaError.NA);
+            assertError(fe, cell, "COVARIANCE.S(A2:A6,B2:B5)", FormulaError.NA);
             assertError(fe, cell, "COVAR(A2:B6,B2:B6)", FormulaError.NA);
             assertError(fe, cell, "COVARIANCE.P(A2:B6,B2:B6)", FormulaError.NA);
+            assertError(fe, cell, "COVARIANCE.S(A2:B6,B2:B6)", FormulaError.NA);
         }
     }