Example #1
0
        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);
        }
Example #3
0
        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));
        }