Esempio n. 1
0
        public async Task TestLaplaceDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.LaplaceB01M0(rng);
            var fra  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fra.CountThis(await dist.NextNumber());
            }

            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(1.0000000000000000).Within(0.05));
            Assert.That(result[1], Is.EqualTo(0.9048374180359590).Within(0.05));
            Assert.That(result[2], Is.EqualTo(0.8187307530779810).Within(0.05));

            Assert.That(result[21], Is.EqualTo(0.1224564282529820).Within(0.05));
            Assert.That(result[22], Is.EqualTo(0.1108031583623340).Within(0.05));
            Assert.That(result[23], Is.EqualTo(0.1002588437228040).Within(0.05));

            Assert.That(result[50], Is.EqualTo(0.0067379469990855).Within(0.003));

            Assert.That(result[75], Is.EqualTo(0.0005530843701478).Within(0.0015));
            Assert.That(result[85], Is.EqualTo(0.0002034683690106).Within(0.0015));
            Assert.That(result[90], Is.EqualTo(0.0001234098040867).Within(0.0015));

            Assert.That(result[97], Is.EqualTo(0.0000612834950532).Within(0.0002));
            Assert.That(result[98], Is.EqualTo(0.0000554515994322).Within(0.0002));
            Assert.That(result[99], Is.EqualTo(0.0000501746820562).Within(0.0002));
        }
        public async Task TestExponentialDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.InverseExponentialLa5(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.007083408929052f).Within(0.008f));
            Assert.That(result[1], Is.EqualTo(0.007446583070924f).Within(0.008f));
            Assert.That(result[2], Is.EqualTo(0.007828377549226f).Within(0.008f));

            Assert.That(result[21], Is.EqualTo(0.020241911445804f).Within(0.05f));
            Assert.That(result[22], Is.EqualTo(0.021279736438377f).Within(0.05f));
            Assert.That(result[23], Is.EqualTo(0.022370771856166f).Within(0.05f));

            Assert.That(result[50], Is.EqualTo(0.08629358649937f).Within(0.02f));

            Assert.That(result[75], Is.EqualTo(0.301194211912202f).Within(0.03f));
            Assert.That(result[85], Is.EqualTo(0.496585303791409f).Within(0.05f));
            Assert.That(result[90], Is.EqualTo(0.637628151621772f).Within(0.06f));

            Assert.That(result[97], Is.EqualTo(0.904837418035959f).Within(0.08f));
            Assert.That(result[98], Is.EqualTo(0.951229424500713f).Within(0.08f));
            Assert.That(result[99], Is.EqualTo(1f).Within(0.08f));
        }
Esempio n. 3
0
        public async Task TestChiSquareDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.ChiSquareK4(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.016417705906679).Within(0.02));
            Assert.That(result[1], Is.EqualTo(0.032671644513723).Within(0.02));
            Assert.That(result[2], Is.EqualTo(0.048763041010352).Within(0.02));

            Assert.That(result[21], Is.EqualTo(0.32518779111264).Within(0.05));
            Assert.That(result[22], Is.EqualTo(0.338273451612642).Within(0.05));
            Assert.That(result[23], Is.EqualTo(0.351220492939994).Within(0.05));

            Assert.That(result[50], Is.EqualTo(0.65209223303425).Within(0.08));

            Assert.That(result[75], Is.EqualTo(0.857562207152294).Within(0.099));
            Assert.That(result[85], Is.EqualTo(0.923072405412387).Within(0.099));
            Assert.That(result[90], Is.EqualTo(0.952623623874265).Within(0.099));

            Assert.That(result[97], Is.EqualTo(0.990616879396201).Within(0.099));
            Assert.That(result[98], Is.EqualTo(0.995734077068522).Within(0.099));
            Assert.That(result[99], Is.EqualTo(1.00077558852585).Within(0.1));
        }
