public void HaveCorrectValues()
        {
            var v = new Vector2fd(1, 2);

            v.X.Should().BeApproximately(1, double.Epsilon);
            v.Y.Should().BeApproximately(2, double.Epsilon);
        }
        public void ConvertFromValueTupleOfFloat()
        {
            Vector2fd v = (1f, 0f);

            v.X.Should().Be(1);
            v.Y.Should().Be(0);
        }
        public void ConvertFromValueTupleOfDouble()
        {
            Vector2fd v = (1, 0);

            v.X.Should().Be(1);
            v.Y.Should().Be(0);
        }
        public void ConverToSpan()
        {
            Vector2fd v    = (1, 2);
            var       span = v.AsSpan();

            span[0].Should().Be(1);
            span[1].Should().Be(2);
        }
        public void ComputeAngularMagnitude()
        {
            var v1 = new Vector2fd(1, 0);
            var v2 = new Vector2fd(0, 1);

            v1.AngularMagnitude(v2).Should().BeApproximately(Math.PI / 2, double.Epsilon);
            v2.AngularMagnitude(v1).Should().BeApproximately(Math.PI / 2, double.Epsilon); // unsigned angle
        }
        public void ComputeAngle()
        {
            var v1 = new Vector2fd(1, 0);
            var v2 = new Vector2fd(0, 1);

            v1.Angle(v2).Should().BeApproximately(Math.PI / 2, double.Epsilon);
            v2.Angle(v1).Should().BeApproximately(-Math.PI / 2, double.Epsilon);
        }