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); });
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"); });
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.*"); });
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); });
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); });
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); });
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); });
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."); });
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)); });
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); } });
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); } });
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); } });