From f892fd053c84c8fc5cb334567ce8122f80605801 Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Thu, 29 Dec 2016 11:58:46 +0100
Subject: [PATCH] Stats: port non-central F (nf) distribution

---
 .../oracle/truffle/r/library/stats/Dnf.java   |  78 +++
 .../truffle/r/library/stats/PNBeta.java       |   2 +-
 .../oracle/truffle/r/library/stats/Pnf.java   |  54 ++
 .../oracle/truffle/r/library/stats/Qnf.java   |  43 ++
 .../foreign/CallAndExternalFunctions.java     |   9 +
 .../truffle/r/test/ExpectedTestOutput.test    | 480 ++++++++++++++++++
 .../test/library/stats/TestDistributions.java |   9 +-
 .../gnu_r.core.copyright.star.regex           |   2 +-
 mx.fastr/copyrights/overrides                 |   2 +
 9 files changed, 676 insertions(+), 3 deletions(-)
 create mode 100644 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dnf.java
 create mode 100644 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pnf.java
 create mode 100644 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qnf.java

diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dnf.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dnf.java
new file mode 100644
index 0000000000..4b4713273b
--- /dev/null
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dnf.java
@@ -0,0 +1,78 @@
+/*
+ * This material is distributed under the GNU General Public License
+ * Version 2. You may review the terms of this license at
+ * http://www.gnu.org/licenses/gpl-2.0.html
+ *
+ * Copyright (c) 2006, The R Core Team
+ * Copyright (c) 2016, Oracle and/or its affiliates
+ *
+ * All rights reserved.
+ */
+/*
+ *  AUTHOR
+ *    Peter Ruckdeschel, peter.ruckdeschel@uni-bayreuth.de.
+ *    April 13, 2006.
+ *
+ */
+package com.oracle.truffle.r.library.stats;
+
+import static com.oracle.truffle.r.library.stats.GammaFunctions.dgamma;
+
+import com.oracle.truffle.r.library.stats.StatsFunctions.Function4_1;
+
+public class Dnf implements Function4_1 {
+    private final DNChisq dnchisq = new DNChisq();
+    private final DNBeta dnbeta = new DNBeta();
+
+    @Override
+    public double evaluate(double x, double df1, double df2, double ncp, boolean giveLog) {
+        if (Double.isNaN(x) || Double.isNaN(df1) || Double.isNaN(df2) || Double.isNaN(ncp)) {
+            return x + df2 + df1 + ncp;
+        }
+
+        /*
+         * want to compare dnf(ncp=0) behavior with df() one, hence *NOT* : if (ncp == 0) return
+         * df(x, df1, df2, giveLog);
+         */
+
+        if (df1 <= 0. || df2 <= 0. || ncp < 0) {
+            return RMathError.defaultError();
+        }
+        if (x < 0.) {
+            return DPQ.rd0(giveLog);
+        }
+        if (!Double.isFinite(ncp)) {
+            /* ncp = +Inf -- GnuR: fix me?: in some cases, limit exists */
+            return RMathError.defaultError();
+        }
+
+        /*
+         * This is not correct for df1 == 2, ncp > 0 - and seems unneeded: if (x == 0.) { return(df1
+         * > 2 ? DPQ.rd0(log_p) : (df1 == 2 ? DPQ.rd1 : Double.POSITIVE_INFINITY)); }
+         */
+        if (!Double.isFinite(df1) && !Double.isFinite(df2)) {
+            /* both +Inf */
+            /* PR: not sure about this (taken from ncp==0) -- GnuR fix me ? */
+            if (x == 1.) {
+                return Double.POSITIVE_INFINITY;
+            } else {
+                return DPQ.rd0(giveLog);
+            }
+        }
+        if (!Double.isFinite(df2)) {
+            /* i.e. = +Inf */
+            return df1 * dnchisq.evaluate(x * df1, df1, ncp, giveLog);
+        }
+        /* == dngamma(x, df1/2, 2./df1, ncp, giveLog) -- but that does not exist */
+        if (df1 > 1e14 && ncp < 1e7) {
+            /* includes df1 == +Inf: code below is inaccurate there */
+            double f = 1 + ncp / df1; /* assumes ncp << df1 [ignores 2*ncp^(1/2)/df1*x term] */
+            double z = dgamma(1. / x / f, df2 / 2, 2. / df2, giveLog);
+            return giveLog ? z - 2 * Math.log(x) - Math.log(f) : z / (x * x) / f;
+        }
+
+        double y = (df1 / df2) * x;
+        double z = dnbeta.evaluate(y / (1 + y), df1 / 2., df2 / 2., ncp, giveLog);
+        return giveLog ? z + Math.log(df1) - Math.log(df2) - 2 * RMath.log1p(y) : z * (df1 / df2) / (1 + y) / (1 + y);
+    }
+}
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PNBeta.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PNBeta.java
index 58795411a1..7734338fc8 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PNBeta.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PNBeta.java
@@ -31,7 +31,7 @@ public class PNBeta implements Function4_2 {
         return pnbeta2(x, 1 - x, a, b, ncp, lowerTail, logP);
     }
 
