private static void AssertConversionPreservesOriginalValue <T>(double originalValue, double within = 0)
        {
            NumericConversion.DoubleToGeneric(originalValue, out T genericValue);
            double finalValue = NumericConversion.GenericToDouble(ref genericValue);

            Assert.That(finalValue, Is.EqualTo(originalValue).Within(within), $"Type: {typeof(T)}");
        }
 public void Test_TypeSpecificFunction_Subtract()
 {
     Assert.That(NumericConversion.CreateSubtractFunction <double>().Invoke(111, 69), Is.EqualTo(42));
     Assert.That(NumericConversion.CreateSubtractFunction <float>().Invoke(111, 69), Is.EqualTo(42));
     Assert.That(NumericConversion.CreateSubtractFunction <int>().Invoke(111, 69), Is.EqualTo(42));
     Assert.That(NumericConversion.CreateSubtractFunction <byte>().Invoke(111, 69), Is.EqualTo(42));
 }
 public void Test_TypeSpecificFunction_Add()
 {
     Assert.That(NumericConversion.CreateAddFunction <double>().Invoke(42, 69), Is.EqualTo(111));
     Assert.That(NumericConversion.CreateAddFunction <float>().Invoke(42, 69), Is.EqualTo(111));
     Assert.That(NumericConversion.CreateAddFunction <int>().Invoke(42, 69), Is.EqualTo(111));
     Assert.That(NumericConversion.CreateAddFunction <byte>().Invoke(42, 69), Is.EqualTo(111));
 }
        /// <summary>
        /// Sets conversions of axis - functions used to convert values of axis type to and from double values of viewport.
        /// Sets both ConvertToDouble and ConvertFromDouble properties.
        /// </summary>
        /// <param name="min">The minimal viewport value.</param>
        /// <param name="minValue">The value of axis type, corresponding to minimal viewport value.</param>
        /// <param name="max">The maximal viewport value.</param>
        /// <param name="maxValue">The value of axis type, corresponding to maximal viewport value.</param>
        public override void SetConversion(double min, double minValue, double max, double maxValue)
        {
            var conversion = new NumericConversion(min, minValue, max, maxValue);

            this.ConvertFromDouble = conversion.FromDouble;
            this.ConvertToDouble   = conversion.ToDouble;
        }
        public bool IsUnderMouse(double coordinateX, double coordinateY, double snapX, double snapY)
        {
            for (int i = 0; i < Count; i++)
            {
                double dX = Math.Abs(NumericConversion.GenericToDouble(Xs, i) - coordinateX);
                double dY = Math.Abs(NumericConversion.GenericToDouble(Ys, i) - coordinateY);

                if (dX <= snapX && dY <= snapY)
                {
                    IndexUnderMouse = i;
                    return(true);
                }
            }

            IndexUnderMouse = -1;
            return(false);
        }
        public void Test_TypeSpecificFunction_LessThanOrEqual()
        {
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <double>().Invoke(111, 69), Is.False);
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <double>().Invoke(69, 69), Is.True);
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <double>().Invoke(42, 69), Is.True);

            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <float>().Invoke(111, 69), Is.False);
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <float>().Invoke(69, 69), Is.True);
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <float>().Invoke(42, 69), Is.True);

            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <int>().Invoke(111, 69), Is.False);
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <int>().Invoke(69, 69), Is.True);
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <int>().Invoke(42, 69), Is.True);

            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <byte>().Invoke(111, 69), Is.False);
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <byte>().Invoke(69, 69), Is.True);
            Assert.That(NumericConversion.CreateLessThanOrEqualFunction <byte>().Invoke(42, 69), Is.True);
        }