/// <summary> /// Helper function to create an List fulfilling the given specific parameters. The function will /// create an List and then add values /// to it until it is full. It will begin by adding the desired number of matching, /// followed by random (deterministic) elements until the desired count is reached. /// </summary> protected IEnumerable <T> CreateList(IEnumerable <T> enumerableToMatchTo, int count, int numberOfMatchingElements, int numberOfDuplicateElements) { JCG.List <T> list = new JCG.List <T>(count); int seed = 528; int duplicateAdded = 0; JCG.List <T> match = null; // Add Matching elements if (enumerableToMatchTo != null) { match = enumerableToMatchTo.ToList(); for (int i = 0; i < numberOfMatchingElements; i++) { list.Add(match[i]); while (duplicateAdded++ < numberOfDuplicateElements) { list.Add(match[i]); } } } // Add elements to reach the desired count while (list.Count < count) { T toAdd = CreateT(seed++); while (list.Contains(toAdd) || (match != null && match.Contains(toAdd))) // Don't want any unexpectedly duplicate values { toAdd = CreateT(seed++); } list.Add(toAdd); while (duplicateAdded++ < numberOfDuplicateElements) { list.Add(toAdd); } } // Validate that the Enumerable fits the guidelines as expected Debug.Assert(list.Count == count); if (match != null) { int actualMatchingCount = 0; foreach (T lookingFor in match) { actualMatchingCount += list.Contains(lookingFor) ? 1 : 0; } Assert.Equal(numberOfMatchingElements, actualMatchingCount); } return(list); }
/// <summary> /// <see cref="ICollection{IQueryNodeProcessor}.Add(IQueryNodeProcessor)"/> /// </summary> public virtual bool Add(IQueryNodeProcessor processor) { this.processors.Add(processor); bool added = processors.Contains(processor); if (added) { processor.SetQueryConfigHandler(this.queryConfig); } return(added); }