Пример #1
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]);
                }
            }
        }
    }
Пример #2
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]);
                }
            }
        }
Пример #3
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]);
            }
        }