public void TestSingleComparer() { string propName = "SingleProp"; _boCol[0].SetPropertyValue(propName, 3.1); _boCol[1].SetPropertyValue(propName, 5.2); _boCol[2].SetPropertyValue(propName, 3.0); SingleComparer <MultiPropBO> comparer = new SingleComparer <MultiPropBO>(propName); _boCol.Sort(comparer); Assert.IsNull(_boCol[0].GetPropertyValue(propName)); Assert.AreEqual((Single)3.0, _boCol[1].GetPropertyValue(propName)); Assert.AreEqual((Single)3.1, _boCol[2].GetPropertyValue(propName)); Assert.AreEqual((Single)5.2, _boCol[3].GetPropertyValue(propName)); }
public static int DuplicateBinarySearch <T, TTarget>( [NotNull] this IList <T> values, [NotNull] SingleComparer <TTarget> comparer, [NotNull] Func <T, TTarget> converter) { if (comparer == null) { throw new ArgumentNullException(nameof(comparer)); } if (values.Count == 0) { return(-1); } int start = 0; int end = values.Count - 1; int midIndex = end / 2; int firstOccuranceIndex = -1; TTarget midItem = converter.Invoke(values[midIndex]); int compareResult = comparer.Compare(midItem); while (start <= end) { if (compareResult < 0) { start = midIndex + 1; } else { end = midIndex - 1; if (compareResult == 0) { firstOccuranceIndex = midIndex; } } midIndex = (start + end) / 2; midItem = converter.Invoke(values[midIndex]); compareResult = comparer.Compare(midItem); } return(firstOccuranceIndex); }
public void TestSingleComparer() { string propName = "SingleProp"; _boCol[0].SetPropertyValue(propName, 3.1); _boCol[1].SetPropertyValue(propName, 5.2); _boCol[2].SetPropertyValue(propName, 3.0); SingleComparer<MultiPropBO> comparer = new SingleComparer<MultiPropBO>(propName); _boCol.Sort(comparer); Assert.IsNull(_boCol[0].GetPropertyValue(propName)); Assert.AreEqual((Single)3.0, _boCol[1].GetPropertyValue(propName)); Assert.AreEqual((Single)3.1, _boCol[2].GetPropertyValue(propName)); Assert.AreEqual((Single)5.2, _boCol[3].GetPropertyValue(propName)); }