-    private double pnbeta2(double x, double oX, double a, double b, double ncp, boolean lowerTail, boolean logP) {
+    double pnbeta2(double x, double oX, double a, double b, double ncp, boolean lowerTail, boolean logP) {
         /* LDOUBLE */
         double ans = pnbetaRaw(x, oX, a, b, ncp);
 
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pnf.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pnf.java
new file mode 100644
index 0000000000..56ff4406e9
--- /dev/null
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pnf.java
@@ -0,0 +1,54 @@
+/*
+ * This material is distributed under the GNU General Public License
+ * Version 2. You may review the terms of this license at
+ * http://www.gnu.org/licenses/gpl-2.0.html
+ *
+ * Copyright (C) 1998 Ross Ihaka
+ * Copyright (c) 2000-2008, The R Core Team
+ * Copyright (c) 2016, Oracle and/or its affiliates
+ *
+ * All rights reserved.
+ */
+package com.oracle.truffle.r.library.stats;
+
+import com.oracle.truffle.r.library.stats.DPQ.EarlyReturn;
+import com.oracle.truffle.r.library.stats.StatsFunctions.Function4_2;
+
+public class Pnf implements Function4_2 {
+    private final PNChisq pnchisq = new PNChisq();
+    private final PNBeta pnbeta = new PNBeta();
+
+    @Override
+    public double evaluate(double x, double df1, double df2, double ncp, boolean lowerTail, boolean logP) {
+        double y;
+        if (Double.isNaN(x) || Double.isNaN(df1) || Double.isNaN(df2) || Double.isNaN(ncp)) {
+            return x + df2 + df1 + ncp;
+        }
+        if (df1 <= 0. || df2 <= 0. || ncp < 0) {
+            return RMathError.defaultError();
+        }
+        if (!Double.isFinite(ncp)) {
+
+            return RMathError.defaultError();
+        }
+        if (!Double.isFinite(df1) && !Double.isFinite(df2)) {
+            /* both +Inf */
+            return RMathError.defaultError();
+        }
+
+        try {
+            DPQ.rpbounds01(x, 0., Double.POSITIVE_INFINITY, lowerTail, logP);
+        } catch (EarlyReturn e) {
+            return e.result;
+        }
+
+        if (df2 > 1e8) {
+            /* avoid problems with +Inf and loss of accuracy */
+            return pnchisq.evaluate(x * df1, df1, ncp, lowerTail, logP);
+        }
+
+        y = (df1 / df2) * x;
+        return pnbeta.pnbeta2(y / (1. + y), 1. / (1. + y), df1 / 2., df2 / 2.,
+                        ncp, lowerTail, logP);
+    }
+}
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qnf.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qnf.java
new file mode 100644
index 0000000000..7f06ef8e57
--- /dev/null
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qnf.java
@@ -0,0 +1,43 @@
+/*
+ * This material is distributed under the GNU General Public License
+ * Version 2. You may review the terms of this license at
+ * http://www.gnu.org/licenses/gpl-2.0.html
+ *
+ * Copyright (c) 2006-8, The R Core Team
+ * Copyright (c) 2016, Oracle and/or its affiliates
+ *
+ * All rights reserved.
+ */
+package com.oracle.truffle.r.library.stats;
+
+import com.oracle.truffle.r.library.stats.DPQ.EarlyReturn;
+import com.oracle.truffle.r.library.stats.StatsFunctions.Function4_2;
+
+public class Qnf implements Function4_2 {
+    private final QNChisq qnchisq = new QNChisq();
+    private final QNBeta qnbeta = new QNBeta();
+
+    @Override
+    public double evaluate(double p, double df1, double df2, double ncp, boolean lowerTail, boolean logP) {
+        if (Double.isNaN(p) || Double.isNaN(df1) || Double.isNaN(df2) || Double.isNaN(ncp)) {
+            return p + df1 + df2 + ncp;
+        }
+        if (df1 <= 0. || df2 <= 0. || ncp < 0 || !Double.isFinite(ncp) || !Double.isFinite(df1) && !Double.isFinite(df2)) {
+            return RMathError.defaultError();
+        }
+
+        try {
+            DPQ.rqp01boundaries(p, 0, Double.POSITIVE_INFINITY, lowerTail, logP);
+        } catch (EarlyReturn e) {
+            return e.result;
+        }
+
+        if (df2 > 1e8) {
+            /* avoid problems with +Inf and loss of accuracy */
+            return qnchisq.evaluate(p, df1, ncp, lowerTail, logP) / df1;
+        }
+
+        double y = qnbeta.evaluate(p, df1 / 2., df2 / 2., ncp, lowerTail, logP);
+        return y / (1 - y) * (df2 / df1);
+    }
+}
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/CallAndExternalFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/CallAndExternalFunctions.java
index 78b960ddcc..98c11aa7c7 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/CallAndExternalFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/CallAndExternalFunctions.java
@@ -57,6 +57,7 @@ import com.oracle.truffle.r.library.stats.DNorm;
 import com.oracle.truffle.r.library.stats.DPois;
 import com.oracle.truffle.r.library.stats.Dbinom;
 import com.oracle.truffle.r.library.stats.Df;
+import com.oracle.truffle.r.library.stats.Dnf;
 import com.oracle.truffle.r.library.stats.DoubleCentreNodeGen;
 import com.oracle.truffle.r.library.stats.Dt;
 import com.oracle.truffle.r.library.stats.Exp.DExp;
@@ -82,6 +83,7 @@ import com.oracle.truffle.r.library.stats.PPois;
 import com.oracle.truffle.r.library.stats.Pbeta;
 import com.oracle.truffle.r.library.stats.Pbinom;
 import com.oracle.truffle.r.library.stats.Pf;
+import com.oracle.truffle.r.library.stats.Pnf;
 import com.oracle.truffle.r.library.stats.Pnorm;
 import com.oracle.truffle.r.library.stats.Pt;
 import com.oracle.truffle.r.library.stats.QBeta;
@@ -90,6 +92,7 @@ import com.oracle.truffle.r.library.stats.QNChisq;
 import com.oracle.truffle.r.library.stats.QPois;
 import com.oracle.truffle.r.library.stats.Qbinom;
 import com.oracle.truffle.r.library.stats.Qf;
+import com.oracle.truffle.r.library.stats.Qnf;
 import com.oracle.truffle.r.library.stats.Qnorm;
 import com.oracle.truffle.r.library.stats.Qt;
 import com.oracle.truffle.r.library.stats.RBeta;
@@ -380,6 +383,12 @@ public class CallAndExternalFunctions {
                     return StatsFunctions.Function4_1Node.create(new DNBeta());
                 case "qnbeta":
                     return StatsFunctions.Function4_2Node.create(new QNBeta());
+                case "dnf":
+                    return StatsFunctions.Function4_1Node.create(new Dnf());
+                case "qnf":
+                    return StatsFunctions.Function4_2Node.create(new Qnf());
+                case "pnf":
+                    return StatsFunctions.Function4_2Node.create(new Pnf());
                 case "pnbeta":
                     return StatsFunctions.Function4_2Node.create(new PNBeta());
                 case "dt":
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index 275f7e542b..1d8923274e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -111979,6 +111979,149 @@ In dexp(0, Inf) : NaNs produced
 [1] -1760.26233        -Inf        -Inf     3.73767     3.73767        -Inf
 [7]         NaN
 
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, -1,  5,  5)
+[1] NaN
+Warning message:
+In df(0, -1, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, -Inf,  5,  5)
+[1] NaN
+Warning message:
+In df(0, -Inf, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 0,  5,  5)
+[1] NaN
+Warning message:
+In df(0, 0, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5,  5, -1)
+[1] NaN
+Warning message:
+In df(0, 5, 5, -1) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5,  5, -Inf)
+[1] NaN
+Warning message:
+In df(0, 5, 5, -Inf) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5,  5, 0)
+[1] 0
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5,  5, Inf)
+[1] NaN
+Warning message:
+In df(0, 5, 5, Inf) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5,  5, NaN)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5, -1,  5)
+[1] NaN
+Warning message:
+In df(0, 5, -1, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5, -Inf,  5)
+[1] NaN
+Warning message:
+In df(0, 5, -Inf, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5, 0,  5)
+[1] NaN
+Warning message:
+In df(0, 5, 0, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5, Inf,  5)
+[1] 0
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, 5, NaN,  5)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, Inf,  5,  5)
+[1] NaN
+Warning message:
+In df(0, Inf, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(0, NaN,  5,  5)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 0.12e-10, 6, 31e10, log=F)
+ [1]   0   0   0   0   0   0 Inf   0 NaN NaN
+Warning message:
+In df(c(1, 10, 44, 123, -Inf, -4.2e-31, 0, 4.2e-31, Inf, NaN), 1.2e-11,  :
+  NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 0.12e-10, 6, 31e10, log=T)
+ [1] -1.55e+11 -1.55e+11 -1.55e+11 -1.55e+11      -Inf      -Inf       Inf
+ [8] -1.55e+11       NaN       NaN
+Warning message:
+In df(c(1, 10, 44, 123, -Inf, -4.2e-31, 0, 4.2e-31, Inf, NaN), 1.2e-11,  :
+  NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 0.12e-10, 5, log=F)
+ [1] 6.000077e-12 5.999245e-13 1.364474e-13 4.871126e-14 0.000000e+00
+ [6] 0.000000e+00 0.000000e+00 1.502315e-29          NaN          NaN
+Warning message:
+In df(c(1, 10, 44, 123, -Inf, -4.2e-31, 0, 4.2e-31, Inf, NaN), 5,  :
+  NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 0.12e-10, 5, log=T)
+ [1] -25.83925 -28.14197 -29.62284 -30.65287      -Inf      -Inf      -Inf
+ [8] -66.36796       NaN       NaN
+Warning message:
+In df(c(1, 10, 44, 123, -Inf, -4.2e-31, 0, 4.2e-31, Inf, NaN), 5,  :
+  NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 5, 5, log=F)
+ [1] 3.161392e-01 9.493410e-03 9.824795e-05 3.042534e-06 0.000000e+00
+ [6] 0.000000e+00 0.000000e+00 3.034426e-46          NaN          NaN
+Warning message:
+In df(c(1, 10, 44, 123, -Inf, -4.2e-31, 0, 4.2e-31, Inf, NaN), 5,  :
+  NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 5, 5, log=T)
+ [1]   -1.151573   -4.657157   -9.228016  -12.702820        -Inf        -Inf
+ [7]        -Inf -104.808892         NaN         NaN
+Warning message:
+In df(c(1, 10, 44, 123, -Inf, -4.2e-31, 0, 4.2e-31, Inf, NaN), 5,  :
+  NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 6, 0.12e-10, log=F)
+ [1] 4.450508e-01 1.824043e-03 7.828020e-06 1.409040e-07 0.000000e+00
+ [6] 0.000000e+00 0.000000e+00 3.397124e-45          NaN          NaN
+Warning message:
+In df(c(1, 10, 44, 123, -Inf, -4.2e-31, 0, 4.2e-31, Inf, NaN), 5,  :
+  NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
+#df(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 6, 0.12e-10, log=T)
+ [1]   -0.8095669   -6.3066996  -11.7578009  -15.7751873         -Inf
+ [6]         -Inf         -Inf -102.3934000          NaN          NaN
+Warning message:
+In df(c(1, 10, 44, 123, -Inf, -4.2e-31, 0, 4.2e-31, Inf, NaN), 5,  :
+  NaNs produced
+
 ##com.oracle.truffle.r.test.library.stats.TestDistributions.testDensityFunctions#Output.MayIgnoreWarningContext#
 #dgamma(0, -1,  scale=2)
 [1] NaN
@@ -112720,6 +112863,159 @@ In pexp(0, -1) : NaNs produced
 #pexp(c(42, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 42, lower.tail=T, log.p=T)
 [1]   0.00000      -Inf      -Inf      -Inf -66.20738   0.00000       NaN
 
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, -1,  5,  5)
+[1] NaN
+Warning message:
+In pf(0, -1, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, -Inf,  5,  5)
+[1] NaN
+Warning message:
+In pf(0, -Inf, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 0,  5,  5)
+[1] NaN
+Warning message:
+In pf(0, 0, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5,  5, -1)
+[1] NaN
+Warning message:
+In pf(0, 5, 5, -1) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5,  5, -Inf)
+[1] NaN
+Warning message:
+In pf(0, 5, 5, -Inf) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5,  5, 0)
+[1] 0
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5,  5, Inf)
+[1] NaN
+Warning message:
+In pf(0, 5, 5, Inf) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5,  5, NaN)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5, -1,  5)
+[1] NaN
+Warning message:
+In pf(0, 5, -1, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5, -Inf,  5)
+[1] NaN
+Warning message:
+In pf(0, 5, -Inf, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5, 0,  5)
+[1] NaN
+Warning message:
+In pf(0, 5, 0, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5, Inf,  5)
+[1] 0
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, 5, NaN,  5)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, Inf,  5,  5)
+[1] 0
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(0, NaN,  5,  5)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 0.12e-10, 6, 31e10, lower.tail=F, log.p=F)
+ [1]   1   1   1   1   1   1   1   1   0 NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 0.12e-10, 6, 31e10, lower.tail=F, log.p=T)
+ [1]    0    0    0    0    0    0    0    0 -Inf  NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 0.12e-10, 6, 31e10, lower.tail=T, log.p=F)
+ [1]   0   0   0   0   0   0   0   0   1 NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 0.12e-10, 6, 31e10, lower.tail=T, log.p=T)
+ [1] -Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf    0  NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 0.12e-10, 5, lower.tail=F, log.p=F)
+ [1]   1   1   1   1   1   1   1   1   0 NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 0.12e-10, 5, lower.tail=F, log.p=T)
+ [1] -4.342122e-11 -4.739038e-11 -4.994435e-11 -5.171639e-11  0.000000e+00
+ [6]  0.000000e+00  0.000000e+00 -2.523888e-60          -Inf           NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 0.12e-10, 5, lower.tail=T, log.p=F)
+ [1] 4.342122e-11 4.739038e-11 4.994435e-11 5.171639e-11 0.000000e+00
+ [6] 0.000000e+00 0.000000e+00 2.523888e-60 1.000000e+00          NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 0.12e-10, 5, lower.tail=T, log.p=T)
+ [1]  -23.86007  -23.77260  -23.72011  -23.68525       -Inf       -Inf
+ [7]       -Inf -137.22930    0.00000        NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 5, 5, lower.tail=F, log.p=F)
+ [1] 0.7960368423 0.0481532307 0.0018278022 0.0001527094 1.0000000000
+ [6] 1.0000000000 1.0000000000 1.0000000000 0.0000000000          NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 5, 5, lower.tail=F, log.p=T)
+ [1] -2.281098e-01 -3.033367e+00 -6.304641e+00 -8.786974e+00  0.000000e+00
+ [6]  0.000000e+00  0.000000e+00 -5.097836e-77          -Inf           NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 5, 5, lower.tail=T, log.p=F)
+ [1] 2.039632e-01 9.518468e-01 9.981722e-01 9.998473e-01 0.000000e+00
+ [6] 0.000000e+00 0.000000e+00 5.097836e-77 1.000000e+00          NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 5, 5, lower.tail=T, log.p=T)
+ [1] -1.589816e+00 -4.935121e-02 -1.829475e-03 -1.527211e-04          -Inf
+ [6]          -Inf          -Inf -1.756702e+02  0.000000e+00           NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 6, 0.12e-10, lower.tail=F, log.p=F)
+ [1] 4.894344e-01 7.119843e-03 1.191517e-04 5.854787e-06 1.000000e+00
+ [6] 1.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00          NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 6, 0.12e-10, lower.tail=F, log.p=T)
+ [1] -7.145048e-01 -4.944870e+00 -9.035113e+00 -1.204825e+01  0.000000e+00
+ [6]  0.000000e+00  0.000000e+00 -5.707168e-76          -Inf           NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 6, 0.12e-10, lower.tail=T, log.p=F)
+ [1] 5.105656e-01 9.928802e-01 9.998808e-01 9.999941e-01 0.000000e+00
+ [6] 0.000000e+00 0.000000e+00 5.707168e-76 1.000000e+00          NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
+#pf(c(1, 10, 44, 123, -Inf, -0.42e-30, 0, 0.42e-30, Inf, NaN), 5, 6, 0.12e-10, lower.tail=T, log.p=T)
+ [1] -6.722361e-01 -7.145310e-03 -1.191588e-04 -5.854804e-06          -Inf
+ [6]          -Inf          -Inf -1.732547e+02  0.000000e+00           NaN
+
 ##com.oracle.truffle.r.test.library.stats.TestDistributions.testDistributionFunctions#Output.MayIgnoreWarningContext#
 #pgamma(0, -1,  scale=2)
 [1] NaN
