public NebulaCheck.IGen <Test> ItErrorsWhenMaximumIsLessThanOrigin() =>
        from max in Gen.Int16().LessThan(short.MaxValue)
        from origin in Gen.Int16().GreaterThan(max)
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen.Int16().LessThanEqual(max).ShrinkTowards(origin);

            Action action = () => gen.SampleOne(seed: seed, size: size);

            action.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error while running generator Int16: 'origin' must be between 'min' and 'max'");
        });
        public NebulaCheck.IGen <Test> ItErrorsWhenMinimumIsGreaterThanMaximum() =>
        from min in Gen.Int16().GreaterThan(short.MinValue)
        from max in Gen.Int16().LessThan(min)
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen.Int16().GreaterThanEqual(min).LessThanEqual(max);

            Action action = () => gen.SampleOne(seed: seed, size: size);

            action.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error while running generator Int16: 'min' cannot be greater than 'max'");
        });
        public NebulaCheck.IGen <Test> ItCanOverrideANestedExternalInitProperty() =>
        from value in DomainGen.Any()
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen
                      .Create <RecordWithOneNestedProperty>()
                      .OverrideMember(x => x.Property.Property, GalaxyCheck.Gen.Constant(value));

            var instance = gen.SampleOne(seed: seed, size: size);

            instance.Should().NotBeNull();
            instance.Property.Property.Should().Be(value);
        });
Beispiel #4
0
        public NebulaCheck.IGen <Test> ItErrorsWhenCountIsNegative() =>
        from elementGen in DomainGen.Gen()
        from count in Gen.Int32().LessThan(0)
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen.List(elementGen).WithCount(count);

            Action action = () => gen.SampleOne(seed: seed, size: size);

            action.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error while running generator ListGen: 'count' cannot be negative");
        });
Beispiel #5
0
        public NebulaCheck.IGen <Test> IfTheReplayEncodesAnInvalidShrinkPath_ItThrows() =>
        from func in Gen.Function(Gen.Boolean())
        from replaySeed in Gen.Int32()
        from replaySize in Gen.Int32().Between(0, 100)
        from replayPath in Gen.Int32().ListOf().WithCountGreaterThanEqual(1)
        select Property.ForThese(() =>
        {
            var property = GalaxyCheck.Property.Nullary(func);
            var replay   = ReplayEncoding.Encode(CreateReplay(replaySeed, replaySize, replayPath));

            Action test = () => property.Check(replay: replay);

            test.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error replaying last example, given replay string was no longer valid.*");
        });
Beispiel #6
0
        public NebulaCheck.IGen <Test> ItErrorsWhenCharsIsEmpty() =>
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen
                      .String()
                      .FromCharacters(Enumerable.Empty <char>())
                      .WithLengthGreaterThanEqual(1);

            Action action = () => gen.SampleOne(seed: seed, size: size);

            action.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error while running generator StringGen: 'chars' must not be empty");
        });
        public NebulaCheck.IGen <Test> ItErrorsWhenCharTypesIsNone() =>
        from charType in Gen.Choose(
            Gen.Int32().LessThanEqual(0).Select(x => (GalaxyCheck.Gen.CharType)x),
            Gen.Int32().GreaterThan((int)GalaxyCheck.Gen.CharType.All).Select(x => (GalaxyCheck.Gen.CharType)x))
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen.Char(charType);

            Action action = () => gen.SampleOne(seed: seed, size: size);

            action.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error while running generator CharGen: 'charType' was not a valid flag value");
        });
        public NebulaCheck.IGen <Test> OtherwiseIfCharTypeHasExtended_ItShrinksToMajusculeCCedilla() =>
        from charType in TestGen.CharType(
            GalaxyCheck.Gen.CharType.Whitespace,
            GalaxyCheck.Gen.CharType.Alphabetical,
            GalaxyCheck.Gen.CharType.Numeric,
            GalaxyCheck.Gen.CharType.Symbol)
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen.Char(GalaxyCheck.Gen.CharType.Extended | charType);

            var minimum = gen.Minimum(seed: seed, size: size);

            minimum.Should().Be('\u0080');
        });
        public NebulaCheck.IGen <Test> WhenItIsEnumeratedOnce_AndTheElementGeneratorDoesNotShrink_ItWillShrinkOnce() =>
        from elementGen in DomainGen.Gen()
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = elementGen.NoShrink().InfiniteOf().Select(enumerable =>
            {
                enumerable.Take(1).ToList();
                return(enumerable);
            });

            var sample = gen.Advanced.SampleOneExampleSpace(seed: seed, size: size);

            sample.Traverse().Should().HaveCount(2);
        });
