public void FromStartToFinish()
{
Assert.IsTrue(Range.FromStartToFinish(Dir.AlongPositiveX, Dir.AlongNegativeX, moveClockwise: true).Equals(Range.NegativeY));
Assert.IsTrue(Range.FromStartToFinish(Dir.AlongPositiveX, Dir.AlongNegativeX, moveClockwise: false).Equals(Range.PositiveY));
var r0 = Range.FromStartToFinish(Dir.AlongNegativeY, Dir.AlongNegativeY, true);
Assert.IsTrue(!r0.Contains(Dir.AlongPositiveY));
Assert.IsTrue(r0.Contains(Dir.AlongNegativeY));
Assert.IsTrue(!r0.Contains(Dir.AlongNegativeY + Turn.OneTurnClockwise * 1.0001));
Assert.IsTrue(!r0.Contains(Dir.AlongNegativeY - Turn.OneTurnClockwise * 1.0001));
var r1 = Range.FromStartToFinish(Dir.AlongPositiveX, Dir.AlongPositiveX + Turn.OneDegreeClockwise, moveClockwise: true);
var r2 = Range.FromStartToFinish(Dir.AlongPositiveX + Turn.OneDegreeClockwise, Dir.AlongPositiveX, moveClockwise: false);
Assert.IsTrue(r1.Equals(r2));
Assert.IsTrue(!r1.Contains(Dir.AlongPositiveX - Turn.OneDegreeClockwise * 0.001));
Assert.IsTrue(r1.Contains(Dir.AlongPositiveX + Turn.OneDegreeClockwise * 0.001));
Assert.IsTrue(r1.Contains(Dir.AlongPositiveX + Turn.OneDegreeClockwise * 0.999));
Assert.IsTrue(!r1.Contains(Dir.AlongPositiveX + Turn.OneDegreeClockwise * 1.001));
var r3 = Range.FromStartToFinish(Dir.AlongPositiveX, Dir.AlongPositiveX + Turn.OneDegreeClockwise, moveClockwise: false);
Assert.IsTrue(!r1.Equals(r3));
Assert.IsTrue(r1.Inverse().Equals(r3, Turn.OneTurnClockwise * 0.00001));
}