private void test(int[] values)
        {
            string testNum  = string.Empty;
            int    index    = 0;
            int    value    = 0;
            int    indexOld = 0;
            int    indexNew = 0;

            ObservableCollection <int> items;
            Summarizing <int>          summarizing;

            try
            {
                trace(testNum = "1", values, index, value, indexOld, indexNew);
                items         = getObservableCollection(values);
                summarizing   = items.Summarizing().For(consumer);
                validateSummarizingConsistency(summarizing, items);
                Assert.AreEqual(summarizing.Value, items.Sum());
                consumer.Dispose();

                for (index = 0; index < values.Length; index++)
                {
                    trace(testNum = "2", values, index, value, indexOld, indexNew);
                    items         = getObservableCollection(values);
                    Summarizing <int> summarizing1 = items.Summarizing().For(consumer);
                    items.RemoveAt(index);
                    validateSummarizingConsistency(summarizing1, items);
                    Assert.AreEqual(summarizing1.Value, items.Sum());
                    consumer.Dispose();
                }

                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);
                        Summarizing <int> summarizing1 = items.Summarizing().For(consumer);
                        items.Insert(index, value);
                        validateSummarizingConsistency(summarizing1, items);
                        Assert.AreEqual(summarizing1.Value, items.Sum());
                        consumer.Dispose();
                    }
                }

                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);
                        Summarizing <int> summarizing2 = items.Summarizing().For(consumer);
                        items[index] = value;
                        validateSummarizingConsistency(summarizing2, items);
                        Assert.AreEqual(summarizing2.Value, items.Sum());
                        consumer.Dispose();
                    }
                }

                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);
                        Summarizing <int> summarizing2 = items.Summarizing().For(consumer);
                        items.Move(indexOld, indexNew);
                        validateSummarizingConsistency(summarizing2, items);
                        Assert.AreEqual(summarizing2.Value, items.Sum());
                        consumer.Dispose();
                    }
                }
            }
            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));
        }
 private void validateSummarizingConsistency(Summarizing <int> summarizing, ObservableCollection <int> items)
 {
     Assert.AreEqual(summarizing.Value, items.Sum());
 }