public void APropertyReturningMethodInfoReceivesAConcatenationOfInput()
        {
            var gen0 = Gen.Int32();
            var gen1 = Gen.Int32();

            var forAllProperty      = Property.ForAll(gen0, gen1, (x, y) => true);
            var forAllPropertyInput = forAllProperty.Select(x => new object[] { x.Input.Item1, x.Input.Item2 });

            var methodInfoProperty      = Property.Reflect(GetMethod(nameof(ARecursiveProperty)), this);
            var methodInfoPropertyInput = methodInfoProperty.Select(x => x.PresentedInput);

            GenAssert.Equal(forAllPropertyInput, methodInfoPropertyInput, 0, 1);
        }
            public void ItErrorsIfTheTypeOfTheGeneratorIsNotAssignableToTheTypeOfTheParameter([Seed] int seed)
            {
                var gen = GalaxyCheck.Gen.Parameters(
                    GetMethod(nameof(MethodWithOneParameter)),
                    customGens: new Dictionary <int, GalaxyCheck.IGen>
                {
                    { 0, GalaxyCheck.Gen.String() }
                });

                GenAssert.Errors(
                    gen,
                    seed: seed,
                    expectedMessage: $"Error while running generator ParametersGen: generator of type 'System.String' is not compatible with parameter of type 'System.Int32'");
            }
            public void ItErrorsIfParameterIndexIsNotOfTheMethod([GreaterThanEqual(1)] int i, [Seed] int seed)
            {
                var gen = GalaxyCheck.Gen.Parameters(
                    GetMethod(nameof(MethodWithOneParameter)),
                    customGens: new Dictionary <int, GalaxyCheck.IGen>
                {
                    { i, GalaxyCheck.Gen.Int32() }
                });

                GenAssert.Errors(
                    gen,
                    seed: seed,
                    expectedMessage: $"Error while running generator ParametersGen: parameter index '{i}' of custom generator was not valid");
            }
        public void ABooleanReturningMethodInfoReceivesInputLikeForAll()
        {
            var gen0 = Gen.Int32();
            var gen1 = Gen.Int32();

            var forAllProperty      = Property.ForAll(gen0, gen1, (x, y) => true);
            var forAllPropertyInput = forAllProperty.Select(x => new object[] { x.Input.Item1, x.Input.Item2 });

            Func <int, int, bool> f     = (x, y) => true;
            var methodInfoProperty      = Property.Reflect(f.Method, null);
            var methodInfoPropertyInput = methodInfoProperty.Select(x => x.Input);

            GenAssert.Equal(forAllPropertyInput, methodInfoPropertyInput, 0, 10);
        }
        public void AVoidMethodInfoReceivesInputLikeForAll()
        {
            var gen0 = Gen.Int32();
            var gen1 = Gen.Int32();

            var forAllProperty      = Property.ForAll(gen0, gen1, (x, y) => { });
            var forAllPropertyInput = forAllProperty.Select(x => new object[] { x.Input.Item1, x.Input.Item2 });

            Action <int, int> f         = (x, y) => { };
            var methodInfoProperty      = Property.Reflect(f.Method, null);
            var methodInfoPropertyInput = methodInfoProperty.Select(x => x.Input);

            GenAssert.Equal(forAllPropertyInput, methodInfoPropertyInput, 0, 10);
        }