Ejemplo n.º 1
0
        public void SfmtFillArray64ErrorTest()
        {
            const int size = 1024;

            var buffer = new AlignedArray <ulong>(size, 16);

            using var actual = new SfmtPrimitiveState();
            InitGenRand(actual, 1234);
            GenRandUint64(actual);

            using var expected = new SfmtPrimitiveState();
            DeepCopy(actual, expected);


            Assert.Throws <ArgumentException>(() => FillArray64(actual, buffer, size));
            Equal(expected, actual);

            InitGenRand(actual, 1234);
            DeepCopy(actual, expected);

            Assert.Throws <ArgumentOutOfRangeException>(() => FillArray64(actual, buffer, 1023));
            Assert.Throws <ArgumentOutOfRangeException>(() => FillArray64(actual, buffer, 310));

            Equal(expected, actual);
        }
Ejemplo n.º 2
0
        public void SfmtFillArray32ErrorTest()
        {
            const int size = 1024;

            using var sfmt = new SfmtPrimitiveState();
            InitGenRand(sfmt, 1234);


            var buffer = new AlignedArray <uint>(size, 16);


            GenRandUint32(sfmt);
            using var expected = new SfmtPrimitiveState();
            DeepCopy(sfmt, expected);


            Assert.Throws <ArgumentException>(() => FillArray32(sfmt, buffer, size));
            Equal(sfmt, expected);


            InitGenRand(sfmt, 1234);
            DeepCopy(sfmt, expected);
            Assert.Throws <ArgumentOutOfRangeException>(() => FillArray32(sfmt, buffer, 1023));
            Equal(sfmt, expected);

            Assert.Throws <ArgumentOutOfRangeException>(() => FillArray32(sfmt, buffer, 620));
            Equal(sfmt, expected);
        }
Ejemplo n.º 3
0
        public void SfmtInitArrayTest()
        {
            const int size = 1024;

            ReadOnlySpan <uint> key = stackalloc uint[] { 0x1234, 0x5678, 0x9abc, 0xdef0 };


            var sfmt = new SfmtPrimitiveState();

            var array = new AlignedArray <uint>(size, 16);

            InitByArray(sfmt, key);

            {
                var expected = File.ReadLines("./Data/initArrayFirstState.txt").Select(x => uint.Parse(x)).ToArray();

                var actual = new Span <uint>(sfmt.State, N32);
                actual.Length.Is(expected.Length);

                for (var i = 0; i < expected.Length; i++)
                {
                    actual[i].Is(expected[i]);
                }
            }

            FillArray32(sfmt, array, 1024);

            {
                var expected = File.ReadLines("./Data/initArrayNextState.txt").Select(x => uint.Parse(x)).ToArray();
                var actual   = new Span <uint>(sfmt.State, N32);
                actual.Length.Is(expected.Length);

                for (var i = 0; i < expected.Length; i++)
                {
                    actual[i].Is(expected[i]);
                }
            }

            {
                var expected = File.ReadLines("./Data/initArrayRnd32.txt").Select(x => uint.Parse(x)).ToArray();
                var fst      = array.ToArray();

                FillArray32(sfmt, array, 1024);

                var second = array.ToArray();

                var actual = fst.Concat(second).ToArray();

                actual.Length.Is(expected.Length);

                for (var i = 0; i < actual.Length; i++)
                {
                    actual[i].Is(expected[i]);
                }
            }
        }
    }
Ejemplo n.º 4
0
        public void SfmtGetAttributesTest()
        {
            using var sfmt = new SfmtPrimitiveState();
            InitGenRand(sfmt, 1234);

            IdString.Is("SFMT-19937:122-18-1-11-1:dfffffef-ddfecb7f-bffaffff-bffffff6");
            MinArraySize32.Is(624);
            MinArraySize64.Is(312);
        }
Ejemplo n.º 5
0
        private static void Main()
        {
            using var array = new AlignedArray <uint>(1024, 16);

            using var sfmt = new SfmtPrimitiveState();
            SfmtPrimitive.InitGenRand(sfmt, 1234);

            SfmtPrimitive.FillArray32(sfmt, array, 1024);

            Console.WriteLine(array[0]);
        }
