public void LocationDisplayModelComparerClassCompareMethodReturnsZeroIfConstructedForDownAndBothParametersAreNull() { LocationDisplayModelComparer comparer = new LocationDisplayModelComparer(Direction.Down); int result = comparer.Compare(null, null); Assert.AreEqual(0, result); }
public void LocationDisplayModelComparerClassCompareMethodReturnsOneIfConstructedForDownFirstParameterIsNotNullAndSecondParameterIsNull() { LocationDisplayModelComparer comparer = new LocationDisplayModelComparer(Direction.Down); LocationDisplayModel location = new LocationDisplayModel { Mileage = DistanceHelpers.GetDistance() }; int result = comparer.Compare(location, null); Assert.AreEqual(1, result); }
public void LocationDisplayModelComparerClassCompareMethodReturnsOneIfConstructedForUpAndFirstParameterHasLowerMileageThanSecondParameter() { LocationDisplayModelComparer comparer = new LocationDisplayModelComparer(Direction.Up); LocationDisplayModel x = new LocationDisplayModel { Mileage = DistanceHelpers.GetDistance() }; LocationDisplayModel y = new LocationDisplayModel { Mileage = DistanceHelpers.GetDistanceGreaterThan(x.Mileage) }; int result = comparer.Compare(x, y); Assert.AreEqual(1, result); }
public void LocationDisplayModelComparerClassCompareMethodReturnsMinusOneIfConstructedForDownAndParametersHaveSameMileageAndFirstParameterIsArrivalRowAndSecondParameterIsDepartureRow() { LocationDisplayModelComparer comparer = new LocationDisplayModelComparer(Direction.Down); LocationDisplayModel x = new LocationDisplayModel { Mileage = DistanceHelpers.GetDistance(), LocationKey = _rnd.NextHexString(8) + "-a" }; LocationDisplayModel y = new LocationDisplayModel { Mileage = new Distance { Mileage = x.Mileage.Mileage, Chainage = x.Mileage.Chainage }, LocationKey = _rnd.NextHexString(8) + "-d" }; int result = comparer.Compare(x, y); Assert.AreEqual(-1, result); }
/// <summary> /// Add an element to a sorted collection, using the given <see cref="IComparer{LocationDisplayModel}" /> to determine the location to insert the element at. /// </summary> /// <param name="item">The element to be added to the collection.</param> /// <param name="comparer">The comparer to use when determining the location the element should be inserted at.</param> public int AddSorted(LocationDisplayModel item, LocationDisplayModelComparer comparer) { if (item is null) { throw new ArgumentNullException(nameof(item)); } lock (InnerCollection) { if (InnerCollection.Count == 0) { Add(item); return(Count - 1); } if (comparer == null) { throw new ArgumentNullException(nameof(comparer)); } InnerCollection.Add(item); for (var i = InnerCollection.Count - 1; i > 0; i--) { var comparison = comparer.Compare(InnerCollection[i], InnerCollection[i - 1]); if (comparison < 0) { LocationDisplayModel swap = InnerCollection[i]; InnerCollection[i] = InnerCollection[i - 1]; InnerCollection[i - 1] = swap; } else { SetDisplaySeparatorPropertiesOfGroup(item.LocationId); OnAdd(item, i); return(i); } } SetDisplaySeparatorPropertiesOfGroup(item.LocationId); OnAdd(item, 0); return(0); } }