[gnumeric] sstest: test RANDGAMMA
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] sstest: test RANDGAMMA
- Date: Fri, 20 Mar 2015 17:38:45 +0000 (UTC)
commit ab6af669162e90fc164cb0349dd8d0f9789fe2aa
Author: Morten Welinder <terra gnome org>
Date: Fri Mar 20 13:38:09 2015 -0400
sstest: test RANDGAMMA
Also improve docs for RANDGAMMA.
ChangeLog | 1 +
plugins/fn-random/functions.c | 4 +-
src/sstest.c | 69 ++++++++++++++++++++++++++++++++++++++++-
3 files changed, 71 insertions(+), 3 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index a9f1055..a597669 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@
(test_random_randnegbinom): New test.
(test_random_randlog): New test.
(test_random_randdiscrete): New test.
+ (test_random_randgamma): New test.
* src/gnm-random.c (random_logarithmic): Fix. See #746449.
diff --git a/plugins/fn-random/functions.c b/plugins/fn-random/functions.c
index 3b8dfe5..0d94415 100644
--- a/plugins/fn-random/functions.c
+++ b/plugins/fn-random/functions.c
@@ -472,8 +472,8 @@ gnumeric_randrayleightail (GnmFuncEvalInfo *ei, GnmValue const * const *argv)
static GnmFuncHelp const help_randgamma[] = {
{ GNM_FUNC_HELP_NAME, F_("RANDGAMMA:random variate from a Gamma distribution") },
- { GNM_FUNC_HELP_ARG, F_("a:parameter of the Gamma distribution") },
- { GNM_FUNC_HELP_ARG, F_("b:parameter of the Gamma distribution") },
+ { GNM_FUNC_HELP_ARG, F_("a:shape parameter of the Gamma distribution") },
+ { GNM_FUNC_HELP_ARG, F_("b:scale parameter of the Gamma distribution") },
{ GNM_FUNC_HELP_NOTE, F_("If @{a} \xe2\x89\xa4 0, RANDGAMMA returns #NUM!") },
{ GNM_FUNC_HELP_EXAMPLES, "=RANDGAMMA(1,2)" },
{ GNM_FUNC_HELP_EXAMPLES, "=RANDGAMMA(1,2)" },
diff --git a/src/sstest.c b/src/sstest.c
index 4009e0c..a1ee5bd 100644
--- a/src/sstest.c
+++ b/src/sstest.c
@@ -1004,6 +1004,73 @@ test_random_randexp (int N)
}
static void
+test_random_randgamma (int N)
+{
+ gnm_float mean, var, skew, kurt;
+ gnm_float *vals;
+ gboolean ok;
+ gnm_float param_shape = gnm_floor (1 / (0.0001 + gnm_pow (random_01 (), 6)));
+ gnm_float param_scale = 0.001 + gnm_pow (random_01 (), 4) * 1000;
+ gnm_float mean_target = param_shape * param_scale;
+ gnm_float var_target = mean_target * param_scale;
+ gnm_float skew_target = 2 / gnm_sqrt (param_shape);
+ gnm_float kurt_target = 6 / param_shape;
+ char *expr;
+ gnm_float T;
+ int i;
+
+ expr = g_strdup_printf ("=RANDGAMMA(%.0" GNM_FORMAT_f ",%.10" GNM_FORMAT_g ")", param_shape,
param_scale);
+ vals = test_random_1 (N, expr, &mean, &var, &skew, &kurt);
+ g_free (expr);
+
+ ok = TRUE;
+ for (i = 0; i < N; i++) {
+ gnm_float r = vals[i];
+ if (!(r > 0 && gnm_finite (r))) {
+ g_printerr ("Range failure.\n");
+ ok = FALSE;
+ break;
+ }
+ }
+ g_free (vals);
+
+ T = mean_target;
+ g_printerr ("Expected mean: %.10" GNM_FORMAT_g "\n", T);
+ if (!(gnm_abs (mean - T) < 3 * gnm_sqrt (var_target / N))) {
+ g_printerr ("Mean failure.\n");
+ ok = FALSE;
+ }
+
+ T = var_target;
+ g_printerr ("Expected var: %.10" GNM_FORMAT_g "\n", T);
+ if (!(var >= 0 && gnm_finite (var))) {
+ /* That is a very simplistic test! */
+ g_printerr ("Var failure.\n");
+ ok = FALSE;
+ }
+
+ T = skew_target;
+ g_printerr ("Expected skew: %.10" GNM_FORMAT_g "\n", T);
+ if (!gnm_finite (skew)) {
+ /* That is a very simplistic test! */
+ g_printerr ("Skew failure.\n");
+ ok = FALSE;
+ }
+
+ T = kurt_target;
+ g_printerr ("Expected kurt: %.10" GNM_FORMAT_g "\n", T);
+ if (!(kurt >= -3 && gnm_finite (kurt))) {
+ /* That is a very simplistic test! */
+ g_printerr ("Kurt failure.\n");
+ ok = FALSE;
+ }
+
+ if (ok)
+ g_printerr ("OK\n");
+ g_printerr ("\n");
+}
+
+static void
test_random_randbinom (int N)
{
gnm_float mean, var, skew, kurt;
@@ -1429,6 +1496,7 @@ test_random (void)
test_random_randnorm (High_N);
test_random_randsnorm (High_N);
test_random_randexp (N);
+ test_random_randgamma (N);
test_random_randbernoulli (N);
test_random_randdiscrete (N);
@@ -1445,7 +1513,6 @@ test_random (void)
test_random_randchisq (N);
test_random_randexppow (N);
test_random_randfdist (N);
- test_random_randgamma (N);
test_random_randnormtail (N);
test_random_randgumbel (N);
test_random_randhyperg (N);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]