Ejemplo n.º 1
0
        public void max128_i32()
        {
            var blocklen = Span128 <int> .BlockLength;
            var lhs      = Random.ReadOnlySpan128 <int>(SampleSize);
            var rhs      = Random.ReadOnlySpan128 <int>(SampleSize);
            var expect   = Span128.AllocBlocks <int>(SampleSize);
            var actual   = Span128.AllocBlocks <int>(SampleSize);

            for (var block = 0; block < SampleSize; block++)
            {
                var offset = block * blocklen;

                Span <int> tmp = stackalloc int[blocklen];
                for (var i = 0; i < blocklen; i++)
                {
                    tmp[i] = gmath.max(lhs[offset + i], rhs[offset + i]);
                }
                var vExpect = Vec128.LoadVector(ref tmp[0]);

                var vX      = lhs.LoadVec128(block);
                var vY      = rhs.LoadVec128(block);
                var vActual = ginx.max <int>(vX, vY);

                Claim.eq(vExpect, vActual);

                vstore(vExpect, ref expect.Block(block));
                vstore(vActual, ref actual.Block(block));
            }
            Claim.eq(expect, actual);
        }
Ejemplo n.º 2
0
        public void BlockLength()
        {
            Claim.eq(4, Span128 <int> .BlockLength);
            Claim.eq(16, Span128.BlockLength <sbyte>());
            Claim.eq(16, Span128.BlockLength <byte>());
            Claim.eq(8, Span128.BlockLength <short>());
            Claim.eq(8, Span128.BlockLength <ushort>());
            Claim.eq(4, Span128.BlockLength <int>());
            Claim.eq(4, Span128.BlockLength <uint>());
            Claim.eq(2, Span128.BlockLength <long>());
            Claim.eq(2, Span128.BlockLength <ulong>());
            Claim.eq(4, Span128.BlockLength <float>());
            Claim.eq(2, Span128.BlockLength <double>());
            Claim.eq(8, Span128.BlockLength <int>(2));
            Claim.eq(4, Span128.BlockLength <long>(2));
            Claim.eq(32, Span128.BlockLength <byte>(2));


            Claim.eq(8, Span256 <int> .BlockLength);
            Claim.eq(32, Span256.BlockLength <sbyte>());
            Claim.eq(32, Span256.BlockLength <byte>());
            Claim.eq(16, Span256.BlockLength <short>());
            Claim.eq(16, Span256.BlockLength <ushort>());
            Claim.eq(8, Span256.BlockLength <int>());
            Claim.eq(8, Span256.BlockLength <uint>());
            Claim.eq(4, Span256.BlockLength <long>());
            Claim.eq(4, Span256.BlockLength <ulong>());
            Claim.eq(8, Span256.BlockLength <float>());
            Claim.eq(4, Span256.BlockLength <double>());
        }
Ejemplo n.º 3
0
        public void BlockCount()
        {
            Claim.eq(1, Span128.WholeBlocks <sbyte>(16));
            Claim.eq(1, Span128.WholeBlocks <byte>(16));

            Claim.eq(1, Span128.WholeBlocks <short>(8));
            Claim.eq(1, Span128.WholeBlocks <ushort>(8));

            Claim.eq(1, Span128.WholeBlocks <int>(4));
            Claim.eq(1, Span128.WholeBlocks <uint>(4));
            Claim.eq(1, Span128.WholeBlocks <float>(4));

            Claim.eq(1, Span128.WholeBlocks <long>(2));
            Claim.eq(1, Span128.WholeBlocks <ulong>(2));
            Claim.eq(1, Span128.WholeBlocks <double>(2));

            Claim.eq(1, Span256.WholeBlocks <sbyte>(32));
            Claim.eq(1, Span256.WholeBlocks <byte>(32));

            Claim.eq(1, Span256.WholeBlocks <short>(16));
            Claim.eq(1, Span256.WholeBlocks <ushort>(16));

            Claim.eq(1, Span256.WholeBlocks <int>(8));
            Claim.eq(1, Span256.WholeBlocks <uint>(8));
            Claim.eq(1, Span256.WholeBlocks <float>(8));

            Claim.eq(1, Span256.WholeBlocks <long>(4));
            Claim.eq(1, Span256.WholeBlocks <ulong>(4));
            Claim.eq(1, Span256.WholeBlocks <double>(4));
        }
Ejemplo n.º 4
0
        public void Load1()
        {
            var x = Span128.Load(span <int>(1, 2, 3, 4, 5, 6, 7, 8));

            Claim.eq(x.BlockCount, 2);
            x.ClaimEqual(Span128.FromParts(1, 2, 3, 4, 5, 6, 7, 8));
        }
