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); }
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>(); }
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)); }