Esempio n. 4
0
        public async Task TestLogNormalDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.LogNormalS1M0(rng);
            var fra  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fra.CountThis(await dist.NextNumber());
            }

            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.001505531f).Within(0.003f));
            Assert.That(result[1], Is.EqualTo(0.014408709f).Within(0.01f));
            Assert.That(result[2], Is.EqualTo(0.043222256f).Within(0.02f));

            Assert.That(result[21], Is.EqualTo(0.876212056f).Within(0.15f));
            Assert.That(result[22], Is.EqualTo(0.895582226f).Within(0.15f));
            Assert.That(result[23], Is.EqualTo(0.912837250f).Within(0.15f));

            Assert.That(result[50], Is.EqualTo(0.948062005f).Within(0.2f));

            Assert.That(result[75], Is.EqualTo(0.768584762f).Within(0.089f));
            Assert.That(result[85], Is.EqualTo(0.697303612f).Within(0.089f));
            Assert.That(result[90], Is.EqualTo(0.663570581f).Within(0.089f));

            Assert.That(result[97], Is.EqualTo(0.618792767f).Within(0.089f));
            Assert.That(result[98], Is.EqualTo(0.612636410f).Within(0.089f));
            Assert.That(result[99], Is.EqualTo(0.606540679f).Within(0.089f));
        }
        public async Task TestExponentialDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.ExponentialLa5(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(1.0002177398625f).Within(0.05f));
            Assert.That(result[1], Is.EqualTo(0.951436545064811f).Within(0.05f));
            Assert.That(result[2], Is.EqualTo(0.905034437210948f).Within(0.05f));

            Assert.That(result[21], Is.EqualTo(0.35001394450853f).Within(0.05f));
            Assert.That(result[22], Is.EqualTo(0.332943563002074f).Within(0.05f));
            Assert.That(result[23], Is.EqualTo(0.31670571382568f).Within(0.05f));

            Assert.That(result[50], Is.EqualTo(0.082102871800213f).Within(0.01f));

            Assert.That(result[75], Is.EqualTo(0.023522866606758f).Within(0.01f));
            Assert.That(result[85], Is.EqualTo(0.014267339801329f).Within(0.01f));
            Assert.That(result[90], Is.EqualTo(0.011111415409621f).Within(0.01f));

            Assert.That(result[97], Is.EqualTo(0.007830082099077f).Within(0.008f));
            Assert.That(result[98], Is.EqualTo(0.007448204488898f).Within(0.008f));
            Assert.That(result[99], Is.EqualTo(0.007084951269538f).Within(0.008f));
        }
Esempio n. 6
0
        public async Task TestExponentialDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.ExponentialLa10(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(1.00075018434777f).Within(0.05f));
            Assert.That(result[1], Is.EqualTo(0.905516212904248f).Within(0.05f));
            Assert.That(result[2], Is.EqualTo(0.81934495207398f).Within(0.05f));

            Assert.That(result[21], Is.EqualTo(0.122548293148741f).Within(0.12f));
            Assert.That(result[22], Is.EqualTo(0.110886281157421f).Within(0.12f));
            Assert.That(result[23], Is.EqualTo(0.10033405633809f).Within(0.12f));

            Assert.That(result[50], Is.EqualTo(0.00674300170146f).Within(0.005f));

            Assert.That(result[75], Is.EqualTo(0.000553499285385f).Within(0.001f));
            Assert.That(result[85], Is.EqualTo(0.000203621007796f).Within(0.001f));
            Assert.That(result[90], Is.EqualTo(0.00012350238419f).Within(0.001f));

            Assert.That(result[97], Is.EqualTo(0.0000613294689720f).Within(0.0008f));
            Assert.That(result[98], Is.EqualTo(0.0000554931983541f).Within(0.0008f));
            Assert.That(result[99], Is.EqualTo(0.0000502123223173f).Within(0.0008f));
        }
Esempio n. 7
0
        public async Task TestUniformDistribution01()
        {
            const double A        = 0.0;
            const double B        = 1.0;
            const double MEAN     = 0.5 * (A + B);
            const double VARIANCE = (1.0 / 12.0) * (B - A) * (B - A);

            var stats = new RunningStatistics();
            var fra   = new FrequencyAnalysis();

            using var rng = new MultiThreadedRng();

            for (var n = 0; n < 100_000; n++)
            {
                var value = await rng.GetUniform();

                stats.Push(value);
                fra.CountThis(value);
            }

            fra.NormalizeAndPlotEvents(TestContext.WriteLine);
            fra.PlotOccurence(TestContext.WriteLine);
            TestContext.WriteLine($"mean={MEAN} vs. {stats.Mean}");
            TestContext.WriteLine($"variance={VARIANCE} vs {stats.Variance}");

            Assert.That(stats.Mean, Is.EqualTo(MEAN).Within(0.01), "Mean is out of range");
            Assert.That(stats.Variance, Is.EqualTo(VARIANCE).Within(0.001), "Variance is out of range");
        }