Ejemplo n.º 6
0
        private static void DeepCopy(SfmtPrimitiveState source, SfmtPrimitiveState destination)
        {
            var scr  = new ReadOnlySpan <ulong>(source.State, N64);
            var dest = new Span <ulong>(destination.State, N64);

            for (var i = 0; i < N64; i++)
            {
                dest[i] = scr[i];
            }

            destination.Index = source.Index;
        }
Ejemplo n.º 7
0
        public void JumpTest()
        {
            var sfmt = new SfmtPrimitiveState();

            SfmtPrimitive.InitGenRand(sfmt, 1234);
            SfmtJump.Jump(sfmt, "2");

            var expected = File.ReadLines("./Data/jump2.txt").Select(x => uint.Parse(x)).ToArray();

            expected.Length.Is(N32);

            var actual = new ReadOnlySpan <uint>(sfmt.State, N32).ToArray();

            for (var i = 0; i < N32; i++)
            {
                actual[i].Is(expected[i]);
            }
        }
Ejemplo n.º 8
0
        public void InitGenRandTest()
        {
            using var sfmt = new SfmtPrimitiveState();

            InitGenRand(sfmt, 1234);

            var expected = File.ReadLines("./Data/expected.txt").Skip(1).Select(x => x.Split('\t'))
                           .Select(x => (index: int.Parse(x[0]), value: uint.Parse(x[1]))).ToArray();

            var actual = new List <(int index, uint value)>();

            var span = new Span <uint>(sfmt.State, N32);

            span.Length.Is(expected.Length + 1);

            for (var i = 1; i < span.Length; i++)
            {
                span[i].Is(expected[i - 1].value);
            }
        }
Ejemplo n.º 9
0
        public void SfmtFillArray64Test()
        {
            const int size = 1024;

            var sfmt = new SfmtPrimitiveState();

            var buffer = new AlignedArray <ulong>(size, 16);


            InitGenRand(sfmt, 1234);
            FillArray64(sfmt, buffer, size);

            {
                var expected = File.ReadLines("./Data/AfterStateFill64.txt").Select(x => uint.Parse(x)).ToArray();
                var actual   = new Span <uint>(sfmt.State, N32);
                actual.Length.Is(expected.Length);

                for (var i = 0; i < actual.Length; i++)
                {
                    actual[i].Is(expected[i]);
                }
            }

            {
                var actA = buffer.ToArray();
                FillArray64(sfmt, buffer, size);

                var actB = buffer.ToArray();

                var act = actA.Concat(actB).ToArray();

                var expected = File.ReadLines("./Data/Init1234Fill64.txt").Select(x => ulong.Parse(x)).ToArray();

                act.Length.Is(expected.Length);

                for (var i = 0; i < act.Length; i++)
                {
                    act[i].Is(expected[i]);
                }
            }
        }
Ejemplo n.º 10
0
        public void SfmtFillArray32Test()
        {
            const int size = 1024;


            using var sfmt = new SfmtPrimitiveState();

            var buffer = new AlignedArray <uint>(size, 16);


            InitGenRand(sfmt, 1234);
            FillArray32(sfmt, buffer, size);

            var expected = File.ReadLines("./Data/AfterStateFill32.txt").Select(x => uint.Parse(x)).ToArray();

            var actual = new Span <uint>(sfmt.State, N32);

            actual.Length.Is(expected.Length);

            for (var i = 0; i < actual.Length; i++)
            {
                actual[i].Is(expected[i]);
            }


            var actualA = buffer.ToArray();

            FillArray32(sfmt, buffer, size);
            var actualB = buffer.ToArray();

            var actualM = actualA.Concat(actualB).ToArray();

            expected = File.ReadLines("./Data/init1234Fill32.txt").Select(x => uint.Parse(x)).ToArray();

            actualM.Length.Is(expected.Length);

            for (var i = 0; i < actualM.Length; i++)
            {
                actualM[i].Is(expected[i]);
            }
        }
Ejemplo n.º 11
0
        public void SfmtInitArrayLongKey()
        {
            const int size = 1024;
            var       key  = Enumerable.Range(0, 32).Select(x => (uint)(x + 42)).ToArray();

            using var sfmt = new SfmtPrimitiveState();

            InitByArray(sfmt, key);

            var expected = File.ReadLines("./Data/LongKey.txt").Select(x => ulong.Parse(x)).ToArray();

            var p = new AlignedArray <ulong>(size, 16);


            FillArray64(sfmt, p, size);

            for (var i = 0; i < size; i++)
            {
                p[i].Is(expected[i]);
            }
        }