コード例 #1
0
        /// <summary>
        /// Will return true if the instance failed the filtering conditions.
        /// </summary>
        public FilteringResultEnum FilterOutDetailed(EvaluationResultSet evaluationResultSet)
        {     // For a condition to fail, it has to fail to both - positive and negative check.
            if (Enabled == false)
            { // Filtering is disabled.
                return(FilteringResultEnum.Disabled);
            }

            _totalItems++;

            bool positiveFailResult =
                (evaluationResultSet.CalculatePositivePerPosition() < PositivePerPosition ||
                 evaluationResultSet.CalculatePositiveSum() < PositiveSum ||
                 evaluationResultSet.PositiveEntries.Count < PositiveCount);

            bool negativeFailResult =
                (evaluationResultSet.CalculateNegativePerPosition() > NegativePerPosition ||
                 evaluationResultSet.CalculateNegativeSum() > NegativeSum ||
                 evaluationResultSet.NegativeEntries.Count < NegativeCount);

            // By default - we need both to be failed, for the item to be flushed.
            bool failResult = positiveFailResult && negativeFailResult;

            if (CombinedFiltering)
            {// When combined mode is on, we need only one to be failed - as we require both for pass result.
                failResult = positiveFailResult || negativeFailResult;
            }

            if (failResult)
            {
                _filteredOutItems++;
            }

            if (!positiveFailResult && !negativeFailResult)
            {
                return(FilteringResultEnum.CombinedPass);
            }

            if (!positiveFailResult)
            {
                return(FilteringResultEnum.PositivePass);
            }

            if (!negativeFailResult)
            {
                return(FilteringResultEnum.NegativePass);
            }

            return(FilteringResultEnum.Failed);
        }
コード例 #2
0
        /// <summary>
        /// Static baseMethod allowing us to sort result sets.
        /// </summary>
        static public EvaluationResultSet[] SortResultSets(IEnumerable <EvaluationResultSet> resultSets,
                                                           bool positiveSet, SortResultsEnum sortCriteria)
        {
            SortedDictionary <Decimal, EvaluationResultSet> dictionary = new SortedDictionary <Decimal, EvaluationResultSet>();

            foreach (EvaluationResultSet resultSet in resultSets)
            {
                // All the different values are coded in the double.
                // As the last part is a unique index, so that if values match, sorting will still work properly.
                double sortBasedValue = 0;
                if (sortCriteria == SortResultsEnum.OriginalOrder)
                {
                    sortBasedValue = dictionary.Count;
                }
                else if (sortCriteria == SortResultsEnum.Average)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositivePerPosition();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalculateNegativePerPosition();
                    }
                }
                else if (sortCriteria == SortResultsEnum.Count)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.PositiveEntries.Count;
                    }
                    else
                    {
                        sortBasedValue = resultSet.NegativeEntries.Count;
                    }
                }
                else if (sortCriteria == SortResultsEnum.Percentage)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositiveWinningPercentage();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalcualteNegativeWinningPercentage();
                    }
                }
                else if (sortCriteria == SortResultsEnum.Sum)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositiveSum();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalculateNegativeSum();
                    }
                }
                else
                {
                    System.Diagnostics.Debug.Fail("Sorting case not handled.");
                }

                dictionary.Add(new Decimal(100000000 * sortBasedValue) + new Decimal(dictionary.Count), resultSet);
            }

            EvaluationResultSet[] result = new EvaluationResultSet[dictionary.Count];
            dictionary.Values.CopyTo(result, 0);
            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Will return true if instance failed the filtering conditions.
        /// </summary>
        public bool FilterOut(EvaluationResultSet evaluationResultSet)
        {
            FilteringResultEnum result = FilterOutDetailed(evaluationResultSet);

            return(!(result == FilteringResultEnum.Disabled || result == FilteringResultEnum.CombinedPass || result == FilteringResultEnum.PositivePass || result == FilteringResultEnum.NegativePass));
        }
