namespace Dashboard { public static class MeasurementExtensions { public static bool IsRelative(this LayoutUnit unit) => unit switch { LayoutUnit.Star or LayoutUnit.Percent => true, _ => false, }; public static bool IsAbsolute(this LayoutUnit unit) => !IsRelative(unit); public static string ToShortString(this LayoutUnit unit) => unit switch { LayoutUnit.Pixel => "px", LayoutUnit.Point => "pt", LayoutUnit.Millimeter => "mm", LayoutUnit.Star => "*", LayoutUnit.Percent => "%", _ => throw new Exception("Unknown unit."), }; public static bool WithinTolerance(this float value, float reference, float absTol, float relTol) => value.CompareTolerance(reference, absTol, relTol) == 0; public static int CompareTolerance(this float value, float reference, float absTol, float relTol) { float tolerance = Math.Max(absTol, Math.Abs(reference) * relTol); float difference = value - reference; return difference < -tolerance ? -1 : difference > tolerance ? 1 : 0; } } }