--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32utils/nistsecurerng/src/cusum.cpp Tue Aug 31 16:34:26 2010 +0300
@@ -0,0 +1,109 @@
+/*
+* Portions Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* The original NIST Statistical Test Suite code is placed in public domain.
+* (http://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html)
+*
+* This software was developed at the National Institute of Standards and Technology by
+* employees of the Federal Government in the course of their official duties. Pursuant
+* to title 17 Section 105 of the United States Code this software is not subject to
+* copyright protection and is in the public domain. The NIST Statistical Test Suite is
+* an experimental system. NIST assumes no responsibility whatsoever for its use by other
+* parties, and makes no guarantees, expressed or implied, about its quality, reliability,
+* or any other characteristic. We would appreciate acknowledgment if the software is used.
+*/
+
+#include "openc.h"
+#include "../include/externs.h"
+#include "../include/cephes.h"
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ C U M U L A T I V E S U M S T E S T
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+void
+CumulativeSums(int n)
+{
+ int S, sup, inf;
+ int z = 0;
+ int zrev = 0;
+ int k;
+ double sum1, sum2, p_value;
+
+ S = 0;
+ sup = 0;
+ inf = 0;
+ for ( k=0; k<n; k++ ) {
+ epsilon[k] ? S++ : S--;
+ if ( S > sup )
+ sup++;
+ if ( S < inf )
+ inf--;
+ z = (sup > -inf) ? sup : -inf;
+ zrev = (sup-S > S-inf) ? sup-S : S-inf;
+ }
+
+ // forward
+ sum1 = 0.0;
+ for ( k=(-n/z+1)/4; k<=(n/z-1)/4; k++ ) {
+ sum1 += cephes_normal(((4*k+1)*z)/sqrt(n));
+ sum1 -= cephes_normal(((4*k-1)*z)/sqrt(n));
+ }
+ sum2 = 0.0;
+ for ( k=(-n/z-3)/4; k<=(n/z-1)/4; k++ ) {
+ sum2 += cephes_normal(((4*k+3)*z)/sqrt(n));
+ sum2 -= cephes_normal(((4*k+1)*z)/sqrt(n));
+ }
+
+ p_value = 1.0 - sum1 + sum2;
+
+ fprintf(stats[TEST_CUSUM], "\t\t CUMULATIVE SUMS (FORWARD) TEST\n");
+ fprintf(stats[TEST_CUSUM], "\t\t-------------------------------------------\n");
+ fprintf(stats[TEST_CUSUM], "\t\tCOMPUTATIONAL INFORMATION:\n");
+ fprintf(stats[TEST_CUSUM], "\t\t-------------------------------------------\n");
+ fprintf(stats[TEST_CUSUM], "\t\t(a) The maximum partial sum = %d\n", z);
+ fprintf(stats[TEST_CUSUM], "\t\t-------------------------------------------\n");
+
+ if ( isNegative(p_value) || isGreaterThanOne(p_value) )
+ fprintf(stats[TEST_CUSUM], "\t\tWARNING: P_VALUE IS OUT OF RANGE\n");
+
+ fprintf(stats[TEST_CUSUM], "%s\t\tp_value = %f\n\n", p_value < ALPHA ? "FAILURE" : "SUCCESS", p_value);
+ fprintf(results[TEST_CUSUM], "%f\n", p_value);
+
+ // backwards
+ sum1 = 0.0;
+ for ( k=(-n/zrev+1)/4; k<=(n/zrev-1)/4; k++ ) {
+ sum1 += cephes_normal(((4*k+1)*zrev)/sqrt(n));
+ sum1 -= cephes_normal(((4*k-1)*zrev)/sqrt(n));
+ }
+ sum2 = 0.0;
+ for ( k=(-n/zrev-3)/4; k<=(n/zrev-1)/4; k++ ) {
+ sum2 += cephes_normal(((4*k+3)*zrev)/sqrt(n));
+ sum2 -= cephes_normal(((4*k+1)*zrev)/sqrt(n));
+ }
+ p_value = 1.0 - sum1 + sum2;
+
+ fprintf(stats[TEST_CUSUM], "\t\t CUMULATIVE SUMS (REVERSE) TEST\n");
+ fprintf(stats[TEST_CUSUM], "\t\t-------------------------------------------\n");
+ fprintf(stats[TEST_CUSUM], "\t\tCOMPUTATIONAL INFORMATION:\n");
+ fprintf(stats[TEST_CUSUM], "\t\t-------------------------------------------\n");
+ fprintf(stats[TEST_CUSUM], "\t\t(a) The maximum partial sum = %d\n", zrev);
+ fprintf(stats[TEST_CUSUM], "\t\t-------------------------------------------\n");
+
+ if ( isNegative(p_value) || isGreaterThanOne(p_value) )
+ fprintf(stats[TEST_CUSUM], "\t\tWARNING: P_VALUE IS OUT OF RANGE\n");
+
+ fprintf(stats[TEST_CUSUM], "%s\t\tp_value = %f\n\n", p_value < ALPHA ? "FAILURE" : "SUCCESS", p_value);
+ fprintf(results[TEST_CUSUM], "%f\n", p_value);
+}