Esempio n. 8
0
        public async Task TestNormalDistribution01()
        {
            const float MEAN = 0.5f;
            const float STANDARD_DEVIATION = 0.2f;

            using var rng = new MultiThreadedRng();
            var dist  = new FastRng.Float.Distributions.NormalS02M05(rng);
            var stats = new RunningStatistics();
            var fra   = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                var nextNumber = await dist.NextNumber();

                stats.Push(nextNumber);
                fra.CountThis(nextNumber);
            }

            fra.NormalizeAndPlotEvents(TestContext.WriteLine);

            TestContext.WriteLine($"mean={MEAN} vs. {stats.Mean}");
            TestContext.WriteLine($"variance={STANDARD_DEVIATION * STANDARD_DEVIATION} vs {stats.Variance}");

            Assert.That(stats.Mean, Is.EqualTo(MEAN).Within(0.01f), "Mean is out of range");
            Assert.That(stats.Variance, Is.EqualTo(STANDARD_DEVIATION * STANDARD_DEVIATION).Within(0.01f), "Variance is out of range");
        }
Esempio n. 9
0
        public async Task TestBetaDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.BetaA2B5(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.11719271).Within(0.3));
            Assert.That(result[1], Is.EqualTo(0.22505783).Within(0.3));
            Assert.That(result[2], Is.EqualTo(0.32401717).Within(0.3));

            Assert.That(result[21], Is.EqualTo(0.99348410).Within(0.3));
            Assert.That(result[22], Is.EqualTo(0.98639433).Within(0.3));
            Assert.That(result[23], Is.EqualTo(0.97684451).Within(0.3));

            Assert.That(result[50], Is.EqualTo(0.35868592).Within(0.3));

            Assert.That(result[75], Is.EqualTo(0.03076227).Within(0.03));
            Assert.That(result[85], Is.EqualTo(0.00403061).Within(0.03));
            Assert.That(result[90], Is.EqualTo(0.00109800).Within(0.01));

            Assert.That(result[97], Is.EqualTo(0.00000191).Within(0.000003));
            Assert.That(result[98], Is.EqualTo(0.00000012).Within(0.0000003));
            Assert.That(result[99], Is.EqualTo(0.00000000).Within(0.0000003));
        }
Esempio n. 10
0
        public async Task TestGammaDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.GammaA5B15(rng);
            var fra  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fra.CountThis(await dist.NextNumber());
            }

            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.0000929594237282f).Within(0.0008f));
            Assert.That(result[1], Is.EqualTo(0.0012801746797876f).Within(0.002f));
            Assert.That(result[2], Is.EqualTo(0.0055781488254349f).Within(0.004f));

            Assert.That(result[21], Is.EqualTo(0.9331608887752720f).Within(0.09f));
            Assert.That(result[22], Is.EqualTo(0.9594734828891280f).Within(0.09f));
            Assert.That(result[23], Is.EqualTo(0.9790895765535350f).Within(0.09f));

            Assert.That(result[50], Is.EqualTo(0.3478287795336570f).Within(0.06f));

            Assert.That(result[75], Is.EqualTo(0.0403399049422936f).Within(0.009f));
            Assert.That(result[85], Is.EqualTo(0.0163628388658126f).Within(0.009f));
            Assert.That(result[90], Is.EqualTo(0.0097147611446660f).Within(0.005f));

            Assert.That(result[97], Is.EqualTo(0.0041135143233153f).Within(0.008f));
            Assert.That(result[98], Is.EqualTo(0.0036872732029996f).Within(0.008f));
            Assert.That(result[99], Is.EqualTo(0.0033038503429554f).Within(0.008f));
        }
Esempio n. 11
0
        public async Task TestCauchyDistribution01()
        {
            // The properties of the cauchy distribution cannot be tested by mean, media or variance,
            // cf. https://en.wikipedia.org/wiki/Cauchy_distribution#Explanation_of_undefined_moments

            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.976990739772031f).Within(0.06f));
            Assert.That(result[1], Is.EqualTo(0.948808314586299f).Within(0.06f));
            Assert.That(result[2], Is.EqualTo(0.905284997403441f).Within(0.06f));

            Assert.That(result[21], Is.EqualTo(0.168965864241396f).Within(0.04f));
            Assert.That(result[22], Is.EqualTo(0.156877686354491f).Within(0.04f));
            Assert.That(result[23], Is.EqualTo(0.145970509936354f).Within(0.04f));

            Assert.That(result[50], Is.EqualTo(0.036533159835978f).Within(0.01f));

            Assert.That(result[75], Is.EqualTo(0.016793067514802f).Within(0.01f));
            Assert.That(result[85], Is.EqualTo(0.01316382933791f).Within(0.005f));
            Assert.That(result[90], Is.EqualTo(0.011773781734516f).Within(0.005f));

            Assert.That(result[97], Is.EqualTo(0.010168596941156f).Within(0.005f));
            Assert.That(result[98], Is.EqualTo(0.009966272570142f).Within(0.005f));
            Assert.That(result[99], Is.EqualTo(0.00976990739772f).Within(0.005f));
        }