@@ -113710,6 +114006,190 @@ In qexp(Inf, 1.3e-19) : NaNs produced
 [1]  0.000000e+00 1.000000e-203 2.508584e-126 1.650350e-125 2.866602e-125
 [6]           Inf           Inf
 
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(-0.42e-38, 5, 5, 5)
+[1] NaN
+Warning message:
+In qf(-4.2e-39, 5, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(-42, 5, 5, 5)
+[1] NaN
+Warning message:
+In qf(-42, 5, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(-Inf, 5, 5, 5)
+[1] NaN
+Warning message:
+In qf(-Inf, 5, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, -1,  5,  5)
+[1] NaN
+Warning message:
+In qf(0, -1, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, -Inf,  5,  5)
+[1] NaN
+Warning message:
+In qf(0, -Inf, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 0,  5,  5)
+[1] NaN
+Warning message:
+In qf(0, 0, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5,  5, -1)
+[1] NaN
+Warning message:
+In qf(0, 5, 5, -1) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5,  5, -Inf)
+[1] NaN
+Warning message:
+In qf(0, 5, 5, -Inf) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5,  5, 0)
+[1] 0
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5,  5, Inf)
+[1] NaN
+Warning message:
+In qf(0, 5, 5, Inf) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5,  5, NaN)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5, -1,  5)
+[1] NaN
+Warning message:
+In qf(0, 5, -1, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5, -Inf,  5)
+[1] NaN
+Warning message:
+In qf(0, 5, -Inf, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5, 0,  5)
+[1] NaN
+Warning message:
+In qf(0, 5, 0, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5, Inf,  5)
+[1] 0
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, 5, NaN,  5)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, Inf,  5,  5)
+[1] 0
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(0, NaN,  5,  5)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(Inf, 5, 5, 5)
+[1] NaN
+Warning message:
+In qf(Inf, 5, 5, 5) : NaNs produced
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(NaN, 5, 5, 5)
+[1] NaN
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1), 0.12e-10, 6, 31e10, lower.tail=F, log.p=F)
+[1]          Inf          Inf 7.505999e+26 7.505999e+26 7.505999e+26
+[6] 0.000000e+00 0.000000e+00
+There were 50 or more warnings (use warnings() to see the first 50)
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1), 0.12e-10, 6, 31e10, lower.tail=T, log.p=F)
+[1] 0.000000e+00 5.090863e+20 7.505999e+26 7.505999e+26 7.505999e+26
+[6]          Inf          Inf
+There were 50 or more warnings (use warnings() to see the first 50)
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1), 5, 0.12e-10, 5, lower.tail=F, log.p=F)
+[1]     Inf     Inf 3602.88 3602.88 3602.88    0.00    0.00
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1), 5, 0.12e-10, 5, lower.tail=T, log.p=F)
+[1] 0.000000e+00 1.293365e-38 3.602880e+03 3.602880e+03 3.602880e+03
+[6]          Inf          Inf
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1), 5, 5, 5, lower.tail=F, log.p=F)
+[1]      Inf      Inf 6.772533 2.075393 1.308959 0.000000 0.000000
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1), 5, 5, 5, lower.tail=T, log.p=F)
+[1] 0.000000e+00 6.160198e-32 6.602106e-01 2.075393e+00 3.312503e+00
+[6]          Inf          Inf
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1), 5, 6, 0.12e-10, lower.tail=F, log.p=F)
+[1]       Inf       Inf 3.1075117 0.9765364 0.6067423 0.0000000 0.0000000
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1), 5, 6, 0.12e-10, lower.tail=T, log.p=F)
+[1] 0.000000e+00 2.344125e-32 2.937283e-01 9.765364e-01 1.560462e+00
+[6]          Inf          Inf
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(log(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1)), 0.12e-10, 6, 31e10, lower.tail=F, log.p=T)
+[1]          Inf          Inf 7.505999e+26 7.505999e+26 7.505999e+26
+[6] 0.000000e+00 0.000000e+00
+There were 50 or more warnings (use warnings() to see the first 50)
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(log(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1)), 0.12e-10, 6, 31e10, lower.tail=T, log.p=T)
+[1] 0.000000e+00 5.090863e+20 7.505999e+26 7.505999e+26 7.505999e+26
+[6]          Inf          Inf
+There were 50 or more warnings (use warnings() to see the first 50)
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(log(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1)), 5, 0.12e-10, 5, lower.tail=F, log.p=T)
+[1]     Inf     Inf 3602.88 3602.88 3602.88    0.00    0.00
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(log(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1)), 5, 0.12e-10, 5, lower.tail=T, log.p=T)
+[1] 0.000000e+00 1.293365e-38 3.602880e+03 3.602880e+03 3.602880e+03
+[6]          Inf          Inf
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(log(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1)), 5, 5, 5, lower.tail=F, log.p=T)
+[1]      Inf      Inf 6.772533 2.075393 1.308959 0.000000 0.000000
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(log(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1)), 5, 5, 5, lower.tail=T, log.p=T)
+[1] 0.000000e+00 6.160198e-32 6.602106e-01 2.075393e+00 3.312503e+00
+[6]          Inf          Inf
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(log(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1)), 5, 6, 0.12e-10, lower.tail=F, log.p=T)
+[1]       Inf       Inf 3.1075117 0.9765364 0.6067423 0.0000000 0.0000000
+
+##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
+#qf(log(c(0, 42e-80, 0.1, 0.5, 0.7, 1-42e-80, 1)), 5, 6, 0.12e-10, lower.tail=T, log.p=T)
+[1] 0.000000e+00 2.344125e-32 2.937283e-01 9.765364e-01 1.560462e+00
+[6]          Inf          Inf
+
 ##com.oracle.truffle.r.test.library.stats.TestDistributions.testQuantileFunctions#Output.MayIgnoreWarningContext#
 #qgamma(-0.42e-38, 1, scale=2)
 [1] NaN
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestDistributions.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestDistributions.java
index f745736a92..7b19e9e15a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestDistributions.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestDistributions.java
@@ -96,7 +96,14 @@ public class TestDistributions extends TestBase {
                     test("10, 15, 0", withDefaultQ("10", "15", "100")).
                     test("7, 13, 3", withDefaultQ("10", "15", "100")).
                     test("7, 11, 0.37e-10", withQuantiles("10", "15", "100")).
-                    test("7, 113e11, 1", withQuantiles("10", "15", "100"))
+                    test("7, 113e11, 1", withQuantiles("10", "15", "100")),
+            // tests of nf (non central F distribution)
+            distr("f").
+                    addErrorParamValues("-1", "0").
+                    test("5, 5, 5", withDefaultQ("1", "10", "44", "123")).
+                    test("5, 0.12e-10, 5", withDefaultQ("1", "10", "44", "123")).
+                    test("5, 6, 0.12e-10", withDefaultQ("1", "10", "44", "123")).
+                    test("0.12e-10, 6, 31e10", withDefaultQ("1", "10", "44", "123"))
     };
     // @formatter:on
 
