Beispiel #1
0
        static ParameterInteraction CreateInteraction(Model <T> model, Expression expression, IList <ParameterBase> parameters, ParameterExpression parameterExpr)
        {
            Func <T, bool> filter = expression is Expression <Func <T, bool> >?
                                    ((Expression <Func <T, bool> >)expression).Compile() :
                                        Expression.Lambda <Func <T, bool> >(expression, parameterExpr).Compile();


            var parameterIndices = (from parameter in parameters
                                    select model.Parameters.IndexOf(parameter)).ToList();

            parameterIndices.Sort();

            ParameterInteraction interaction = new ParameterInteraction(parameterIndices);
            List <int[]>         valueTable  = ParameterInteractionTable <T> .GenerateValueTable(model.Parameters, interaction);

            foreach (var valueIndices in valueTable)
            {
                ValueCombinationState comboState = filter(BuildVariation(model, parameterIndices, valueIndices)) ? ValueCombinationState.Covered : ValueCombinationState.Excluded;
                interaction.Combinations.Add(new ValueCombination(valueIndices, interaction)
                {
                    State = comboState
                });
            }

            return(interaction);
        }
        // helper to implement Constraint.GetExcludeCombinations
        internal static ParameterInteraction GetExcludedCombinations <T>(Model model, Constraint constraint, Parameter first, Parameter second, T value, Func <T, T, bool> comparison)
        {
            Debug.Assert(first != null && model != null && constraint != null && comparison != null);
            List <int> parameterIndices = new List <int>();

            parameterIndices.Add(model.Parameters.IndexOf(first));
            if (second != null)
            {
                parameterIndices.Add(model.Parameters.IndexOf(second));
            }
            parameterIndices.Sort();

            ParameterInteraction interaction = new ParameterInteraction(parameterIndices);
            List <int[]>         valueTable  = ParameterInteractionTable.GenerateValueTable(model.Parameters, interaction);

            foreach (var valueIndices in valueTable)
            {
                T value1, value2;

                value1 = (T)first[valueIndices[0]];
                if (second == null)
                {
                    value2 = value;
                }
                else
                {
                    value2 = (T)second[valueIndices[1]];
                }

                ValueCombinationState comboState = comparison(value1, value2) ? ValueCombinationState.Covered : ValueCombinationState.Excluded;
                interaction.Combinations.Add(new ValueCombination(valueIndices, interaction)
                {
                    State = comboState
                });
            }

            return(interaction);
        }