Esempio n. 12
0
        public async Task TestBetaDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.BetaA5B2(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.0000001f).Within(0.0000003f));
            Assert.That(result[1], Is.EqualTo(0.0000019f).Within(0.00001f));
            Assert.That(result[2], Is.EqualTo(0.0000096f).Within(0.0004f));

            Assert.That(result[21], Is.EqualTo(0.0222918f).Within(0.03f));
            Assert.That(result[22], Is.EqualTo(0.0262883f).Within(0.03f));
            Assert.That(result[23], Is.EqualTo(0.0307623f).Within(0.03f));

            Assert.That(result[50], Is.EqualTo(0.4044237f).Within(0.2f));

            Assert.That(result[75], Is.EqualTo(0.9768445f).Within(0.15f));
            Assert.That(result[85], Is.EqualTo(0.9552714f).Within(0.15f));
            Assert.That(result[90], Is.EqualTo(0.8004420f).Within(0.35f));

            Assert.That(result[97], Is.EqualTo(0.2250578f).Within(0.03f));
            Assert.That(result[98], Is.EqualTo(0.1171927f).Within(0.03f));
            Assert.That(result[99], Is.EqualTo(0f).Within(0.0004f));
        }
        public async Task TestInverseGammaDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.InverseGammaA3B05(rng);
            var fra  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fra.CountThis(await dist.NextNumber());
            }

            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.0000000000000003).Within(0.0000001));
            Assert.That(result[1], Is.EqualTo(0.0000011605257228).Within(0.00001));
            Assert.That(result[2], Is.EqualTo(0.0009536970016103).Within(0.0015));

            Assert.That(result[21], Is.EqualTo(0.5880485243048120).Within(0.05));
            Assert.That(result[22], Is.EqualTo(0.5433842148912880).Within(0.05));
            Assert.That(result[23], Is.EqualTo(0.5017780549216030).Within(0.05));

            Assert.That(result[50], Is.EqualTo(0.0741442015957425).Within(0.009));

            Assert.That(result[75], Is.EqualTo(0.0207568945092484).Within(0.006));
            Assert.That(result[85], Is.EqualTo(0.0136661506653688).Within(0.006));
            Assert.That(result[90], Is.EqualTo(0.0112550619601327).Within(0.006));

            Assert.That(result[97], Is.EqualTo(0.0087026933539773).Within(0.005));
            Assert.That(result[98], Is.EqualTo(0.0083995375385004).Within(0.005));
            Assert.That(result[99], Is.EqualTo(0.0081094156379928).Within(0.005));
        }
Esempio n. 14
0
        public async Task TestCauchyDistribution01()
        {
            // The properties of the cauchy distribution cannot be tested by mean, media or variance,
            // cf. https://en.wikipedia.org/wiki/Cauchy_distribution#Explanation_of_undefined_moments

            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.CauchyLorentzX1(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.009966272570142f).Within(0.003f));
            Assert.That(result[1], Is.EqualTo(0.010168596941156f).Within(0.004f));
            Assert.That(result[2], Is.EqualTo(0.010377123221893f).Within(0.005f));

            Assert.That(result[21], Is.EqualTo(0.015956672819692f).Within(0.005f));
            Assert.That(result[22], Is.EqualTo(0.016366904083094f).Within(0.005f));
            Assert.That(result[23], Is.EqualTo(0.016793067514802f).Within(0.005f));

            Assert.That(result[50], Is.EqualTo(0.039454644029179f).Within(0.015f));

            Assert.That(result[75], Is.EqualTo(0.145970509936354f).Within(0.03f));
            Assert.That(result[85], Is.EqualTo(0.333365083503296f).Within(0.1f));
            Assert.That(result[90], Is.EqualTo(0.545171628270584f).Within(0.1f));

            Assert.That(result[97], Is.EqualTo(0.948808314586302f).Within(0.06f));
            Assert.That(result[98], Is.EqualTo(0.976990739772032f).Within(0.03f));
            Assert.That(result[99], Is.EqualTo(0.986760647169751f).Within(0.02f));
        }
