public static IEnumerable <object[]> Data(VectorDimensions dimension) { var objs = new[] { new object[] { Vector128.Create(0f), Vector128.Create(0f), Vector128.Create(0f), default(Vector4) }, new object[] { Vector128.Create(1f), Vector128.Create(1f), Vector128.Create(1f), default(Vector4) }, new object[] { Vector128.Create(-1f), Vector128.Create(-1f), Vector128.Create(-1f), default(Vector4) }, new object[] { Vector128.Create(-1f), Vector128.Create(1f, 4f, 9f, 16f), Vector128.Create(100f, 200f, 300f, 400f), default(Vector4) }, new object[] { Vector128.Create(1f, 2f, 3f, 4f), Vector128.Create(4f, -5f, 6f, 9f), Vector128.Create(0f), default(Vector4) }, new object[] { Vector128.Create(float.PositiveInfinity), Vector128.Create(float.PositiveInfinity), Vector128.Create(0f), default(Vector4) }, new object[] { Vector128.Create(float.PositiveInfinity), Vector128.Create(float.NegativeInfinity), Vector128.Create(0f), default(Vector4) }, new object[] { Vector128.Create(float.NaN), Vector128.Create(float.NegativeInfinity), Vector128.Create(float.PositiveInfinity), default(Vector4) }, new object[] { Vector128.Create(float.MaxValue, float.MinValue, float.NaN, 0), Vector128.Create(float.MaxValue, float.MinValue, float.NaN, 0), Vector128.Create(10f), default(Vector4) }, }; foreach (object[] set in objs) { switch (dimension) { case VectorDimensions.V2D: { var v1 = (Vector128 <float>)set[0]; var v2 = (Vector128 <float>)set[1]; set[3] = ByValToSlowVector2(SoftwareFallbacks.Cross2D_Software(v1, v2)); break; } case VectorDimensions.V3D: { var v1 = (Vector128 <float>)set[0]; var v2 = (Vector128 <float>)set[1]; Vector128 <float> res = SoftwareFallbacks.Cross3D_Software(v1, v2); set[3] = ByValToSlowVector3(res); Vector3 correct = Vector3.Cross(ByValToSlowVector3(v1), ByValToSlowVector3(v2)); Assert.True(AreEqual(Vector3.Cross(ByValToSlowVector3(v1), ByValToSlowVector3(v2)), res), $"Expected {correct}, got {res}"); break; } case VectorDimensions.V4D: { var v1 = (Vector128 <float>)set[0]; var v2 = (Vector128 <float>)set[1]; var v3 = (Vector128 <float>)set[2]; set[3] = ByValToSlowVector4(SoftwareFallbacks.Cross4D_Software(v1, v2, v3)); break; } default: throw new ArgumentException(nameof(dimension)); } } return(objs); }
public static IEnumerable <object[]> Data(VectorDimensions dimension) { var objs = new[] { new object[4] { Vector256.Create(0d), Vector256.Create(0d), Vector256.Create(0d), default(Vector4d) }, new object[4] { Vector256.Create(1d), Vector256.Create(1d), Vector256.Create(1d), default(Vector4d) }, new object[4] { Vector256.Create(-1d), Vector256.Create(-1d), Vector256.Create(-1d), default(Vector4d) }, new object[4] { Vector256.Create(-1d), Vector256.Create(1d, 4d, 9d, 16d), Vector256.Create(100d, 200d, 300d, 400d), default(Vector4d) }, new object[4] { Vector256.Create(1d, 2d, 3d, 4d), Vector256.Create(4d, -5d, 6d, 9d), Vector256.Create(0d), default(Vector4d) }, new object[4] { Vector256.Create(double.PositiveInfinity), Vector256.Create(double.PositiveInfinity), Vector256.Create(0d), default(Vector4d) }, new object[4] { Vector256.Create(double.PositiveInfinity), Vector256.Create(double.NegativeInfinity), Vector256.Create(0d), default(Vector4d) }, new object[4] { Vector256.Create(double.NaN), Vector256.Create(double.NegativeInfinity), Vector256.Create(double.PositiveInfinity), default(Vector4d) }, new object[4] { Vector256.Create(double.MaxValue, double.MinValue, double.NaN, 0), Vector256.Create(double.MaxValue, double.MinValue, double.NaN, 0), Vector256.Create(10d), default(Vector4d) }, }; foreach (object[] set in objs) { switch (dimension) { case VectorDimensions.V2D: { var v1 = (Vector256 <double>)set[0]; var v2 = (Vector256 <double>)set[1]; set[3] = TestHelpers.ByValToSlowVector2d(SoftwareFallbacks.Cross2D_Software(v1, v2)); break; } case VectorDimensions.V3D: { var v1 = (Vector256 <double>)set[0]; var v2 = (Vector256 <double>)set[1]; set[3] = TestHelpers.ByValToSlowVector3d(SoftwareFallbacks.Cross3D_Software(v1, v2)); break; } case VectorDimensions.V4D: { var v1 = (Vector256 <double>)set[0]; var v2 = (Vector256 <double>)set[1]; var v3 = (Vector256 <double>)set[2]; set[3] = TestHelpers.ByValToSlowVector4d(SoftwareFallbacks.Cross4D_Software(v1, v2, v3)); break; } default: throw new ArgumentException(nameof(dimension)); } } return(objs); }