Exemple #1
0
        public void VerifyBitCompression()
        {
            var x    = Random.Next <ulong>();
            var bv   = x.ToBitVector();
            var bits = span <Bit>(sizeof(ulong) * 8);

            for (byte i = 0; i < bits.Length; i++)
            {
                bits[i] = bv[i];
            }
            var bitBytes = Bits.pack(bits);
            var xBytes   = ByteSpan.FromValue(x);

            Claim.eq(xBytes, bitBytes);
        }
Exemple #2
0
        void VerifyBytesToValues <T>()
            where T : struct
        {
            TypeCaseStart <T>();
            var x = Random.Next <T>();
            var y = ByteSpan.FromValue(x);

            VerifySpanBytesToValue(y, x);

            var valSize = Unsafe.SizeOf <T>();
            var values  = Random.Stream <T>().TakeSpan(Pow2.T08);
            var bytes   = span <byte>(valSize * values.Length);

            for (int i = 0, offset = 0; i < values.Length; i++, offset += valSize)
            {
                var value    = values[i];
                var valBytes = ByteSpan.FromValue(value);
                valBytes.CopyTo(bytes, offset);
            }

            VerifySpanBytesToValues(bytes, values);
            TypeCaseEnd <T>();
        }
Exemple #3
0
        public void extractarb()
        {
            ulong         z    = 0b01011_00010_01110_11010_00111_00101_01110_10110;
            var           bvz  = bitvector.from(z, 40);
            Span <byte>   xSrc = ByteSpan.FromValue(z);
            Span <ushort> ySrc = xSrc.AsUInt16();

            Claim.eq(ySrc.Length * 2, xSrc.Length);

            var bvx = BitVector.Load(xSrc.Slice(0, 5).ToArray());
            var bvy = BitVector.Load(ySrc.Slice(0, 2).ToArray());
            var bsx = bvx.ToBitString().Format(true);
            var bsz = bvz.ToBitString().Format(true);

            Claim.eq(bsx, bsz);

            Claim.eq((byte)0b10110, bvx.SliceCell(0, 4));
            Claim.eq((byte)0b01110, bvx.SliceCell(5, 9));
            Claim.eq((byte)0b00101, bvx.SliceCell(10, 14));
            Claim.eq((byte)0b00111, bvx.SliceCell(15, 19));
            Claim.eq((byte)0b11010, bvx.SliceCell(20, 24));
            Claim.eq((byte)0b01110, bvx.SliceCell(25, 29));

            Claim.eq((ushort)0b10110, bvy.SliceCell(0, 4));
            Claim.eq((ushort)0b01110, bvy.SliceCell(5, 9));
            Claim.eq((ushort)0b00101, bvy.SliceCell(10, 14));
            Claim.eq((ushort)0b00111, bvy.SliceCell(15, 19));
            Claim.eq((ushort)0b11010, bvy.SliceCell(20, 24));
            Claim.eq((ushort)0b01110, bvy.SliceCell(25, 29));

            Claim.eq((ulong)0b10110, bvz.SliceCell(0, 4));
            Claim.eq((ulong)0b01110, bvz.SliceCell(5, 9));
            Claim.eq((ulong)0b00101, bvz.SliceCell(10, 14));
            Claim.eq((ulong)0b00111, bvz.SliceCell(15, 19));
            Claim.eq((ulong)0b11010, bvz.SliceCell(20, 24));
            Claim.eq((ulong)0b01110, bvz.SliceCell(25, 29));
        }