Esempio n. 15
0
        public async Task TestStudentTDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.StudentTNu1(rng);
            var fra  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fra.CountThis(await dist.NextNumber());
            }

            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(1.000000000).Within(0.2));
            Assert.That(result[1], Is.EqualTo(0.999700120).Within(0.2));
            Assert.That(result[2], Is.EqualTo(0.999200719).Within(0.2));

            Assert.That(result[21], Is.EqualTo(0.953929798).Within(0.2));
            Assert.That(result[22], Is.EqualTo(0.949852788).Within(0.2));
            Assert.That(result[23], Is.EqualTo(0.945631619).Within(0.2));

            Assert.That(result[50], Is.EqualTo(0.793667169).Within(0.095));

            Assert.That(result[75], Is.EqualTo(0.633937627).Within(0.09));
            Assert.That(result[85], Is.EqualTo(0.574902276).Within(0.09));
            Assert.That(result[90], Is.EqualTo(0.547070729).Within(0.09));

            Assert.That(result[97], Is.EqualTo(0.510150990).Within(0.09));
            Assert.That(result[98], Is.EqualTo(0.505075501).Within(0.09));
            Assert.That(result[99], Is.EqualTo(0.500050000).Within(0.09));
        }
Esempio n. 16
0
        public async Task TestChiSquareDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.ChiSquareK10(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                var value = await dist.NextNumber();

                fqa.CountThis(value);
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.0000000164021588f).Within(0.0000002f));
            Assert.That(result[1], Is.EqualTo(0.0000002611256437f).Within(0.000003f));
            Assert.That(result[2], Is.EqualTo(0.0000013153553250f).Within(0.00002f));

            Assert.That(result[21], Is.EqualTo(0.003459320622874f).Within(0.005f));
            Assert.That(result[22], Is.EqualTo(0.004111875573379f).Within(0.005f));
            Assert.That(result[23], Is.EqualTo(0.004850674298859f).Within(0.005f));

            Assert.That(result[50], Is.EqualTo(0.086418773275056f).Within(0.05f));

            Assert.That(result[75], Is.EqualTo(0.376092741436046f).Within(0.08f));
            Assert.That(result[85], Is.EqualTo(0.586569751611096f).Within(0.08f));
            Assert.That(result[90], Is.EqualTo(0.717189736168766f).Within(0.08f));

            Assert.That(result[97], Is.EqualTo(0.931477764640217f).Within(0.08f));
            Assert.That(result[98], Is.EqualTo(0.965244855212136f).Within(0.08f));
            Assert.That(result[99], Is.EqualTo(0.999827884370044f).Within(0.08f));
        }
Esempio n. 17
0
        public async Task TestBetaDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.BetaA2B2(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fqa.CountThis(await dist.NextNumber());
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.0396).Within(0.3));
            Assert.That(result[1], Is.EqualTo(0.0784).Within(0.3));
            Assert.That(result[2], Is.EqualTo(0.1164).Within(0.3));

            Assert.That(result[21], Is.EqualTo(0.6864).Within(0.3));
            Assert.That(result[22], Is.EqualTo(0.7084).Within(0.3));
            Assert.That(result[23], Is.EqualTo(0.7296).Within(0.3));

            Assert.That(result[50], Is.EqualTo(0.9996).Within(0.3));

            Assert.That(result[75], Is.EqualTo(0.7296).Within(0.3));
            Assert.That(result[85], Is.EqualTo(0.4816).Within(0.3));
            Assert.That(result[90], Is.EqualTo(0.3276).Within(0.3));

            Assert.That(result[97], Is.EqualTo(0.0784).Within(0.3));
            Assert.That(result[98], Is.EqualTo(0.0396).Within(0.3));
            Assert.That(result[99], Is.EqualTo(0.0000).Within(0.3));
        }
