예제 #1
0
        private void Generate(StringBuilder builder, State state)
        {
            var transitions = state.GetSortedTransitions(true);

            if (transitions.Count == 0)
            {
                if (!state.Accept)
                {
                    throw new InvalidOperationException("state");
                }

                return;
            }

            int nroptions = state.Accept ? transitions.Count : transitions.Count - 1;
            int option    = Xeger.GetRandomInt(0, nroptions, random);

            if (state.Accept && option == 0)
            {
                // 0 is considered stop.
                return;
            }

            // Moving on to next transition.
            Transition transition = transitions[option - (state.Accept ? 1 : 0)];

            this.AppendChoice(builder, transition);
            Generate(builder, transition.To);
        }
        private static object CreateAnonymous(RegularExpressionRequest request)
        {
            string pattern = request.Pattern;

            try
            {
                string regex = new Xeger(pattern).Generate();
                if (Regex.IsMatch(regex, pattern))
                {
                    return regex;
                }
            }
            catch (InvalidOperationException)
            {
#pragma warning disable 618
                return new NoSpecimen(request);
#pragma warning restore 618
            }
            catch (ArgumentException)
            {
#pragma warning disable 618
                return new NoSpecimen(request);
#pragma warning restore 618
            }

#pragma warning disable 618
            return new NoSpecimen(request);
#pragma warning restore 618
        }
예제 #3
0
        private void AppendChoice(StringBuilder builder, Transition transition)
        {
            var c = (char)Xeger.GetRandomInt(transition.Min, transition.Max, random);

            builder.Append(c);
        }