/// <summary>
        /// Creates and returns an assignment for a parameter that is NOT in the coverage group
        /// by randomly selecting one of its equivalence classes.
        /// </summary>
        private bool AssignUncoveredParameter(
            IDictionary <string, ParameterAssignment> parameterAssignments,
            InputParameter inputParameter)
        {
            IList <string> equivalenceClassNames = inputParameter.EquivalenceClasses.Keys.ToList();

            if ((equivalenceClassNames == null) || !equivalenceClassNames.Any())
            {
                return(false);
            }

            int    randomIndex = _random.Next(equivalenceClassNames.Count);
            string selectedEquivalenceClass = equivalenceClassNames[randomIndex];

            if (string.IsNullOrEmpty(selectedEquivalenceClass))
            {
                return(false);
            }

            ParameterAssignment parameterAssignment = new ParameterAssignment();

            parameterAssignment.Set(
                inputParameter.Given,
                inputParameter.Name,
                inputParameter.Text,
                inputParameter.EquivalenceClasses[selectedEquivalenceClass]);

            parameterAssignments.Add(parameterAssignment.Name, parameterAssignment);
            return(true);
        }
        /// <summary>
        /// Creates and returns an assignment for a parameter in the coverage group
        /// based on a specific combination that has not yet been covered in a test case.
        /// </summary>
        private bool AssignCoveredParameter(
            IDictionary <string, ParameterAssignment> parameterAssignments,
            TestSpecification testSpecification,
            CoverageGroup coverageGroup,
            IList <string> uncoveredCombination,
            int groupIndex)
        {
            string selectedParameter        = coverageGroup.Parameters[groupIndex];
            string selectedEquivalenceClass = uncoveredCombination[groupIndex];

            if ((selectedParameter == null) || (selectedEquivalenceClass == null))
            {
                return(false);
            }

            InputParameter inputParameter = testSpecification.InputParameters[selectedParameter];

            if (inputParameter == null)
            {
                return(false);
            }

            ParameterAssignment parameterAssignment = new ParameterAssignment();

            parameterAssignment.Set(
                inputParameter.Given,
                inputParameter.Name,
                inputParameter.Text,
                inputParameter.EquivalenceClasses[selectedEquivalenceClass]);

            parameterAssignments.Add(parameterAssignment.Name, parameterAssignment);
            return(true);
        }