Esempio n. 18
0
        public async Task TestChiSquareDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.ChiSquareK1(rng);
            var fqa  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                var value = await dist.NextNumber();

                fqa.CountThis(value);
            }

            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(1.00032041964207).Within(0.004));
            Assert.That(result[1], Is.EqualTo(0.70380551227703).Within(0.05));
            Assert.That(result[2], Is.EqualTo(0.571788691668126).Within(0.05));

            Assert.That(result[21], Is.EqualTo(0.192011337664754).Within(0.07));
            Assert.That(result[22], Is.EqualTo(0.186854182385981).Within(0.07));
            Assert.That(result[23], Is.EqualTo(0.182007652359976).Within(0.07));

            Assert.That(result[50], Is.EqualTo(0.109088865614875).Within(0.06));

            Assert.That(result[75], Is.EqualTo(0.07886274821701).Within(0.02));
            Assert.That(result[85], Is.EqualTo(0.070520397849883).Within(0.02));
            Assert.That(result[90], Is.EqualTo(0.066863009640287).Within(0.02));

            Assert.That(result[97], Is.EqualTo(0.062214737436948).Within(0.02));
            Assert.That(result[98], Is.EqualTo(0.061590997922187).Within(0.02));
            Assert.That(result[99], Is.EqualTo(0.060976622578824).Within(0.02));
        }
Esempio n. 19
0
        public async Task TestWeibullDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Float.Distributions.WeibullK05La1(rng);
            var fra  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fra.CountThis(await dist.NextNumber());
            }

            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(1.000000000f).Within(0.2f));
            Assert.That(result[1], Is.EqualTo(0.678415772f).Within(0.09f));
            Assert.That(result[2], Is.EqualTo(0.536595233f).Within(0.09f));

            Assert.That(result[21], Is.EqualTo(0.147406264f).Within(0.02f));
            Assert.That(result[22], Is.EqualTo(0.142654414f).Within(0.02f));
            Assert.That(result[23], Is.EqualTo(0.138217760f).Within(0.02f));

            Assert.That(result[50], Is.EqualTo(0.075769787f).Within(0.095f));

            Assert.That(result[75], Is.EqualTo(0.053016799f).Within(0.05f));
            Assert.That(result[85], Is.EqualTo(0.047144614f).Within(0.05f));
            Assert.That(result[90], Is.EqualTo(0.044629109f).Within(0.05f));

            Assert.That(result[97], Is.EqualTo(0.041484591f).Within(0.05f));
            Assert.That(result[98], Is.EqualTo(0.041067125f).Within(0.05f));
            Assert.That(result[99], Is.EqualTo(0.040656966f).Within(0.05f));
        }
Esempio n. 20
0
        public async Task TestLaplaceDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.LaplaceB01M05(rng);
            var fra  = new FrequencyAnalysis();

            for (var n = 0; n < 100_000; n++)
            {
                fra.CountThis(await dist.NextNumber());
            }

            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.0074465830709244).Within(0.004));
            Assert.That(result[1], Is.EqualTo(0.0082297470490200).Within(0.004));
            Assert.That(result[2], Is.EqualTo(0.0090952771016958).Within(0.01));

            Assert.That(result[21], Is.EqualTo(0.0608100626252180).Within(0.02));
            Assert.That(result[22], Is.EqualTo(0.0672055127397498).Within(0.02));
            Assert.That(result[23], Is.EqualTo(0.0742735782143340).Within(0.02));

            Assert.That(result[50], Is.EqualTo(1.0000000000000000).Within(0.2));

            Assert.That(result[75], Is.EqualTo(0.0742735782143335).Within(0.01));
            Assert.That(result[85], Is.EqualTo(0.0273237224472924).Within(0.01));
            Assert.That(result[90], Is.EqualTo(0.0165726754017612).Within(0.01));

            Assert.That(result[97], Is.EqualTo(0.0082297470490200).Within(0.004));
            Assert.That(result[98], Is.EqualTo(0.0074465830709243).Within(0.004));
            Assert.That(result[99], Is.EqualTo(0.0067379469990854).Within(0.004));
        }
        public async Task TestExponentialDistribution01()
        {
            using var rng = new MultiThreadedRng();
            var dist = new FastRng.Double.Distributions.InverseExponentialLa10(rng);
            var fqa = new FrequencyAnalysis();
            
            for (var n = 0; n < 100_000; n++)
                fqa.CountThis(await dist.NextNumber());
            
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);

            Assert.That(result[0], Is.EqualTo(0.0000501746820562).Within(0.0003));
            Assert.That(result[1], Is.EqualTo(0.0000554515994322).Within(0.0003));
            Assert.That(result[2], Is.EqualTo(0.0000612834950532).Within(0.0003));
            
            Assert.That(result[21], Is.EqualTo(0.00040973497898).Within(0.00045));
            Assert.That(result[22], Is.EqualTo(0.000452827182887).Within(0.00050));
            Assert.That(result[23], Is.EqualTo(0.000500451433441).Within(0.00051));
            
            Assert.That(result[50], Is.EqualTo(0.007446583070924).Within(0.003));
            
            Assert.That(result[75], Is.EqualTo(0.090717953289412).Within(0.02));
            Assert.That(result[85], Is.EqualTo(0.246596963941606).Within(0.05));
            Assert.That(result[90], Is.EqualTo(0.406569659740598).Within(0.08));
            
            Assert.That(result[97], Is.EqualTo(0.81873075307798).Within(0.08));
            Assert.That(result[98], Is.EqualTo(0.904837418035957).Within(0.08));
            Assert.That(result[99], Is.EqualTo(0.999999999999999).Within(0.08));
        }
