public void MinimazingOrMaximazing_Deep(
            [Values(MinimazingOrMaximazingMode.Maximazing, MinimazingOrMaximazingMode.Minimazing)] MinimazingOrMaximazingMode mode)
        {
            long      counter   = 0;
            Stopwatch stopwatch = Stopwatch.StartNew();

            test(new int[0], mode);

            for (int v1 = -2; v1 <= 2; v1++)
            {
                test(new [] { v1 }, mode);
                for (int v2 = -2; v2 <= 2; v2++)
                {
                    test(new [] { v1, v2 }, mode);
                    for (int v3 = -2; v3 <= 2; v3++)
                    {
                        test(new [] { v1, v2, v3 }, mode);
                        for (int v4 = -2; v4 <= 2; v4++)
                        {
                            test(new [] { v1, v2, v3, v4 }, mode);
                            for (int v5 = -2; v5 <= 2; v5++)
                            {
                                test(new[] { v1, v2, v3, v4, v5 }, mode);
                                counter++;
                                if (counter % 100 == 0)
                                {
                                    _textFileOutputTime.AppentLine($"{stopwatch.Elapsed.TotalMinutes}: {counter}");
                                }
                            }
                        }
                    }
                }
            }
        }
예제 #2
0
 private int getResult(ObservableCollection <int> items, MinimazingOrMaximazingMode mode)
 {
     if (items.Count == 0)
     {
         return(0);
     }
     return(mode == MinimazingOrMaximazingMode.Maximazing ? items.Max() : items.Min());
 }
 public MinimazingOrMaximazing(
     IReadScalar <INotifyCollectionChanged> sourceScalar,
     MinimazingOrMaximazingMode mode,
     IReadScalar <IComparer <TSourceItem> > comparerScalar = null) : this(mode, Utils.getCapacity(sourceScalar))
 {
     _sourceScalar   = sourceScalar;
     _comparerScalar = comparerScalar;
 }
 public MinimazingOrMaximazing(
     INotifyCollectionChanged source,
     MinimazingOrMaximazingMode mode,
     IComparer <TSourceItem> comparer = null) : this(mode, Utils.getCapacity(source))
 {
     _source   = source;
     _comparer = comparer;
 }
예제 #5
0
 public MinimazingOrMaximazing(
     IReadScalar <INotifyCollectionChanged> sourceScalar,
     MinimazingOrMaximazingMode mode,
     IComparer <TSourceItem> comparer = null,
     TSourceItem defaultValue         = default(TSourceItem)) : this(mode, Utils.getCapacity(sourceScalar))
 {
     _sourceScalar = sourceScalar;
     _comparer     = comparer;
     _defaultValue = defaultValue;
 }
예제 #6
0
        public MinimazingOrMaximazing(
            INotifyCollectionChanged source,
            MinimazingOrMaximazingMode mode,
            IComparer <TSourceItem> comparer = null,
            TSourceItem defaultValue         = default(TSourceItem)) : this(mode, Utils.getCapacity(source))
        {
            _source = source;

            _comparer = comparer ?? Comparer <TSourceItem> .Default;

            _defaultValue = defaultValue;

            initializeFromSource();
        }
예제 #7
0
        private MinimazingOrMaximazing(MinimazingOrMaximazingMode mode, int capacity)
        {
            _sourceItems = new List <TSourceItem>(capacity);
            _mode        = mode;
            switch (_mode)
            {
            case MinimazingOrMaximazingMode.Maximazing:
                _checkCompareResult     = _checkCompareResultPositive;
                _antiCheckCompareResult = _checkCompareResultNegative;
                break;

            case MinimazingOrMaximazingMode.Minimazing:
                _checkCompareResult     = _checkCompareResultNegative;
                _antiCheckCompareResult = _checkCompareResultPositive;
                break;
            }
        }
예제 #8
0
        private MinimazingOrMaximazing(MinimazingOrMaximazingMode mode, int capacity)
        {
            _sourceCopy = new List <TSourceItem>(capacity);
            _mode       = mode;
            switch (_mode)
            {
            case MinimazingOrMaximazingMode.Maximazing:
                _checkCompareResult     = __checkCompareResultPositive;
                _antiCheckCompareResult = __checkCompareResultNegative;
                break;

            case MinimazingOrMaximazingMode.Minimazing:
                _checkCompareResult     = __checkCompareResultNegative;
                _antiCheckCompareResult = __checkCompareResultPositive;
                break;
            }

            _thisAsSourceCollectionChangeProcessor = this;
            _deferredQueuesCount = 2;
        }
