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 }
private void AppendChoice(StringBuilder builder, Transition transition) { var c = (char)Xeger.GetRandomInt(transition.Min, transition.Max, random); builder.Append(c); }