Beispiel #10
0
        public NebulaCheck.IGen <Test> IfTheReplayEncodesAGenError_ItThrows() =>
        from func in Gen.Function <object, bool>(Gen.Boolean())
        from replaySeed in Gen.Int32()
        from replaySize in Gen.Int32().Between(0, 100)
        from replayPath in Gen.Int32().ListOf()
        select Property.ForThese(() =>
        {
            var property = GalaxyCheck.Gen.Advanced.Error <object>("", "").ForAll(func);
            var replay   = ReplayEncoding.Encode(CreateReplay(replaySeed, replaySize, replayPath));

            Action test = () => property.Check(replay: replay);

            test.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error replaying last example, given replay string was no longer valid.*");
        });
        public NebulaCheck.IGen <Test> ItCanGenerateARecordWithTwoProperties() =>
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen
                      .Factory()
                      .RegisterType(GalaxyCheck.Gen.Int32().Where(x => x != 0))
                      .Create <RecordWithTwoProperties>();

            var instance = gen.SampleOne(seed: 0);

            instance.Should().NotBeNull();
            instance.Property1.Should().NotBe(0);
            instance.Property2.Should().NotBe(0);
        });
        public NebulaCheck.IGen <Test> ItShrinksTheCountToTheMinimumCountWhilstShrinkingTheElementsToTheirMinimums() =>
        from bias in DomainGen.Bias()
        from elementGen in DomainGen.Gen()
        from minCount in Gen.Int32().Between(0, 20)
        from seed in DomainGen.Seed()
        select Property.ForThese(() =>
        {
            var elementMinimum = elementGen.Minimum(seed: seed);
            var gen            = GalaxyCheck.Gen.List(elementGen).WithCountGreaterThanEqual(minCount);

            var minimum = gen.Minimum(seed: seed);

            minimum.Should()
            .HaveCount(minCount).And
            .AllBeEquivalentTo(elementMinimum);
        });
Beispiel #13
0
        public NebulaCheck.IGen <Test> IfTheImageContainsTheTargetReturnValue_ItShrinksToTheFunctionWhereTheImageIsTheTargetReturnValue() =>
        from returnValues in Gen.Int32().ListOf().WithCount(10)
        from targetReturnValue in Gen.Element(returnValues.AsEnumerable())
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var variables = Enumerable.Range(0, 10);
            var gen       = GalaxyCheck.Gen.Int32().Between(0, returnValues.Count - 1).Select(i => returnValues[i]).FunctionOf <int, int>();

            var func = gen.Minimum(
                seed: seed,
                size: 100,
                pred: (f) => variables.Any(variable => f(variable) == targetReturnValue));

            variables.Should().OnlyContain(variable => func(variable) == targetReturnValue);
        });
Beispiel #14
0
        public NebulaCheck.IGen <Test> IfThePropertyIsInfallible_ItCallsTheTestFunctionForEachIteration() =>
        from gen in DomainGen.Gen()
        from iterations in DomainGen.Iterations()
        from seed in DomainGen.Seed()
        select Property.ForThese(() =>
        {
            var numberOfCalls = 0;
            var property      = gen.ForAll((_) =>
            {
                numberOfCalls++;
                return(true);
            });

            property.Check(iterations: iterations, seed: seed);

            numberOfCalls.Should().Be(iterations);
        });
Beispiel #15
0
        public NebulaCheck.IGen <Test> LessThanErrorsAtMinValue() =>
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var mockGen = SetupMock();

            var gen = mockGen.Object.LessThan(byte.MinValue);

            mockGen.Verify(gen => gen.LessThanEqual(It.IsAny <byte>()), Times.Never);

            Action action = () => gen.SampleOne(seed: seed, size: size);

            action.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error while running generator Byte().LessThan(0): Arithmetic operation resulted in an overflow.");
        });
Beispiel #16
0
        public NebulaCheck.IGen <Test> ItProducesTheGivenValue() =>
        from value in DomainGen.Any()
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var gen = GalaxyCheck.Gen.Constant(value);

            var traversal = gen.Advanced
                            .SampleOneExampleSpace(seed: seed, size: size)
                            .TraverseExamples()
                            .Take(100)
                            .ToList();

            traversal
            .Should().ContainSingle()
            .Subject.Should().BeEquivalentTo(new Example <object>(ExampleId.Empty, value, 0));
        });
        public NebulaCheck.IGen <Test> WhenItIsEnumeratedOnce_ItWillShrinkToTheSmallestElementRepeated() =>
        from elementGen in DomainGen.Gen()
        from seed in DomainGen.Seed()
        from size in DomainGen.Size()
        select Property.ForThese(() =>
        {
            var elementMin = elementGen.Minimum(seed: SeedUtility.Fork(seed), size: size);

            var infiniteGen = elementGen.InfiniteOf().Select(enumerable =>
            {
                enumerable.Take(1).ToList();
                return(enumerable);
            });

            var minimum = infiniteGen.Minimum(seed: seed, size: size);

            minimum.Take(10).Should().BeEquivalentTo(Enumerable.Range(0, 10).Select(_ => elementMin));
        });
