using Microsoft.ML.OnnxRuntime.Tensors; using System; using System.Collections.Generic; namespace Microsoft.ML.OnnxRuntime.Tests { internal class FloatComparer : IEqualityComparer { private float atol = 1e-3f; private float rtol = 1.7e-2f; public bool Equals(float x, float y) { return Math.Abs(x - y) <= (atol + rtol * Math.Abs(y)); } public int GetHashCode(float x) { return x.GetHashCode(); } } internal class DoubleComparer : IEqualityComparer { private double atol = 1e-3; private double rtol = 1.7e-2; public bool Equals(double x, double y) { return Math.Abs(x - y) <= (atol + rtol * Math.Abs(y)); } public int GetHashCode(double x) { return x.GetHashCode(); } } internal class ExactComparer : IEqualityComparer { public bool Equals(T x, T y) { return x.Equals(y); } public int GetHashCode(T x) { return x.GetHashCode(); } } /// /// Use it to compare Float16 /// internal class Float16Comparer : IEqualityComparer { public ushort tolerance = 0; public bool Equals(Float16 x, Float16 y) { return Math.Abs(x.value - y.value) <= (tolerance + y.value); } public int GetHashCode(Float16 x) { return x.GetHashCode(); } } /// /// Use it to compare Bloat16 /// internal class BFloat16Comparer : IEqualityComparer { public ushort tolerance = 0; public bool Equals(BFloat16 x, BFloat16 y) { return Math.Abs(x.value - y.value) <= (tolerance + y.value); } public int GetHashCode(BFloat16 x) { return x.GetHashCode(); } } }