public static TrackingEnumerationSet Intersect(TrackingEnumerationSet set1, TrackingEnumerationSet set2) { var builder = ImmutableHashSet.CreateBuilder <IOperation>(); // Get the min of two count. // Example: // if (a) // { // Bar.First(); // Bar.First(); // } // else // { // Bar.First(); // } // Then 'Bar' is only guaranteed to be enumerated once after the if-else statement var totalCount = Min(set1.EnumerationCount, set2.EnumerationCount); foreach (var operation in set1.Operations) { builder.Add(operation); } foreach (var operation in set2.Operations) { builder.Add(operation); } return(new TrackingEnumerationSet(builder.ToImmutable(), totalCount)); }
public static TrackingEnumerationSet Merge(TrackingEnumerationSet set1, TrackingEnumerationSet set2) { var builder = ImmutableHashSet.CreateBuilder <IOperation>(); var totalCount = AddInvocationCount(set1.EnumerationCount, set2.EnumerationCount); foreach (var operation in set1.Operations) { builder.Add(operation); } foreach (var operation in set2.Operations) { builder.Add(operation); } return(new TrackingEnumerationSet(builder.ToImmutable(), totalCount)); }