public void Equality()
{
var r = new[] {
new[] {Range.NegativeX, Range.NegativeX},
new[] {Range.NegativeY},
new[] {Range.NegativeXPositiveY},
new[] {Range.NegativeXNegativeY},
new[] {Range.PositiveX},
new[] {Range.FromStartToFinish(Dir.AlongPositiveX, Dir.AlongNegativeY, moveClockwise: false)},
};
for (var i = 0; i < r.Length; i++) {
var g1 = r[i];
for (var j = 0; j < r.Length; j++) {
var g2 = r[j];
foreach (var e1 in g1) {
foreach (var e2 in g2) {
Assert.AreEqual(i != j, e1 != e2);
Assert.AreEqual(i == j, e1 == e2);
Assert.AreEqual(i == j, e1.Equals(e2));
Assert.AreEqual(i == j, e1.Equals(e2, Turn.FromNaturalAngle(0.001)));
Assert.AreEqual(i == j, e1.Equals((object)e2));
Assert.IsTrue(i != j || e1.GetHashCode() == e2.GetHashCode());
}
}
}
}
var dpx = Range.FromCenterAndMaxDeviation(Dir.AlongPositiveX, Turn.OneDegreeClockwise);
var dpx2 = Range.FromCenterAndMaxDeviation(Dir.AlongPositiveX+Turn.OneDegreeClockwise*1.001, Turn.OneDegreeClockwise*1.001);
Assert.IsTrue(dpx.Equals(dpx2, Turn.OneTurnClockwise * 0.01));
Assert.IsTrue(dpx.Equals(dpx, Turn.Zero));
Assert.IsTrue(!dpx.Equals(dpx2, Turn.Zero));
}