[DataRow(100)]   //more children were generated than required
        public void GetParentIndexAndGetParentCount_ReturnConsistentResults(
            long childCurrentCount)
        {
            //Prepare
            var           target         = new EvenSpreadStrategy();
            EntityContext parentProgress = ToEntityContext(new EntityProgress
            {
                TargetCount = 10
            });
            EntityContext childProgress = ToEntityContext(new EntityProgress
            {
                TargetCount        = 3,
                CurrentCount       = childCurrentCount,
                NextIterationCount = childCurrentCount + 1
            });

            //Invoke
            long actualParentIndex = target.GetParentIndex(
                parentProgress, childProgress);
            long actualParentsCount = target.GetNextIterationParentCount(
                parentProgress, childProgress);

            //Assert
            actualParentsCount.Should().Be(actualParentIndex + 1);
        }
Ejemplo n.º 2
0
        //init
        public GeneratorSetup()
        {
            _reflectionInvoker = new ReflectionInvoker();
            EntityDescriptions = new Dictionary <Type, IEntityDescription>();
            TemporaryStorage   = new TemporaryStorage();

            DefaultSpreadStrategy     = new EvenSpreadStrategy();
            DefaultFlushStrategy      = new LimitedCapacityFlushStrategy(100);
            DefaultPersistentStorages = new List <IPersistentStorage>();
            Supervisor = new CompleteSupervisor();
        }
        public void GetParentCountAndCanGenerate_WhenAllRangeIterated_ReturnConsistentResults()
        {
            long targetChildCount       = 90;
            long parentNextReleaseCount = 0;

            for (int childCurrentCount = 0; childCurrentCount < targetChildCount; childCurrentCount++)
            {
                if (childCurrentCount % 30 == 0)
                {
                    parentNextReleaseCount += 10;
                }

                //Prepare
                var           target         = new EvenSpreadStrategy();
                EntityContext parentProgress = ToEntityContext(new EntityProgress
                {
                    TargetCount      = 30,
                    NextReleaseCount = parentNextReleaseCount
                });
                EntityContext childProgress = ToEntityContext(new EntityProgress
                {
                    TargetCount        = 90,
                    CurrentCount       = childCurrentCount,
                    NextIterationCount = childCurrentCount + 1
                });

                //Invoke
                long actualParentIndex = target.GetParentIndex(
                    parentProgress, childProgress);
                long actualParentCount = target.GetNextIterationParentCount(
                    parentProgress, childProgress);
                bool actualCanGenerate = target.CanGenerateFromParentNextReleaseCount(
                    parentProgress, childProgress);

                //Assert
                bool expectedCanGenerate = actualParentCount <= parentNextReleaseCount;
                actualParentIndex.Should().Be(actualParentCount - 1);
                actualCanGenerate.Should().Be(expectedCanGenerate);

                Debug.WriteLine($"Child: {childCurrentCount} Parent {actualParentCount} NextRelease {parentNextReleaseCount} CanGenerate {actualCanGenerate}");
            }
        }
        [DataRow(100, 3)]   //child count beyond child's TargetCount
        public void GetNextIterationParentCount_WhenParentCountLower_ReturnsExpected(
            long nextIterationChildCount, long expectedParentCount)
        {
            //Prepare
            var           target         = new EvenSpreadStrategy();
            EntityContext parentProgress = ToEntityContext(new EntityProgress
            {
                TargetCount = 3
            });
            EntityContext childProgress = ToEntityContext(new EntityProgress
            {
                TargetCount        = 8,
                NextIterationCount = nextIterationChildCount
            });

            //Invoke
            long actualParentCount = target.GetNextIterationParentCount(parentProgress, childProgress);

            //Assert
            Assert.AreEqual(expectedParentCount, actualParentCount);
        }
        [DataRow(100, 8)]     //child count beyond child's TargetCount
        public void GetParentIndex_WhenParentCountHigher_ReturnsExpected(
            long currentChildCount, long expectedParentIndex)
        {
            //Prepare
            var           target         = new EvenSpreadStrategy();
            EntityContext parentProgress = ToEntityContext(new EntityProgress
            {
                TargetCount = 9
            });
            EntityContext childProgress = ToEntityContext(new EntityProgress
            {
                CurrentCount = currentChildCount,
                TargetCount  = 3
            });

            //Invoke
            long actualParentIndex = target.GetParentIndex(parentProgress, childProgress);

            //Assert
            actualParentIndex.Should().Be(expectedParentIndex);
        }
        public void GetParentCountAndCanGenerate_ReturnConsistentResults(
            long parentNextReleaseCount, long childCurrentCount,
            bool expectedCanGenerate, int expectedParentIndex)
        {
            //Prepare
            var           target         = new EvenSpreadStrategy();
            EntityContext parentProgress = ToEntityContext(new EntityProgress
            {
                TargetCount      = 30,
                NextReleaseCount = parentNextReleaseCount
            });
            EntityContext childProgress = ToEntityContext(new EntityProgress
            {
                TargetCount        = 90,
                CurrentCount       = childCurrentCount,
                NextIterationCount = childCurrentCount + 1
            });

            //Invoke
            long actualParentIndex = target.GetParentIndex(
                parentProgress, childProgress);
            long actualParentCount = target.GetNextIterationParentCount(
                parentProgress, childProgress);
            bool actualCanGenerate = target.CanGenerateFromParentNextReleaseCount(
                parentProgress, childProgress);

            //Assert
            actualParentIndex.Should().Be(expectedParentIndex);
            actualParentIndex.Should().Be(actualParentCount - 1);
            actualCanGenerate.Should().Be(expectedCanGenerate);

            if (actualCanGenerate)
            {
                actualParentCount.Should().BeLessOrEqualTo(parentNextReleaseCount);
            }
            else
            {
                actualParentCount.Should().BeGreaterThan(parentNextReleaseCount);
            }
        }
        [DataRow(100, 3, false)]    //more parents were generated than required and child already has TargetCount
        public void CanGenerateMoreFromParentsNextFlushCount_WhenParentCountLarger_ReturnsExpected(
            long parentNextReleaseCount, long childCurrentCount, bool expectedCanGenegate)
        {
            //Prepare
            var           target         = new EvenSpreadStrategy();
            EntityContext parentProgress = ToEntityContext(new EntityProgress
            {
                TargetCount      = 10,
                NextReleaseCount = parentNextReleaseCount
            });
            EntityContext childProgress = ToEntityContext(new EntityProgress
            {
                TargetCount  = 3,
                CurrentCount = childCurrentCount
            });

            //Invoke
            bool actualCanBeGenerated = target.CanGenerateFromParentNextReleaseCount(
                parentProgress, childProgress);

            //Assert
            Assert.AreEqual(expectedCanGenegate, actualCanBeGenerated);
        }