static void distributionAnalysis (double *r, double *f, double *dr, int N, int rPower, double Aspect, double *area, double *mode, double *mean, double *stdDev, int AnalysisType, double *entropy) { int i, modeIndex; double dist, R, rVol, modeVal = 0; double sumY = 0.0, sumXY = 0.0, sumXXY = 0.0; *area = 0.0; for (i = 1; i <= N; i++) { /* * calculate the volume for an ellipsoid or radius r[i] */ R = r[i] * 1.e-8; /* convert to cm */ rVol = (4 * Pi / 3) * R*R*R*Aspect; dist = f[i] / dr[i] * pow( (double) rVol, (double) rPower); if ( (i == 1) || (dist >= modeVal) ) { modeIndex = i; modeVal = dist; } *area += dist * dr[i]; sumY += dist * dr[i]; sumXY += dist * dr[i] * r[i]; sumXXY += dist * dr[i] * r[i] * r[i]; } *mode = r[modeIndex]; *mean = sumXY / sumY; *stdDev = sqrt( (sumXXY / sumY) - pow((double) sumXY / sumY, (double) 2) ); *entropy = 0.0; if (AnalysisType == 1) for (i = 1; i <= N; i++) { /* * calculate the volume for an ellipsoid of radius r[i] */ R = r[i] * 1.e-8; /* convert to cm */ rVol = (4 * Pi / 3) * R*R*R*Aspect; dist = f[i] / dr[i] * pow( (double) rVol, (double) rPower); *entropy += ENTROPY(dist * dr[i] / (*area)); } }
ottery_getentropy_impl(buf, &status, test_sources, N)); tt_mem_op("aaaaabbbbbbbbbbccccddddddddeeeeee", ==, buf, 33); tt_assert(iszero(buf + 33, sizeof(buf) - 33)); tt_int_op(status, ==, 0); end: ; #undef N } #define ENTROPY(name, flags) \ { #name, test_entropy_source, TT_FORK | (flags), &entropy_source_setup, \ (void*)ottery_getentropy_ ## name } static struct testcase_t entropy_tests[] = { ENTROPY(rdrand, 0), ENTROPY(getrandom, 0), ENTROPY(getentropy, 0), ENTROPY(cryptgenrandom, 0), ENTROPY(dev_urandom, 0), ENTROPY(dev_hwrandom, OT_ENT_IFFY), ENTROPY(egd, 0), ENTROPY(proc_uuid, 0), ENTROPY(linux_sysctl, 0), ENTROPY(bsd_sysctl, 0), ENTROPY(fallback_kludge, 0), #ifndef _WIN32 { "generic_device", test_entropy_generic_device, TT_FORK, NULL, NULL }, #endif { "dispatcher", test_entropy_dispatcher, TT_FORK, NULL, NULL }, END_OF_TESTCASES