コード例 #1
0
        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);
        }
コード例 #2
0
        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.CrossProduct2D_Software(v1, v2));
                    break;
                }

                case VectorDimensions.V3D:
                {
                    var v1 = (Vector256 <double>)set[0];
                    var v2 = (Vector256 <double>)set[1];
                    set[3] = TestHelpers.ByValToSlowVector3d(SoftwareFallbacks.CrossProduct3D_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.CrossProduct4D_Software(v1, v2, v3));
                    break;
                }

                default:
                    throw new ArgumentException(nameof(dimension));
                }
            }

            return(objs);
        }