// temporary workaround for xunit's lack of support for Half equality assertions public static void Equal(Half expected, Half actual) { if (Half.IsNaN(expected)) { Assert.True(Half.IsNaN(actual), $"Expected: {expected}\nActual: {actual}"); } else { Assert.Equal(expected, actual); } }
internal static void IsPredicateF16Kernel( Index1D index, ArrayView1D <int, Stride1D.Dense> data, Half value) { data[index + 0] = Half.IsFinite(value) ? 1 : 0; data[index + 1] = Half.IsInfinity(value) ? 1 : 0; data[index + 2] = Half.IsPositiveInfinity(value) ? 1 : 0; data[index + 3] = Half.IsNegativeInfinity(value) ? 1 : 0; data[index + 4] = Half.IsNaN(value) ? 1 : 0; }
private void InternalWriteHalf(Half value) { if (Half.IsNaN(value)) { value = HalfHelpers.UInt16BitsToHalf(0x7e00); } WritePrimitive(CborPrimitive.HalfFloat); Span <byte> bytes = _bufferWriter.GetSpan(2); HalfHelpers.WriteHalf(bytes, value); _bufferWriter.Advance(2); }
public void IsNaNTest() { { Half half = Half.NaN; bool expected = true; bool actual = Half.IsNaN(half); Assert.Equal(expected, actual); } { Half half = (Half)1234.5678f; bool expected = false; bool actual = Half.IsNaN(half); Assert.Equal(expected, actual); } }
public static void Equals(Half value, object obj, bool expected) { if (obj is Half other) { Assert.Equal(expected, value.Equals(other)); if (Half.IsNaN(value) && Half.IsNaN(other)) { Assert.Equal(!expected, value == other); Assert.Equal(expected, value != other); } else { Assert.Equal(expected, value == other); Assert.Equal(!expected, value != other); } Assert.Equal(expected, value.GetHashCode().Equals(other.GetHashCode())); } Assert.Equal(expected, value.Equals(obj)); }
public static void CompareTo(Half value, object obj, int expected) { if (obj is Half other) { Assert.Equal(expected, Math.Sign(value.CompareTo(other))); if (Half.IsNaN(value) || Half.IsNaN(other)) { Assert.False(value >= other); Assert.False(value > other); Assert.False(value <= other); Assert.False(value < other); } else { if (expected >= 0) { Assert.True(value >= other); Assert.False(value < other); } if (expected > 0) { Assert.True(value > other); Assert.False(value <= other); } if (expected <= 0) { Assert.True(value <= other); Assert.False(value > other); } if (expected < 0) { Assert.True(value < other); Assert.False(value >= other); } } } Assert.Equal(expected, Math.Sign(value.CompareTo(obj))); }
/// <summary> /// Returns a bvec3 from component-wise application of IsNaN (Half.IsNaN(v)). /// </summary> public static bool IsNaN(Half v) => Half.IsNaN(v);
/// <summary> /// Returns a bvec3 from component-wise application of IsFinite (!Half.IsNaN(v) && !Half.IsInfinity(v)). /// </summary> public static bool IsFinite(Half v) => !Half.IsNaN(v) && !Half.IsInfinity(v);
public static void IsNaN(Half value, bool expected) { Assert.Equal(expected, Half.IsNaN(value)); }
public void ReadNaNHalf() { Half actualValue = Helper.Read <Half>(nameof(CborReader.ReadHalf), "F97E00"); Assert.True(Half.IsNaN(actualValue)); }