예제 #1
0
        void unpack_check <S, T>()
            where S : unmanaged
            where T : unmanaged
        {
            for (var j = 0; j < SampleSize; j++)
            {
                var      src = Random.Next <S>();
                Span <T> dst = stackalloc T[bitsize <S>()];
                gbits.unpack(src, dst);
                var bs = BitString.FromScalar(src);
                for (var i = 0; i < bs.Length; i++)
                {
                    var expect = bs[i] ? one <T>() : zero <T>();
                    var actual = dst[i];
                    Claim.eq(expect, actual);
                }
            }

            var      x  = Random.Span <S>(SampleSize);
            Span <T> y1 = new T[x.Length * bitsize <S>()];

            gbits.unpack(x, y1);
            var y2 = BitString.FromScalars(x);

            for (var i = 0; i < y1.Length; i++)
            {
                var expect = y2[i] ? one <T>() : zero <T>();
                var actual = y1[i];
                Claim.yea(gmath.eq(expect, actual));
            }
        }
예제 #2
0
파일: ts_digits.cs 프로젝트: 0xCM/arrows
 void binary_digits_check <T>()
     where T : unmanaged
 {
     for (var i = 0; i < SampleSize; i++)
     {
         var x = Random.Next <T>();
         bd_match_check <T>(BitString.FromScalar(x).Format(false, true), x);
     }
 }
예제 #3
0
 void bv_create_fixedG <V, S>()
     where V : unmanaged, IFixedBits <V, S>
     where S : unmanaged
 {
     for (var i = 0; i < SampleSize; i++)
     {
         var src = Random.Next <S>();
         var bv  = gbits.bitvector <V, S>(src);
         var bs  = BitString.FromScalar(src);
         for (var j = 0; j < bv.Length; j++)
         {
             Claim.eq(bv[j], bs[j]);
         }
     }
 }
예제 #4
0
        public void bs_to_u32()
        {
            var x0 = 0b_01011000_00001000_11111010_01100101u;
            var x1 = x0.ToBitString();
            var x2 = x1.TakeValue <uint>();

            Claim.eq(x0, x2);

            var x     = 0b10100001100101010001u;
            var bsSrc = "0000010100001100101010001";
            var bs1   = BitString.Parse(bsSrc);

            Claim.eq((int)bs1.Length, bsSrc.Length);

            var bs2 = BitString.FromScalar(x);
            var y   = bs1.TakeValue <uint>();

            Claim.eq(x, y);
            Claim.yea(bs1.Equals(bs2));
        }