public void perm256u8() { var x = Vec256Pattern.Increasing <byte>(); var y = Vec256Pattern.Decreasing <byte>(); var z = dinx.permute(x, y); for (var i = 0; i < 31; i++) { Claim.eq(x[31 - i], z[i]); } }
public void reverse_256_u8() { var inc = Vec256Pattern.Increments((byte)0); for (var i = 0; i < inc.Length(); i++) { Claim.eq((int)inc[i], i); } var dec = Vec256Pattern.Decrements((byte)31); for (var i = 31; i >= 0; i--) { Claim.eq((int)dec[31 - i], i); } var v2 = dinx.reverse(inc); Claim.eq(dec, v2); }
public void pattern_clearalt_256x8() { var tr = Vec256Pattern.ClearAlt <byte>(); for (var i = 0; i < DefaltCycleCount; i++) { var x = Random.CpuVec256 <byte>(); var y = dinx.shuffle(x, tr); var xs = x.ToSpan256(); for (var j = 0; j < xs.Length; j++) { if (j % 2 != 0) { xs[j] = 0; } } var xt = xs.ToCpuVec256(); Claim.eq(xt, y); } }
public void blend_256_u8() { void Test1() { var v0 = Random.CpuVec256 <byte>(); var v1 = Random.CpuVec256 <byte>(); var bits = Random.BitString <N32>(); var mask = Vec256.Load(bits.Map(x => x ? (byte)0xFF : (byte)0)); var v3 = dinx.blendv(v0, v1, mask); var selection = Span256.AllocBlocks <byte>(1); for (var i = 0; i < selection.Length; i++) { selection[i] = bits[i] ? v1[i] : v0[i]; } var v4 = selection.ToCpuVec256(); Claim.eq(v3, v4); } Verify(Test1); var v1 = Vec256.Fill <byte>(3); var v2 = Vec256.Fill <byte>(4); var control = Vec256Pattern.Alternate <byte>(0, 0xFF); var v3 = dinx.blendv(v1, v2, control); var block = Span256.AllocBlocks <byte>(1); for (var i = 0; i < 32; i++) { block[i] = (byte)(even(i) ? 3 : 4); } var v4 = block.ToCpuVec256(); Claim.eq(v3, v4); }