Ejemplo n.º 5
0
        public void CellSize()
        {
            Claim.eq(4, Span128 <int> .CellSize);
            Claim.eq(1, Span128.CellSize <sbyte>());
            Claim.eq(1, Span128.CellSize <byte>());
            Claim.eq(2, Span128.CellSize <short>());
            Claim.eq(4, Span128.CellSize <int>());
            Claim.eq(4, Span128.CellSize <uint>());
            Claim.eq(4, Span128.CellSize <float>());
            Claim.eq(8, Span128.CellSize <ulong>());
            Claim.eq(8, Span128.CellSize <double>());
            Claim.eq(8, Span128.CellSize <long>());


            Claim.eq(4, Span256 <int> .CellSize);
            Claim.eq(1, Span256.CellSize <sbyte>());
            Claim.eq(1, Span256.CellSize <byte>());
            Claim.eq(2, Span256.CellSize <short>());
            Claim.eq(4, Span256.CellSize <int>());
            Claim.eq(4, Span256.CellSize <uint>());
            Claim.eq(4, Span256.CellSize <float>());
            Claim.eq(8, Span256.CellSize <ulong>());
            Claim.eq(8, Span256.CellSize <double>());
            Claim.eq(8, Span256.CellSize <long>());
        }
Ejemplo n.º 6
0
        public void Fill2()
        {
            var blockX = Span128.AllocBlocks <int>(1);

            blockX[0] = 1;
            blockX[1] = 2;
            blockX[2] = 3;
            blockX[3] = 4;

            var blockY = Span128.Load(blockX.Unblock());

            Claim.eq(blockX, blockY);
        }
Ejemplo n.º 7
0
        public void BlockSlice()
        {
            var x = Span128.Load(span <int>(1, 2, 3, 4, 5, 6, 7, 8));

            var block0 = x.SliceBlock(0);

            Claim.eq(4, block0.Length);
            block0.ClaimEqual(Span128.Load(span(1, 2, 3, 4)));

            var block2 = x.SliceBlock(1);

            Claim.eq(4, block2.Length);
            block2.ClaimEqual(Span128.FromParts(5, 6, 7, 8));
        }
Ejemplo n.º 8
0
        public void Fill1()
        {
            var blocks   = Pow2.T08;
            var blocklen = Span128 <int> .BlockLength;
            var src      = Random.ReadOnlySpan128 <int>(blocks);
            var dst      = Span128.AllocBlocks <int>(blocks);

            Claim.eq(src.Length, dst.Length);

            for (int block = 0, idx = 0; block < blocks; block++, idx++)
            {
                for (var i = 0; i < blocklen; i++)
                {
                    dst[block * blocklen + i] = src[block * blocklen + i];
                }
            }

            src.ClaimEqual(dst);
        }
Ejemplo n.º 9
0
        public void BlockSize()
        {
            Claim.eq(16, Span128 <int> .BlockSize);
            Claim.eq(16, Span128.BlockSize <sbyte>());
            Claim.eq(16, Span128.BlockSize <byte>());
            Claim.eq(16, Span128.BlockSize <short>());
            Claim.eq(16, Span128.BlockSize <int>());
            Claim.eq(16, Span128.BlockSize <float>());
            Claim.eq(16, Span128.BlockSize <double>());
            Claim.eq(16, Span128.BlockSize <long>());

            Claim.eq(32, Span256 <int> .BlockSize);
            Claim.eq(32, Span256.BlockSize <sbyte>());
            Claim.eq(32, Span256.BlockSize <byte>());
            Claim.eq(32, Span256.BlockSize <short>());
            Claim.eq(32, Span256.BlockSize <int>());
            Claim.eq(32, Span256.BlockSize <float>());
            Claim.eq(32, Span256.BlockSize <double>());
            Claim.eq(32, Span256.BlockSize <long>());
        }
Ejemplo n.º 10
0
        public void Alignment()
        {
            Claim.eq(4, Span128.Align <int>(4));
            Claim.yea(Span128.IsAligned <int>(4));

            Claim.eq(8, Span128.Align <int>(5));
            Claim.nea(Span128.IsAligned <int>(5));

            Claim.eq(8, Span128.Align <int>(6));
            Claim.nea(Span128.IsAligned <int>(6));

            Claim.eq(8, Span128.Align <int>(7));
            Claim.nea(Span128.IsAligned <int>(7));

            Claim.eq(8, Span128.Align <int>(8));
            Claim.yea(Span128.IsAligned <int>(8));

            Claim.eq(12, Span128.Align <int>(9));
            Claim.nea(Span128.IsAligned <int>(9));
        }