/// <summary> /// Creates an example space by recursively applying a shrinking function to the root value. /// </summary> /// <typeparam name="T">The type of the example's value.</typeparam> /// <param name="rootValue"></param> /// <param name="shrink"></param> /// <param name="measure"></param> /// <param name="identify"></param> /// <returns></returns> public static IExampleSpace <T> Unfold <T>( T rootValue, ShrinkFunc <T> shrink, MeasureFunc <T> measure, IdentifyFunc <T> identify) { return(Unfold( rootValue, ShrinkFunc.WithoutContext(shrink), measure, identify)); }
public static IExampleSpace <T> Unfold <T, TContext>( T rootValue, ContextualShrinker <T, TContext> contextualShrinker, MeasureFunc <T> measure, IdentifyFunc <T> identify) { var functions = new ContextualizedUnfoldFunctions <T, TContext, T>( contextualShrinker.ContextualShrink, measure, identify, x => x, contextualShrinker.ContextualTraverse); var contextualizedExampleSpace = UnfoldHelpers.UnfoldInternal( rootValue, contextualShrinker.RootContext, functions); return(contextualizedExampleSpace.Map(x => x.Value)); }
private record ContextualizedUnfoldFunctions <TAccumulator, TContext, TProjection>( ContextualShrinkFunc <TAccumulator, TContext> Shrink, MeasureFunc <TAccumulator> Measure, IdentifyFunc <TAccumulator> Identify, Func <TAccumulator, TProjection> Projection, NextContextFunc <TProjection, TContext> NextContext);