mirror of
https://github.com/ICDSystems/ICD.Common.Utils.git
synced 2026-01-11 19:44:55 +00:00
fix: Fixing issues with Remap methods, added unit tests
This commit is contained in:
@@ -67,11 +67,15 @@ namespace ICD.Common.Utils.Tests.Attributes
|
|||||||
Assert.AreEqual(expected, RangeAttribute.Remap(value, type));
|
Assert.AreEqual(expected, RangeAttribute.Remap(value, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestCase(0, 100, ushort.MaxValue, typeof(ushort), ushort.MaxValue)]
|
||||||
|
[TestCase(0, 100, ushort.MaxValue, typeof(short), short.MaxValue)]
|
||||||
public void ClampMinMaxThenRemapTest(object min, object max, object value, Type type, object expected)
|
public void ClampMinMaxThenRemapTest(object min, object max, object value, Type type, object expected)
|
||||||
{
|
{
|
||||||
Assert.AreEqual(expected, new RangeAttribute(min, max).ClampMinMaxThenRemap(value, type));
|
Assert.AreEqual(expected, new RangeAttribute(min, max).ClampMinMaxThenRemap(value, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestCase(0, 100, ushort.MaxValue, 100)]
|
||||||
|
[TestCase(0, 100, ushort.MinValue, 0)]
|
||||||
public void RemapMinMaxTest(object min, object max, object value, object expected)
|
public void RemapMinMaxTest(object min, object max, object value, object expected)
|
||||||
{
|
{
|
||||||
Assert.AreEqual(expected, new RangeAttribute(min, max).RemapMinMax(value));
|
Assert.AreEqual(expected, new RangeAttribute(min, max).RemapMinMax(value));
|
||||||
|
|||||||
@@ -413,7 +413,7 @@ namespace ICD.Common.Utils.Attributes
|
|||||||
double doubleValue = Convert.ToDouble(value);
|
double doubleValue = Convert.ToDouble(value);
|
||||||
|
|
||||||
double clamped = MathUtils.Clamp(doubleValue, min, max);
|
double clamped = MathUtils.Clamp(doubleValue, min, max);
|
||||||
object remapped = Remap(clamped, type);
|
object remapped = RemapMinMax(clamped, type);
|
||||||
|
|
||||||
return Convert.ChangeType(remapped, value.GetType(), CultureInfo.InvariantCulture);
|
return Convert.ChangeType(remapped, value.GetType(), CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
@@ -441,7 +441,34 @@ namespace ICD.Common.Utils.Attributes
|
|||||||
|
|
||||||
double remapped = MathUtils.MapRange(sourceMin, sourceMax, targetMin, targetMax, doubleValue);
|
double remapped = MathUtils.MapRange(sourceMin, sourceMax, targetMin, targetMax, doubleValue);
|
||||||
|
|
||||||
return Convert.ChangeType(remapped, Min.GetType(), CultureInfo.InvariantCulture);
|
return Convert.ChangeType(remapped, value.GetType(), CultureInfo.InvariantCulture);
|
||||||
|
}
|
||||||
|
|
||||||
|
private object RemapMinMax(object value, Type type)
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
throw new ArgumentNullException("value");
|
||||||
|
|
||||||
|
if (type == null)
|
||||||
|
throw new ArgumentNullException("type");
|
||||||
|
|
||||||
|
if (!type.IsNumeric())
|
||||||
|
throw new ArgumentException("Target type is not numeric");
|
||||||
|
|
||||||
|
if (!value.GetType().IsNumeric())
|
||||||
|
throw new ArgumentException("Source value is not numeric");
|
||||||
|
|
||||||
|
double sourceMin = Convert.ToDouble(Min);
|
||||||
|
double sourceMax = Convert.ToDouble(Max);
|
||||||
|
|
||||||
|
double targetMin = GetMinAsDouble(type);
|
||||||
|
double targetMax = GetMaxAsDouble(type);
|
||||||
|
|
||||||
|
double doubleValue = Convert.ToDouble(value);
|
||||||
|
|
||||||
|
double remapped = MathUtils.MapRange(sourceMin, sourceMax, targetMin, targetMax, doubleValue);
|
||||||
|
|
||||||
|
return Convert.ChangeType(remapped, type, CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
Reference in New Issue
Block a user