diff --git a/mx.fastr/copyrights/gnu_r.core.copyright.star.regex b/mx.fastr/copyrights/gnu_r.core.copyright.star.regex
index b89f17651f..f2659e583f 100644
--- a/mx.fastr/copyrights/gnu_r.core.copyright.star.regex
+++ b/mx.fastr/copyrights/gnu_r.core.copyright.star.regex
@@ -1 +1 @@
-/\*\n \* This material is distributed under the GNU General Public License\n \* Version 2. You may review the terms of this license at\n \* http://www.gnu.org/licenses/gpl-2.0.html\n \*\n \* Copyright \(c\) (?:[1-2][09][0-9][0-9]--?)?[1-2][09][0-9][0-9], The R Core Team\n \* Copyright \(c\) (?:(20[0-9][0-9]), )?(20[0-9][0-9]), Oracle and/or its affiliates\n \*\n \* All rights reserved.\n \*/\n.*
+/\*\n \* This material is distributed under the GNU General Public License\n \* Version 2. You may review the terms of this license at\n \* http://www.gnu.org/licenses/gpl-2.0.html\n \*\n \* Copyright \(c\) (?:[1-2][09][0-9][0-9]--?)?(:?[1-2][09])?[0-9]?[0-9], The R Core Team\n \* Copyright \(c\) (?:(20[0-9][0-9]), )?(20[0-9][0-9]), Oracle and/or its affiliates\n \*\n \* All rights reserved.\n \*/\n.*
diff --git a/mx.fastr/copyrights/overrides b/mx.fastr/copyrights/overrides
index a4760a69f7..53f907be9d 100644
--- a/mx.fastr/copyrights/overrides
+++ b/mx.fastr/copyrights/overrides
@@ -51,6 +51,8 @@ com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/MathInit.jav
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pbeta.java,gnu_r.core.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PNBeta.java,gnu_r.core.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QNBeta.java,gnu_r.core.copyright
+com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qnf.java,gnu_r.core.copyright
+com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dnf.java,gnu_r.core.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DNBeta.java,gnu_r_ihaka_core.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LBeta.java,gnu_r_ihaka.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pbinom.java,gnu_r_ihaka.copyright
-- 
GitLab