Esempio n. 22
0
        public void Compare_Opposite()
        {
            var result = FrequencyAnalysis.Compare(
                new Dictionary <char, double>
            {
                { 'A', 0.2 },
                { 'B', 0.8 },
            },
                new Dictionary <char, double>
            {
                { 'C', 0.3 },
                { 'D', 0.7 },
            }
                );

            Assert.AreEqual(0, result);
        }
Esempio n. 23
0
        public void FreqGeneratesCorrectly()
        {
            var bytes = Encoding.ASCII.GetBytes(THE_QBF);
            var freq  = new FrequencyAnalysis(bytes, FreqTableType.AlphaOnly);
            var list  = freq.GetFrequencyCounts().ToArray();

            Assert.AreEqual(1, list[97], "# A incorrect");
            Assert.AreEqual(4, list[111], "# O incorrect");
            var vals = list.Where(n => n > 0).ToArray();

            CollectionAssert.AreEqual(QBF_COUNTS, vals, "Final counts are incorrect");
            double letterAPct  = freq.GetFrequencyPctByChar('a');
            double letterAPct2 = freq.GetFrequencyPctByChar('A');

            Assert.AreEqual(letterAPct, letterAPct2, "Letter A and letter a not equal");
            Assert.AreEqual(Math.Round(100.0 / (double)THE_QBF.Length, 5), letterAPct, "Letter A not 1/43 freq");
        }
Esempio n. 24
0
        public void Compare_Identical()
        {
            var result = FrequencyAnalysis.Compare(
                new Dictionary <char, double>
            {
                { 'A', 0.2 },
                { 'B', 0.5 },
                { 'C', 0.3 },
            },
                new Dictionary <char, double>
            {
                { 'A', 0.2 },
                { 'B', 0.5 },
                { 'C', 0.3 },
            }
                );

            Assert.AreEqual(1, result);
        }
Esempio n. 25
0
        public static List <Hashtable> AboutPerson(string name, int quantity)
        {
            // Grab test data
            List <Hashtable> training_data = new List <Hashtable>();

            for (int i = 1; i < quantity + 1; i++)
            {
                string data = File.ReadAllText("../../Corpus/" + SanitizeName(name) + "-" + i + ".txt");

                training_data.Add(new Hashtable()
                {
                    { "Vowel Frequency", FrequencyAnalysis.VowelFrequency(data) },
                    { "Consonant Frequency", FrequencyAnalysis.ConsonantFrequency(data) },
                    { "Digit Frequency", FrequencyAnalysis.DigitFrequency(data) },
                    { "Punctuation Frequency", FrequencyAnalysis.PunctuationFrequency(data) },
                    { "Spacing Frequency", FrequencyAnalysis.SpacingFrequency(data) },
                    { "Special Character Frequency", FrequencyAnalysis.SpecialCharacterFrequency(data) },
                    { "Word Count", FrequencyAnalysis.WordCount(data) },
                    { "Characters Per Word", FrequencyAnalysis.CharactersPerWord(data) },
                    { "Words Per Sentence", FrequencyAnalysis.WordsPerSentence(data) },
                    { "Preposition Frequency", FrequencyAnalysis.PrepositionFrequency(data) },
                    { "Pronoun Frequency", FrequencyAnalysis.PronounFrequency(data) },
                    { "Determiner Frequency", FrequencyAnalysis.DeterminerFrequency(data) },
                    { "Conjunction Frequency", FrequencyAnalysis.ConjunctionFrequency(data) },
                    { "Attribution Frequency", FrequencyAnalysis.AttributionFrequency(data) },
                    { "Link Frequency", FrequencyAnalysis.LinkFrequency(data) },
                    { "1-letter Words", FrequencyAnalysis.WordsOfLength(1, 1, data) },
                    { "2-letter Words", FrequencyAnalysis.WordsOfLength(2, 2, data) },
                    { "3-letter Words", FrequencyAnalysis.WordsOfLength(3, 3, data) },
                    { "4-letter Words", FrequencyAnalysis.WordsOfLength(4, 4, data) },
                    { "5-letter Words", FrequencyAnalysis.WordsOfLength(5, 5, data) },
                    { "6-letter Words", FrequencyAnalysis.WordsOfLength(6, 6, data) },
                    { "7-letter Words", FrequencyAnalysis.WordsOfLength(7, 7, data) },
                    { "8-10-letter Words", FrequencyAnalysis.WordsOfLength(8, 10, data) },
                    { "11-20-letter Words", FrequencyAnalysis.WordsOfLength(11, 20, data) }
                });
            }

            return(training_data);
        }
