[gnumeric] Add test for RANDSNORM



commit 619036deb572a78ab0184ffb51197a6eff234268
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Tue Feb 7 01:12:08 2012 -0700

    Add test for RANDSNORM
    
    2012-02-07  Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* src/sstest.c (test_random_randsnorm): new
    	(test_random): enable test_random_randsnorm

 ChangeLog    |    5 +++++
 src/sstest.c |   49 ++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 53 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 023d068..078f964 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-07  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+	* src/sstest.c (test_random_randsnorm): new
+	(test_random): enable test_random_randsnorm
+
 2012-02-03  Morten Welinder  <terra gnome org>
 
 	* src/GNOME_Gnumeric-gtk.xml.in: Remove names of separators.  They
diff --git a/src/sstest.c b/src/sstest.c
index 553035d..4e18ab3 100644
--- a/src/sstest.c
+++ b/src/sstest.c
@@ -22,6 +22,7 @@
 #include "func.h"
 #include "parse-util.h"
 #include "sheet-object-cell-comment.h"
+#include "mathfunc.h"
 
 #include <gsf/gsf-input-stdio.h>
 #include <gsf/gsf-input-textline.h>
@@ -569,6 +570,52 @@ test_random_randbernoulli (int N)
 }
 
 static void
+test_random_randsnorm (int N)
+{
+	gnm_float mean, var, skew, kurt;
+	gnm_float *vals;
+	gboolean ok;
+	gnm_float alpha = 5;
+	gnm_float delta = alpha/gnm_sqrt(1+alpha*alpha);
+	gnm_float mean_target = delta * gnm_sqrt (2/M_PIgnum);
+	gnm_float var_target = 1-mean_target*mean_target;
+	char *expr;
+	gnm_float T;
+
+	expr = g_strdup_printf ("=RANDSNORM(%.10" GNM_FORMAT_g ")", alpha);
+	vals = test_random_1 (N, expr, &mean, &var, &skew, &kurt);
+	g_free (expr);
+	g_free (vals);
+
+	ok = TRUE;
+
+	T = mean_target;
+	if (gnm_abs (mean - T) > 0.01) {
+		g_printerr ("Mean failure [%.10" GNM_FORMAT_g "]\n", T);
+		ok = FALSE;
+	}
+	T = var_target;
+	if (gnm_abs (var - T) > 0.01) {
+		g_printerr ("Var failure [%.10" GNM_FORMAT_g "]\n", T);
+		ok = FALSE;
+	}
+	T = mean_target/gnm_sqrt(var_target);
+	T = T*T*T*(4-M_PIgnum)/2;
+	if (gnm_abs (skew - T) > 0.05) {
+		g_printerr ("Skew failure [%.10" GNM_FORMAT_g "]\n", T);
+		ok = FALSE;
+	}
+	T = 2*(M_PIgnum - 3)*mean_target*mean_target*mean_target*mean_target/(var_target*var_target);
+	if (gnm_abs (kurt - T) > 0.10) {
+		g_printerr ("Kurt failure [%.10" GNM_FORMAT_g "]\n", T);
+		ok = FALSE;
+	}
+	if (ok)
+		g_printerr ("OK\n");
+	g_printerr ("\n");
+}
+
+static void
 test_random (void)
 {
 	const char *test_name = "test_random";
@@ -577,6 +624,7 @@ test_random (void)
 	mark_test_start (test_name);
 	test_random_rand (N);
         test_random_randbernoulli (N);
+        test_random_randsnorm (N);
 #if 0
         test_random_randbeta (N);
         test_random_randbetween (N);
@@ -604,7 +652,6 @@ test_random (void)
         test_random_randpoisson (N);
         test_random_randrayleigh (N);
         test_random_randrayleightail (N);
-        test_random_randsnorm (N);
         test_random_randstdist (N);
         test_random_randtdist (N);
         test_random_randuniform (N);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]