コード例 #4
0
        /// <summary>
        /// Static baseMethod allowing us to sort result sets.
        /// </summary>
        public static EvaluationResultSet[] SortResultSets(IEnumerable<EvaluationResultSet> resultSets, 
            bool positiveSet, SortResultsEnum sortCriteria)
        {
            SortedDictionary<Decimal, EvaluationResultSet> dictionary = new SortedDictionary<Decimal, EvaluationResultSet>();
            foreach (EvaluationResultSet resultSet in resultSets)
            {
                // All the different values are coded in the double.
                // As the last part is a unique index, so that if values match, sorting will still work properly.
                double sortBasedValue = 0;
                if (sortCriteria == SortResultsEnum.OriginalOrder)
                {
                    sortBasedValue = dictionary.Count;
                }
                else if (sortCriteria == SortResultsEnum.Average)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositivePerPosition();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalculateNegativePerPosition();
                    }
                }
                else if (sortCriteria == SortResultsEnum.Count)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.PositiveEntries.Count;
                    }
                    else
                    {
                        sortBasedValue = resultSet.NegativeEntries.Count;
                    }
                }
                else if (sortCriteria == SortResultsEnum.Percentage)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositiveWinningPercentage();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalcualteNegativeWinningPercentage();
                    }
                }
                else if (sortCriteria == SortResultsEnum.Sum)
                {
                    if (positiveSet)
                    {
                        sortBasedValue = resultSet.CalculatePositiveSum();
                    }
                    else
                    {
                        sortBasedValue = resultSet.CalculateNegativeSum();
                    }
                }
                else
                {
                    System.Diagnostics.Debug.Fail("Sorting case not handled.");
                }

                dictionary.Add(new Decimal(100000000 * sortBasedValue) + new Decimal(dictionary.Count), resultSet);
            }

            EvaluationResultSet[] result = new EvaluationResultSet[dictionary.Count];
            dictionary.Values.CopyTo(result, 0);
            return result;
        }
コード例 #5
0
 /// <summary>
 /// Will return true if instance failed the filtering conditions.
 /// </summary>
 public bool FilterOut(EvaluationResultSet evaluationResultSet)
 {
     FilteringResultEnum result = FilterOutDetailed(evaluationResultSet);
     return !(result == FilteringResultEnum.Disabled || result == FilteringResultEnum.CombinedPass || result == FilteringResultEnum.PositivePass || result == FilteringResultEnum.NegativePass);
 }
コード例 #6
0
        /// <summary>
        /// Will return true if the instance failed the filtering conditions.
        /// </summary>
        public FilteringResultEnum FilterOutDetailed(EvaluationResultSet evaluationResultSet)
        {
            // For a condition to fail, it has to fail to both - positive and negative check.

            if (Enabled == false)
            {// Filtering is disabled.
                return FilteringResultEnum.Disabled;
            }

            _totalItems++;

            bool positiveFailResult =
                (evaluationResultSet.CalculatePositivePerPosition() < PositivePerPosition ||
                evaluationResultSet.CalculatePositiveSum() < PositiveSum ||
                evaluationResultSet.PositiveEntries.Count < PositiveCount );

            bool negativeFailResult =
                (evaluationResultSet.CalculateNegativePerPosition() > NegativePerPosition ||
                evaluationResultSet.CalculateNegativeSum() > NegativeSum ||
                evaluationResultSet.NegativeEntries.Count < NegativeCount);

            // By default - we need both to be failed, for the item to be flushed.
            bool failResult = positiveFailResult && negativeFailResult;

            if (CombinedFiltering)
            {// When combined mode is on, we need only one to be failed - as we require both for pass result.
                failResult = positiveFailResult || negativeFailResult;
            }

            if (failResult)
            {
                _filteredOutItems++;
            }

            if (!positiveFailResult && !negativeFailResult)
            {
                return FilteringResultEnum.CombinedPass;
            }

            if (!positiveFailResult)
            {
                return FilteringResultEnum.PositivePass;
            }

            if (!negativeFailResult)
            {
                return FilteringResultEnum.NegativePass;
            }

            return FilteringResultEnum.Failed;
        }