// says they should be equal, even if the signs differ.
return leftIsNegative && !AreZero(left, right);
}
- return (short)(left._value) < (short)(right._value);
+ return (left._value < right._value) ^ leftIsNegative;
}
public static bool operator >(Half left, Half right)
// says they should be equal, even if the signs differ.
return leftIsNegative || AreZero(left, right);
}
- return (short)(left._value) <= (short)(right._value);
+ return (left._value <= right._value) ^ leftIsNegative;
}
public static bool operator >=(Half left, Half right)
[InlineData(double.NaN, double.NaN, 0)]
[InlineData(double.NaN, 0.0, -1)]
[InlineData(234.0, null, 1)]
+ [InlineData(double.MinValue, double.NegativeInfinity, 1)]
+ [InlineData(double.NegativeInfinity, double.MinValue, -1)]
+ [InlineData(-0d, double.NegativeInfinity, 1)]
+ [InlineData(double.NegativeInfinity, -0d, -1)]
public static void CompareTo_Other_ReturnsExpected(double d1, object value, int expected)
{
if (value is double d2)
yield return new object[] { Half.NaN, Half.NaN, 0 };
yield return new object[] { Half.NaN, UInt16BitsToHalf(0x0000), -1 };
yield return new object[] { Half.MaxValue, null, 1 };
+ yield return new object[] { Half.MinValue, Half.NegativeInfinity, 1 };
+ yield return new object[] { Half.NegativeInfinity, Half.MinValue, -1 };
+ yield return new object[] { UInt16BitsToHalf(0x8000), Half.NegativeInfinity, 1 }; // Negative zero
+ yield return new object[] { Half.NegativeInfinity, UInt16BitsToHalf(0x8000), -1 }; // Negative zero
}
[Theory]
[InlineData(float.NaN, float.NaN, 0)]
[InlineData(float.NaN, 0.0f, -1)]
[InlineData(234.0f, null, 1)]
+ [InlineData(float.MinValue, float.NegativeInfinity, 1)]
+ [InlineData(float.NegativeInfinity, float.MinValue, -1)]
+ [InlineData(-0f, float.NegativeInfinity, 1)]
+ [InlineData(float.NegativeInfinity, -0f, -1)]
public static void CompareTo_Other_ReturnsExpected(float f1, object value, int expected)
{
if (value is float f2)