Skip to content

Commit

Permalink
Align terminology in RingRange with Set terminology
Browse files Browse the repository at this point in the history
  • Loading branch information
ReubenBond committed Aug 6, 2024
1 parent 55c87b4 commit 28b9edc
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 33 deletions.
20 changes: 4 additions & 16 deletions src/Orleans.Runtime/GrainDirectory/RingRange.cs
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ bool ISpanFormattable.TryFormat(Span<char> destination, out int charsWritten, Re

public bool Overlaps(RingRange other) => !IsEmpty && !other.IsEmpty && (Equals(other) || Contains(other.End) || other.Contains(End));

internal RingRange Inverse()
internal RingRange Complement()
{
if (IsEmpty)
{
Expand Down Expand Up @@ -265,30 +265,18 @@ internal IEnumerable<RingRange> Intersections(RingRange other)
}
}

// Gets the sub-ranges which are in this range but are not in the 'previous' range.
internal IEnumerable<RingRange> GetAdditions(RingRange previous)
// Gets the set difference: the sub-ranges which are in this range but are not in the 'previous' range.
internal IEnumerable<RingRange> Difference(RingRange previous)
{
// Additions are the intersections between this range and the inverse of the previous range.
foreach (var addition in Intersections(previous.Inverse()))
foreach (var addition in Intersections(previous.Complement()))
{
Debug.Assert(!addition.Overlaps(previous));
Debug.Assert(addition.Overlaps(this));
yield return addition;
}
}

// Gets the sub-ranges which are not in this range but are in the 'previous' range.
internal IEnumerable<RingRange> GetRemovals(RingRange previous)
{
// Removals are the intersections between the inverse of this range and the previous range.
foreach (var removal in Inverse().Intersections(previous))
{
Debug.Assert(removal.Overlaps(previous));
Debug.Assert(!removal.Overlaps(this));
yield return removal;
}
}

public static bool operator ==(RingRange left, RingRange right) => left.Equals(right);

public static bool operator !=(RingRange left, RingRange right) => !(left == right);
Expand Down
33 changes: 16 additions & 17 deletions test/NonSilo.Tests/Directory/RingRangeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,16 @@ public void RingRangeAdditionsTest()
{
var previous = RingRange.Empty;
var current = RingRange.CreateEquallyDividedRange(2, 0);
Assert.Empty(current.GetAdditions(current));
Assert.Empty(current.GetRemovals(current));
Assert.Empty(current.Difference(current));

Assert.Equal(current, Assert.Single(current.GetAdditions(previous)));
Assert.Empty(current.GetRemovals(previous));
Assert.Equal(current, Assert.Single(current.Difference(previous)));
Assert.Empty(previous.Difference(current));

var firstHalf = RingRange.CreateEquallyDividedRange(2, 0);
var secondHalf = RingRange.CreateEquallyDividedRange(2, 1);

Assert.Equal(firstHalf, Assert.Single(firstHalf.GetAdditions(secondHalf)));
Assert.Equal(secondHalf, Assert.Single(firstHalf.GetRemovals(secondHalf)));
Assert.Equal(firstHalf, Assert.Single(firstHalf.Difference(secondHalf)));
Assert.Equal(secondHalf, Assert.Single(secondHalf.Difference(firstHalf)));
}

[Fact]
Expand All @@ -30,7 +29,7 @@ public void RingRangeAdditionsTest_HolePunch()
var third = RingRange.CreateEquallyDividedRange(8, 2);
var fullRange = RingRange.Create(first.Start, third.End);

var midPunch = fullRange.GetAdditions(second);
var midPunch = fullRange.Difference(second);
Assert.Equal(2, midPunch.Count());
Assert.Equal(first, midPunch.First());
Assert.Equal(third, midPunch.Last());
Expand All @@ -40,31 +39,31 @@ public void RingRangeAdditionsTest_HolePunch()
public void RingRangeAdditionsTest_End()
{
var current = RingRange.Create(0x33333334, 0x66666667);
var result = current.GetAdditions(RingRange.Empty);
var result = current.Difference(RingRange.Empty);
Assert.Equal(current, Assert.Single(result));
}

[Fact]
public void RingRangeAdditionsTest_End_Two()
{
var current = RingRange.Create(0x33333334, 0x66666667);
var result = current.GetAdditions(RingRange.Create(uint.MaxValue - 1, 1));
Assert.Equal(current, Assert.Single(result));
var previous = RingRange.Create(uint.MaxValue - 1, 1);
var result = Assert.Single(current.Difference(previous));
Assert.Equal(current, result);
Assert.Equal(previous, Assert.Single(previous.Difference(current)));
}

[Fact]
public void RingRangeIntersection()
{
Assert.Empty(RingRange.Empty.GetAdditions(RingRange.Empty));
Assert.Empty(RingRange.Empty.GetRemovals(RingRange.Empty));
Assert.Empty(RingRange.Empty.Difference(RingRange.Empty));

Assert.Empty(RingRange.Full.GetAdditions(RingRange.Full));
Assert.Empty(RingRange.Full.GetRemovals(RingRange.Full));
Assert.Empty(RingRange.Full.Difference(RingRange.Full));

Assert.Equal(RingRange.Full, Assert.Single(RingRange.Full.GetAdditions(RingRange.Empty)));
Assert.Equal(RingRange.Full, Assert.Single(RingRange.Full.Difference(RingRange.Empty)));

Assert.Empty(RingRange.Empty.GetAdditions(RingRange.Full));
Assert.Empty(RingRange.Full.GetRemovals(RingRange.Empty));
Assert.Empty(RingRange.Empty.Difference(RingRange.Full));
Assert.Empty(RingRange.Full.Difference(RingRange.Empty));
}

[InlineData(1)]
Expand Down

0 comments on commit 28b9edc

Please sign in to comment.