Beispiel #18
0
        public NebulaCheck.IGen <Test> IfTheReplayEncodesAPreconditionFailure_ItThrows() =>
        from value in DomainGen.Any()
        from replaySeed in Gen.Int32()
        from replaySize in Gen.Int32().Between(0, 100)
        from replayPath in Gen.Int32().ListOf()
        select Property.ForThese(() =>
        {
            var property = GalaxyCheck.Gen.Constant(value).ForAll((_) =>
            {
                GalaxyCheck.Property.Precondition(false);
            });
            var replay = ReplayEncoding.Encode(CreateReplay(replaySeed, replaySize, replayPath));

            Action test = () => property.Check(replay: replay);

            test.Should()
            .Throw <GalaxyCheck.Exceptions.GenErrorException>()
            .WithMessage("Error replaying last example, given replay string was no longer valid.*");
        });
            public NebulaCheck.IGen <Test> ItIsAffectedByItsArguments() =>
            from controls in Gen.Int32().Two()
            from variables in Gen.Int32().WithBias(Gen.Bias.None).Two().ListOf().WithCount(10)
            from seed in DomainGen.Seed()
            select Property.ForThese(() =>
            {
                var gen = GalaxyCheck.Gen.Int32().FunctionOf <object, object, object, int>();

                var func = gen.SampleOne(seed: seed, size: 100);

                variables.Should().Contain(variable =>
                                           func(variable.Item1, controls.Item1, controls.Item2) !=
                                           func(variable.Item2, controls.Item1, controls.Item2));
                variables.Should().Contain(variable =>
                                           func(controls.Item1, variable.Item1, controls.Item2) !=
                                           func(controls.Item1, variable.Item2, controls.Item2));
                variables.Should().Contain(variable =>
                                           func(controls.Item1, controls.Item2, variable.Item1) !=
                                           func(controls.Item1, controls.Item2, variable.Item2));
            });
        public NebulaCheck.IGen <Test> WithCountBetweenDefersToUnderlyingMethods() =>
        from minCount in Gen.Int32().LessThanEqual(20)
        from maxCount in Gen.Int32().GreaterThanEqual(minCount)
        select Property.ForThese(() =>
        {
            {
                var mockGen = SetupMock();

                mockGen.Object.WithCountBetween(minCount, maxCount);

                mockGen.Verify(gen => gen.WithCountGreaterThanEqual(minCount), Times.Once);
                mockGen.Verify(gen => gen.WithCountLessThanEqual(maxCount), Times.Once);
            }

            {
                var mockGen = SetupMock();

                mockGen.Object.WithCountBetween(maxCount, minCount);

                mockGen.Verify(gen => gen.WithCountGreaterThanEqual(minCount), Times.Once);
                mockGen.Verify(gen => gen.WithCountLessThanEqual(maxCount), Times.Once);
            }
        });
Beispiel #21
0
        public NebulaCheck.IGen <Test> BetweenDefersToUnderlyingMethods() =>
        from min in Gen.Byte()
        from max in Gen.Byte().GreaterThanEqual(min)
        select Property.ForThese(() =>
        {
            {
                var mockGen = SetupMock();

                mockGen.Object.Between(min, max);

                mockGen.Verify(gen => gen.GreaterThanEqual(min), Times.Once);
                mockGen.Verify(gen => gen.LessThanEqual(max), Times.Once);
            }

            {
                var mockGen = SetupMock();

                mockGen.Object.Between(max, min);

                mockGen.Verify(gen => gen.GreaterThanEqual(min), Times.Once);
                mockGen.Verify(gen => gen.LessThanEqual(max), Times.Once);
            }
        });
Beispiel #22
0
        public NebulaCheck.IGen <Test> BetweenDefersToUnderlyingMethods() =>
        from fromDate in Gen.DateTime()
        from untilDate in Gen.DateTime().From(fromDate)
        select Property.ForThese(() =>
        {
            {
                var mockGen = SetupMock();

                mockGen.Object.Within(fromDate, untilDate);

                mockGen.Verify(gen => gen.From(fromDate), Times.Once);
                mockGen.Verify(gen => gen.Until(untilDate), Times.Once);
            }

            {
                var mockGen = SetupMock();

                mockGen.Object.Within(untilDate, fromDate);

                mockGen.Verify(gen => gen.From(fromDate), Times.Once);
                mockGen.Verify(gen => gen.Until(untilDate), Times.Once);
            }
        });