Exemple #1
0
        HoistRandom <TRng, TValue>(
            RandomCxt <TRng> _cxt,
            Maybe <TValue> value)
        {
            var m = new MaybeT <Random <TRng, TValue>, Random <TRng, Maybe <TValue> >, Maybe <TValue>, TValue>();

            return((MaybeT <Random <TRng, TValue>, Random <TRng, Maybe <TValue> >, Maybe <TValue>, TValue>)m.Hoist(value));
        }
Exemple #2
0
        public static async Task LinqRandomTest()
        {
            var cxt = new RandomCxt <Random>();

            var init        = 5;
            var computation =
                from x in MaybeT.Lift(cxt.RandomInt())
                from y in MaybeT.Lift(cxt.RandomInt(20, 30))
                from z in MaybeT.Lift(cxt.RandomInts(30, 100, 40))
                from u in MaybeT.Lift(cxt.Random32Bits())
                from v in MaybeT.Lift(cxt.Random64Bits())
                let bs = new byte[16]
                         from w in MaybeT.Lift(cxt.RandomBytes(bs))
                         from t in MaybeT.Lift(cxt.RandomDouble())
                         from s in MaybeT.Lift(cxt.RandomDouble(4.5, 8.9))
                         from r in MaybeT.Lift(cxt.RandomDoubles(4.5, 8.9, 20))
                         from q in MaybeT.Lift(cxt.RandomGaussianDouble(50, 2))
                         from p in MaybeT.Lift(cxt.RandomGaussianDoubles(50, 2, 1000))
                         from _ in MaybeT.HoistRandom(cxt, Maybe.JustIf(init >= 3, () => new Unit()))
                         from o in MaybeT.Lift(cxt.RandomInt())
                         select new { x, y, z, u, v, w, t, s, r, q, p, o };

            var value = await computation.Run.RunRandom().Run();

            Assert.True(value.HasValue);

            var res = value.Value();

            Assert.True(res.y >= 20 && res.y < 30);
            Assert.Equal(40, res.z.Count);
            Assert.All(res.z, z => { Assert.True(z >= 30 && z < 100); });
            Assert.True(res.s >= 4.5 && res.s < 8.9);
            Assert.Equal(20, res.r.Count);
            Assert.All(res.r, r => { Assert.True(r >= 4.5 && r < 8.9); });

            //This was tested by hand, but only visually, not via a frequentist test.
            var gaussian = string.Join(";", res.p);

            init  = 0;
            value = await computation.Run.RunRandom().Run();

            Assert.False(value.HasValue);
        }