/usr/share/doc/libsprng2-doc/TESTS/equidist.c is in libsprng2-doc 2.0a-10.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | /*********************************************************************
Equidistribution Test
*********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "tests.h"
/* # of parameters for the test engin */
#define NUM_TEST_ENGIN_PARAM 2
/* # of divisions between [0,1) */
static long numDiv;
/* # of random numbers being tested */
static long numRanNum;
/* # of tests repeated */
static long numRepeat;
/* Array of bins */
static long *bins;
/* Array of corresponding probabilities */
static double *probs;
/* Array of chi-squares */
static double *chiSqrs;
/********************************************************************/
#define FATAL_ABORT printf("Program terminated.\n"); exit(0)
/*------------------------------------------------------------------*/
#ifdef __STDC__
void initTest(int argc, char *argv[]) {
#else
void initTest(argc, *argv[]) int argc; char *argv[]; {
#endif
int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM;
long index;
double temp;
if (argc<(numParam+1)) {
printf("Error: %i number of parameters needed\n", numParam);
FATAL_ABORT;
}
numDiv = atol(argv[N_STREAM_PARAM+1]);
numRanNum = atol(argv[N_STREAM_PARAM+2]);
if ((numDiv<=0) || (numRanNum<=0)) {
printf("Error: incorrect parameter value(s)\n");
FATAL_ABORT;
}
numRepeat = init_tests(argc, argv);
bins = mymalloc(sizeof(long)*numDiv);
probs = mymalloc(sizeof(double)*numDiv);
chiSqrs = mymalloc(sizeof(double)*NTESTS);
temp = 1.0 / numDiv;
for (index=0;index<numDiv;index++) probs[index] = temp;
}
/*------------------------------------------------------------------*/
#ifdef __STDC__
void deinitTest(void) {
#else
void deinitTest() {
#endif
free(bins);
free(probs);
free(chiSqrs);
}
/*------------------------------------------------------------------*/
#define PROC_ONE_NUMBER { \
long binIndex; \
\
binIndex = get_rn() * numDiv; \
bins[binIndex]++; \
}
/********************************************************************/
#ifdef __STDC__
void main(int argc, char *argv[]) {
#else
void main(argc, argv) int argc; char *argv[]; {
#endif
long curRound, index;
double KSvalue, KSprob;
int temp, Bins_used;
initTest(argc, argv);
for (curRound=0;curRound<numRepeat;curRound++) {
for (index=0;index<numDiv;index++) bins[index] = 0;
for (index=0;index<numRanNum;index++) PROC_ONE_NUMBER;
chiSqrs[curRound] = chisquare(bins, probs, numRanNum, numDiv, &Bins_used);
/*printf("\tChisquare for stream = %f, %% = %f\n",chiSqrs[curRound] ,
chipercent(chiSqrs[curRound],numDiv-1));*/
next_stream();
}
#if defined(SPRNG_MPI)
getKSdata(chiSqrs,NTESTS);
#endif
if(proc_rank == 0)
{
set_d_of_f(Bins_used-1);
KSvalue = KS(chiSqrs, NTESTS, chiF);
KSprob = KSpercent(KSvalue, NTESTS);
printf("Result: KS value = %f\n", KSvalue);
printf(" KS value prob = %.2f %%\n\n", KSprob*100.0);
}
deinitTest();
#if defined(SPRNG_MPI)
MPI_Finalize();
#endif
}
|