예제 #9
0
        private void test(int[] values, MinimazingOrMaximazingMode mode)
        {
            string testNum  = string.Empty;
            int    index    = 0;
            int    value    = 0;
            int    indexOld = 0;
            int    indexNew = 0;

            ObservableCollection <int>   items;
            MinimazingOrMaximazing <int> minimazingOrMaximazing;

            try
            {
                trace(testNum          = "1", values, index, value, indexOld, indexNew);
                items                  = getObservableCollection(values);
                minimazingOrMaximazing = getMinimazingOrMaximazing(items, mode);
                minimazingOrMaximazing.ValidateConsistency();
                consumer.Dispose();
                Assert.AreEqual(minimazingOrMaximazing.Value, getResult(items, mode));

                for (index = 0; index < values.Length; index++)
                {
                    trace(testNum = "2", values, index, value, indexOld, indexNew);
                    items         = getObservableCollection(values);
                    MinimazingOrMaximazing <int> minimazingOrMaximazing1 = getMinimazingOrMaximazing(items, mode);
                    items.RemoveAt(index);
                    minimazingOrMaximazing1.ValidateConsistency();
                    consumer.Dispose();
                    Assert.AreEqual(minimazingOrMaximazing1.Value, getResult(items, mode));
                }

                for (index = 0; index <= values.Length; index++)
                {
                    for (value = 0; value <= values.Length; value++)
                    {
                        trace(testNum = "8", values, index, value, indexOld, indexNew);
                        items         = getObservableCollection(values);
                        MinimazingOrMaximazing <int> minimazingOrMaximazing1 = getMinimazingOrMaximazing(items, mode);
                        items.Insert(index, value);
                        minimazingOrMaximazing1.ValidateConsistency();
                        consumer.Dispose();
                        Assert.AreEqual(minimazingOrMaximazing1.Value, getResult(items, mode));
                    }
                }

                for (index = 0; index < values.Length; index++)
                {
                    for (value = -1; value <= values.Length; value++)
                    {
                        trace(testNum = "3", values, index, value, indexOld, indexNew);
                        items         = getObservableCollection(values);
                        MinimazingOrMaximazing <int> minimazingOrMaximazing2 = getMinimazingOrMaximazing(items, mode);
                        items[index] = value;
                        minimazingOrMaximazing2.ValidateConsistency();
                        consumer.Dispose();
                        Assert.AreEqual(minimazingOrMaximazing2.Value, getResult(items, mode));
                    }
                }

                for (indexOld = 0; indexOld < values.Length; indexOld++)
                {
                    for (indexNew = 0; indexNew < values.Length; indexNew++)
                    {
                        trace(testNum = "7", values, index, value, indexOld, indexNew);
                        items         = getObservableCollection(values);
                        MinimazingOrMaximazing <int> minimazingOrMaximazing2 = getMinimazingOrMaximazing(items, mode);
                        items.Move(indexOld, indexNew);
                        minimazingOrMaximazing2.ValidateConsistency();
                        consumer.Dispose();
                        Assert.AreEqual(minimazingOrMaximazing2.Value, getResult(items, mode));
                    }
                }
            }
            catch (Exception e)
            {
                string traceString = getTraceString(testNum, values, index, value, indexOld, indexNew);
                _textFileOutputLog.AppentLine(traceString);
                _textFileOutputLog.AppentLine(e.Message);
                _textFileOutputLog.AppentLine(e.StackTrace);
                throw new Exception(traceString, e);
            }

            writeUsefulTest(getTestString(values, mode));
        }
예제 #10
0
 private MinimazingOrMaximazing <int> getMinimazingOrMaximazing(ObservableCollection <int> items, MinimazingOrMaximazingMode mode)
 {
     return(mode == MinimazingOrMaximazingMode.Maximazing ? items.Maximazing().For(consumer) : items.Minimazing().For(consumer));
 }
예제 #11
0
 protected string getTestString(int[] ids1, MinimazingOrMaximazingMode mode)
 {
     return($"			test(new int[]{{{string.Join(", ", ids1.Select(v => v.ToString()))}}}, MinimazingOrMaximazingMode.{mode});");
 }