Esempio n. 26
0
        public static byte[] Encode(byte[] data)
        {
            FrequencyAnalysis frequencyAnalysis = new FrequencyAnalysis(data);

            return(data);
        }
 public void DeleteAnalysis(FrequencyAnalysis analysis)
 {
     FrequencyAnalysis.Remove(analysis);
     context.SaveChanges();
 }
 public static void Main()
 { 
     // 2 variables to store path of file and txt in that file
     string path, text;
     
     // Keep prompting the user for the path if he/she doesn't co-operate
     do
     {
         Console.Write("The file's path: ");
         path = Console.ReadLine();
     
     }
     while (string.IsNullOrEmpty(path?.Trim()));
     
     // Check if the path is valid or invalid
     try
     {
         // Store the text in the file if the path is VALID
         text = File.ReadAllText(path);
     }
     catch (Exception)
     {
         // Display useful messages and exit if the path is INVALID
         Console.WriteLine("FILE DOES NOT EXIST !");
         Console.WriteLine("-> please enter the file's full path");
         return;
     }
     
     // Store the number of letters/words/sentences in text in their variables
     var numberOfLetters = BasicAnalysis.CharacterCounter(text.Trim());
     var numberOfWords = BasicAnalysis.WordCounter(text.Trim());
     var numberOfSentences = BasicAnalysis.SentenceCounter(text.Trim());
     
     // Store the average number of letters\sentences per 100 words
     var averageNumberOfLetters = (int) Math.Round(ReadabilityAnalysis.LettersAverageNumber(numberOfLetters, numberOfWords));
     var averageNumberOfSentences = (int) Math.Round(ReadabilityAnalysis.SentencesAverageNumber(numberOfSentences, numberOfWords));
     
     // Populate the array with the number of times the alphabets have shown in text 
     for (var i = 0; i < Globals.AlphabetArray.Length; i++)
     {
         Globals.AlphabetFrequencies[i] = FrequencyAnalysis.Frequency(text, Globals.AlphabetArray[i]);
     }
     
     // Store the frequency of the letter that has appeared in text only
     /* It's max size is 26 because it won't store more than the alphabets */
     var frequencies = new int[Globals.Alphabet];
     // Store frequency's percentage of letter that has appeared in text
     /* It's with max size 26 because it won't store more than the alphabets */
     var frequenciesPercentage = new float[Globals.Alphabet];
     
     // Iterate over the array stored the frequencies of all alphabets
     for (var i = 0; i < Globals.AlphabetFrequencies.Length; i++)
     {
         // Check if the letter has appeared at least one in text
         if (Globals.AlphabetFrequencies[i] > 0)
         {
             // Populate "frequencies" array with that letter's frequency
             frequencies[i] = Globals.AlphabetFrequencies[i];
             // Populate "frequenciesPercentage" array with that letter's frequency percentage 
             frequenciesPercentage[i] = FrequencyAnalysis.FrequencyPercentage(text, Globals.AlphabetArray[i]);
             
             // Print the frequency, frequency percentage and histogram to console
             Console.Write("Frequency of {0}: {1:F}%\t", Globals.AlphabetArray[i], frequenciesPercentage[i]);
             FrequencyAnalysis.HistogramDrawer(text, Globals.AlphabetArray[i]);
             Console.WriteLine();
         }
     }
     // Display the readability of the text
     ReadabilityAnalysis.Readability(averageNumberOfLetters, averageNumberOfSentences);
     // Display the Most frequently used word
     Console.WriteLine("The most frequently used word is: " + AdvancedAnalysis.MostFrequentlyUsedWord(text));
 }