Exemple #1
0
        void pack_roundtrip_check <T>(BitSize bitcount)
            where T : unmanaged
        {
            var src = Random.BitString(bitcount);

            Claim.eq(bitcount, src.Length);

            var x = src.ToBits();

            Claim.eq(bitcount, x.Length);

            var y     = Bits.pack(x);
            var sizeT = size <T>();

            var q     = Math.DivRem(bitcount, 8, out int r);
            var bytes = q + (r == 0 ? 0 : 1);

            Claim.eq(bytes, y.Length);

            var bulk = ByteSpan.ReadValues <T>(y, out Span <byte> rem);

            var merged = rem.Length != 0 ? bulk.Extend(bulk.Length + 1) : bulk;

            if (merged.Length != bulk.Length)
            {
                merged[merged.Length - 1] = rem.TakeScalar <T>();
            }

            var bsOutput = merged.ToBitString().Truncate(bitcount);

            Claim.eq(src, bsOutput);
            Claim.eq((src & ~bsOutput).PopCount(), 0);
        }
Exemple #2
0
 void VerifySpanBytesToValues <T>(Span <byte> src, Span <T> expect)
     where T : struct
 {
     Claim.eq(expect, ByteSpan.ReadValues <T>(src));
 }