From 8168353a1a784dbdc816086a71ac849ac993a155 Mon Sep 17 00:00:00 2001 From: nth-commit Date: Fri, 27 Jan 2023 18:11:06 +1300 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=8D=20#376=20Simplify=20internals=20of?= =?UTF-8?q?=20error=20iterations=20by=20removing=20NextParameters=20from?= =?UTF-8?q?=20common=20interface=20(errors=20are=20terminal,=20next=20para?= =?UTF-8?q?ms=20are=20meaningless)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Internal/GenTransformingExtensions.cs | 42 ++++++++++--------- .../Iterations/GenIterationFactory.cs | 42 ++++++++----------- .../Gens/Iterations/GenIteration.cs | 18 ++++---- .../Gens/Iterations/Generic/GenIteration.cs | 31 +++++++------- src/GalaxyCheck/Operators/Cast.cs | 4 +- src/GalaxyCheck/Operators/SelectMany.cs | 6 +-- src/GalaxyCheck/Operators/Where.cs | 5 ++- .../Runners/Check/Sizing/SizingAspects.cs | 2 +- .../Check/Sizing/SizingAspectsAsync.cs | 2 +- 9 files changed, 77 insertions(+), 75 deletions(-) diff --git a/src/GalaxyCheck/Gens/Internal/GenTransformingExtensions.cs b/src/GalaxyCheck/Gens/Internal/GenTransformingExtensions.cs index dfb776a4..f9d90f70 100644 --- a/src/GalaxyCheck/Gens/Internal/GenTransformingExtensions.cs +++ b/src/GalaxyCheck/Gens/Internal/GenTransformingExtensions.cs @@ -1,5 +1,4 @@ -using GalaxyCheck; -using GalaxyCheck.Gens.Internal.Iterations; +using GalaxyCheck.Gens.Internal.Iterations; using GalaxyCheck.Gens.Iterations.Generic; using GalaxyCheck.Internal; using System; @@ -27,28 +26,28 @@ public static IGen TransformStream(this IGen gen, GenStreamTransform public static IGen TransformIterations( this IGen gen, GenIterationTransformation transformation) => - gen.TransformStream(stream => stream.Select(transformation.Invoke)); + gen.TransformStream(stream => stream.Select(transformation.Invoke)); public static IGen TransformInstances( this IGen gen, GenInstanceTransformation transformation) => - gen.TransformIterations((IGenIteration iteration) => - { - var either = iteration.ToEither(); + gen.TransformIterations((IGenIteration iteration) => + { + var either = iteration.ToEither(); - if (EitherExtension.IsLeft(either, out IGenInstance instance)) - { - return transformation(instance); - } - else if (EitherExtension.IsRight(either, out IGenIteration iterationConverted)) - { - return iterationConverted; - } - else - { - throw new Exception("Fatal: Unhandled branch"); - } - }); + if (EitherExtension.IsLeft(either, out IGenInstance instance)) + { + return transformation(instance); + } + else if (EitherExtension.IsRight(either, out IGenIteration iterationConverted)) + { + return iterationConverted; + } + else + { + throw new Exception("Fatal: Unhandled branch"); + } + }); public static IGen Repeat(this IGen gen) => gen.Transform(GenTransformations.Repeat()); } @@ -61,7 +60,10 @@ internal static class GenTransformations .Repeat(() => gen.Advanced.Run(parameters)) .Tap((iteration) => { - parameters = iteration.NextParameters; + parameters = iteration.Match( + instance => instance.NextParameters, + error => error.ReplayParameters, + discard => discard.NextParameters); }); }); } diff --git a/src/GalaxyCheck/Gens/Internal/Iterations/GenIterationFactory.cs b/src/GalaxyCheck/Gens/Internal/Iterations/GenIterationFactory.cs index c7274286..fba776d8 100644 --- a/src/GalaxyCheck/Gens/Internal/Iterations/GenIterationFactory.cs +++ b/src/GalaxyCheck/Gens/Internal/Iterations/GenIterationFactory.cs @@ -12,43 +12,40 @@ private record GenIteration : IGenIteration { public GenIteration( GenParameters replayParameters, - GenParameters nextParameters, IGenData data) { ReplayParameters = replayParameters; - NextParameters = nextParameters; Data = data; } public GenParameters ReplayParameters { get; init; } - public GenParameters NextParameters { get; init; } - public IGenData Data { get; init; } IGenData IGenIteration.Data => Data.Match( - onInstance: instanceData => GenData.InstanceData(instanceData.ExampleSpace), + onInstance: instanceData => GenData.InstanceData(instanceData.NextParameters, instanceData.ExampleSpace), onError: errorData => GenData.ErrorData(errorData.Message), - onDiscard: discardData => GenData.DiscardData(discardData.ExampleSpace)); + onDiscard: discardData => GenData.DiscardData(discardData.NextParameters, discardData.ExampleSpace)); public TResult Match( Func, TResult> onInstance, Func, TResult> onError, Func, TResult> onDiscard) => Data.Match( - onInstance: _ => onInstance(new GenInstance(ReplayParameters, NextParameters, Data)), - onError: _ => onError(new GenError(ReplayParameters, NextParameters, Data)), - onDiscard: _ => onDiscard(new GenDiscard(ReplayParameters, NextParameters, Data))); + onInstance: _ => onInstance(new GenInstance(ReplayParameters, Data)), + onError: _ => onError(new GenError(ReplayParameters, Data)), + onDiscard: _ => onDiscard(new GenDiscard(ReplayParameters, Data))); private record GenInstance : GenIteration, IGenInstance { public GenInstance( GenParameters replayParameters, - GenParameters nextParameters, IGenData data) - : base(replayParameters, nextParameters, data) + : base(replayParameters, data) { } + public GenParameters NextParameters => Data.Instance!.NextParameters; + public IExampleSpace ExampleSpace => Data.Instance!.ExampleSpace; IExampleSpace IGenInstanceData.ExampleSpace => ExampleSpace; @@ -56,11 +53,8 @@ public GenInstance( private record GenError : GenIteration, IGenError { - public GenError( - GenParameters replayParameters, - GenParameters nextParameters, - IGenData data) - : base(replayParameters, nextParameters, data) + public GenError(GenParameters replayParameters, IGenData data) + : base(replayParameters, data) { } @@ -71,12 +65,13 @@ private record GenDiscard : GenIteration, IGenDiscard { public GenDiscard( GenParameters replayParameters, - GenParameters nextParameters, IGenData data) - : base(replayParameters, nextParameters, data) + : base(replayParameters, data) { } + public GenParameters NextParameters => Data.Discard!.NextParameters; + public IExampleSpace ExampleSpace => Data.Discard!.ExampleSpace; } } @@ -86,21 +81,20 @@ public static IGenIteration Instance( GenParameters nextParameters, IExampleSpace exampleSpace) { - var instanceData = GenData.InstanceData(exampleSpace); - return new GenIteration(replayParameters, nextParameters, instanceData); + var instanceData = GenData.InstanceData(nextParameters, exampleSpace); + return new GenIteration(replayParameters, instanceData); } public static IGenIteration Error( GenParameters replayParameters, string message) => new GenIteration( - replayParameters, - replayParameters, - GenData.ErrorData(message)); + replayParameters, + GenData.ErrorData(message)); public static IGenIteration Discard( GenParameters replayParameters, GenParameters nextParameters, IExampleSpace exampleSpace) => - new GenIteration(replayParameters, nextParameters, GenData.DiscardData(exampleSpace)); + new GenIteration(replayParameters, GenData.DiscardData(nextParameters, exampleSpace)); } } diff --git a/src/GalaxyCheck/Gens/Iterations/GenIteration.cs b/src/GalaxyCheck/Gens/Iterations/GenIteration.cs index 31491d79..9d900a72 100644 --- a/src/GalaxyCheck/Gens/Iterations/GenIteration.cs +++ b/src/GalaxyCheck/Gens/Iterations/GenIteration.cs @@ -8,8 +8,6 @@ public interface IGenIteration { GenParameters ReplayParameters { get; } - GenParameters NextParameters { get; } - IGenData Data { get; } } @@ -29,6 +27,8 @@ T Match( public interface IGenInstanceData { + GenParameters NextParameters { get; } + IExampleSpace ExampleSpace { get; } } @@ -39,20 +39,22 @@ public interface IGenErrorData public interface IGenDiscardData { + GenParameters NextParameters { get; } + IExampleSpace ExampleSpace { get; } } - public record GenInstanceData(IExampleSpace ExampleSpace) : IGenInstanceData; + public record GenInstanceData(GenParameters NextParameters, IExampleSpace ExampleSpace) : IGenInstanceData; public record GenErrorData(string Message) : IGenErrorData; - public record GenDiscardData(IExampleSpace ExampleSpace) : IGenDiscardData; + public record GenDiscardData(GenParameters NextParameters, IExampleSpace ExampleSpace) : IGenDiscardData; public record GenData : IGenData { - public static GenData InstanceData(IExampleSpace exampleSpace) => new GenData + public static GenData InstanceData(GenParameters nextParameters, IExampleSpace exampleSpace) => new GenData { - Instance = new GenInstanceData(exampleSpace), + Instance = new GenInstanceData(nextParameters, exampleSpace), Error = null, Discard = null }; @@ -64,11 +66,11 @@ public record GenData : IGenData Discard = null }; - public static GenData DiscardData(IExampleSpace exampleSpace) => new GenData + public static GenData DiscardData(GenParameters nextParameters, IExampleSpace exampleSpace) => new GenData { Instance = null, Error = null, - Discard = new GenDiscardData(exampleSpace) + Discard = new GenDiscardData(nextParameters, exampleSpace) }; public IGenInstanceData? Instance { get; init; } diff --git a/src/GalaxyCheck/Gens/Iterations/Generic/GenIteration.cs b/src/GalaxyCheck/Gens/Iterations/Generic/GenIteration.cs index 9d06f457..ab6f905e 100644 --- a/src/GalaxyCheck/Gens/Iterations/Generic/GenIteration.cs +++ b/src/GalaxyCheck/Gens/Iterations/Generic/GenIteration.cs @@ -1,6 +1,6 @@ using GalaxyCheck.ExampleSpaces; using System; -using System.Collections.Generic; +using GalaxyCheck.Gens.Parameters; namespace GalaxyCheck.Gens.Iterations.Generic { @@ -45,23 +45,24 @@ public interface IGenInstanceData : IGenInstanceData new IExampleSpace ExampleSpace { get; } } - public record GenInstanceData(IExampleSpace ExampleSpace) : IGenInstanceData + public record GenInstanceData(GenParameters NextParameters, IExampleSpace ExampleSpace) : IGenInstanceData { IExampleSpace IGenInstanceData.ExampleSpace => ExampleSpace; } public record GenErrorData(string Message) : IGenErrorData; - public record GenDiscardData(IExampleSpace ExampleSpace) : IGenDiscardData; + public record GenDiscardData(GenParameters NextParameters, IExampleSpace ExampleSpace) : IGenDiscardData; public record GenData : IGenData { - public static GenData InstanceData(IExampleSpace exampleSpace) => new GenData - { - Instance = new GenInstanceData(exampleSpace), - Error = null, - Discard = null - }; + public static GenData InstanceData(GenParameters nextParameters, IExampleSpace exampleSpace) => + new GenData + { + Instance = new GenInstanceData(nextParameters, exampleSpace), + Error = null, + Discard = null + }; public static GenData ErrorData(string message) => new GenData { @@ -70,11 +71,11 @@ public record GenData : IGenData Discard = null }; - public static GenData DiscardData(IExampleSpace exampleSpace) => new GenData + public static GenData DiscardData(GenParameters nextParameters, IExampleSpace exampleSpace) => new GenData { Instance = null, Error = null, - Discard = new GenDiscardData(exampleSpace) + Discard = new GenDiscardData(nextParameters, exampleSpace) }; public IGenInstanceData? Instance { get; init; } @@ -87,9 +88,9 @@ public TResult Match( Func, TResult> onInstance, Func onError, Func onDiscard) => - Instance != null ? onInstance(Instance) : - Error != null ? onError(Error) : - Discard != null ? onDiscard(Discard) : - throw new NotSupportedException(); + Instance != null ? onInstance(Instance) : + Error != null ? onError(Error) : + Discard != null ? onDiscard(Discard) : + throw new NotSupportedException(); } } diff --git a/src/GalaxyCheck/Operators/Cast.cs b/src/GalaxyCheck/Operators/Cast.cs index f32e0f78..50c2c357 100644 --- a/src/GalaxyCheck/Operators/Cast.cs +++ b/src/GalaxyCheck/Operators/Cast.cs @@ -13,14 +13,14 @@ public static partial class Extensions .Select(iteration => iteration.Data.Match( onInstance: instance => GenIterationFactory.Instance( iteration.ReplayParameters, - iteration.NextParameters, + instance.NextParameters, instance.ExampleSpace.Cast()), onError: error => GenIterationFactory.Error( iteration.ReplayParameters, error.Message), onDiscard: discard => GenIterationFactory.Discard( iteration.ReplayParameters, - iteration.NextParameters, + discard.NextParameters, discard.ExampleSpace)))); public static IGen Cast(this IGen gen) diff --git a/src/GalaxyCheck/Operators/SelectMany.cs b/src/GalaxyCheck/Operators/SelectMany.cs index 206d16eb..3585612f 100644 --- a/src/GalaxyCheck/Operators/SelectMany.cs +++ b/src/GalaxyCheck/Operators/SelectMany.cs @@ -79,7 +79,7 @@ static IEnumerable> BindExampleSpace( return GenIterationFactory.Instance( iteration.ReplayParameters, - iteration.NextParameters, + instance.NextParameters, jointExampleSpace); }, onError: error => error, @@ -110,14 +110,14 @@ static IEnumerable> Run( yield return innerIteration.Match( onInstance: innerInstance => GenIterationFactory.Instance( iteration.ReplayParameters, - innerIteration.NextParameters, + innerInstance.NextParameters, innerInstance.ExampleSpace), onError: innerError => GenIterationFactory.Error( iteration.ReplayParameters, innerError.Message), onDiscard: innerDiscard => GenIterationFactory.Discard( iteration.ReplayParameters, - innerIteration.NextParameters, + innerDiscard.NextParameters, innerDiscard.ExampleSpace)); } diff --git a/src/GalaxyCheck/Operators/Where.cs b/src/GalaxyCheck/Operators/Where.cs index 2319eb1c..70ea4354 100644 --- a/src/GalaxyCheck/Operators/Where.cs +++ b/src/GalaxyCheck/Operators/Where.cs @@ -50,7 +50,10 @@ public static IGen Where(this IGen gen, Func pred) { var resizedIteration = GenIterationFactory.Discard( iteration.ReplayParameters, - iteration.NextParameters with { Size = iteration.NextParameters.Size.BigIncrement() }, + iteration.Data.Discard!.NextParameters with + { + Size = iteration.Data.Discard!.NextParameters.Size.BigIncrement() + }, iteration.Data.Discard!.ExampleSpace); return (iteration: resizedIteration, consecutiveDiscardCount); diff --git a/src/GalaxyCheck/Runners/Check/Sizing/SizingAspects.cs b/src/GalaxyCheck/Runners/Check/Sizing/SizingAspects.cs index 4d86b167..c8dd3047 100644 --- a/src/GalaxyCheck/Runners/Check/Sizing/SizingAspects.cs +++ b/src/GalaxyCheck/Runners/Check/Sizing/SizingAspects.cs @@ -58,7 +58,7 @@ private static ResizeStrategy SuperStrategicResize() return nextSize; }, - onError: error => error.NextParameters.Size, + onError: error => error.ReplayParameters.Size, onDiscard: discard => discard.NextParameters.Size); } diff --git a/src/GalaxyCheck/Runners/Check/Sizing/SizingAspectsAsync.cs b/src/GalaxyCheck/Runners/Check/Sizing/SizingAspectsAsync.cs index 84fb332e..4238b77a 100644 --- a/src/GalaxyCheck/Runners/Check/Sizing/SizingAspectsAsync.cs +++ b/src/GalaxyCheck/Runners/Check/Sizing/SizingAspectsAsync.cs @@ -58,7 +58,7 @@ private static ResizeStrategyAsync SuperStrategicResize() return nextSize; }, - onError: error => error.NextParameters.Size, + onError: error => error.ReplayParameters.Size, onDiscard: discard => discard.NextParameters.Size); }