public void When_BuildRandomNumberWithReplaceAndShuffle_Then_Success()
        {
            var mainNumber = new Number(5, 4, 1, 8);
            var numberBuilder = new NumberBuilder(4);
            var newNumber = numberBuilder.Build(mainNumber, unitsToReplace: 2, unitsToShuffle: 1);

            var replacedUnits = newNumber.Units.Where(u => !mainNumber.HasUnitValue(u.Value));
            var shuffledUnits = newNumber.Units.Where(u => mainNumber.Units.Any(x => x.Position != u.Position && x.Value == u.Value));

            Assert.AreEqual(2, replacedUnits.Count());
            Assert.IsTrue(shuffledUnits.Any());
            Assert.IsTrue(shuffledUnits.Count() <= 2);
        }
        public void When_BuildRandomNumberWithReplaceAndShuffleAndUnitsToAdd_Then_Success()
        {
            var mainNumber = new Number(1, 7, 5, 0);
            var numberBuilder = new NumberBuilder(4);
            var unitsToAdd = new List<INumberUnit>
            {
                new NumberUnit(2, 8)
            };
            var newNumber = numberBuilder.Build(mainNumber, unitsToReplace: 2, unitsToAdd: unitsToAdd);

            var addedUnits = newNumber.Units.Where(u => u.Equals(unitsToAdd.First()));
            var replacedUnits = newNumber.Units.Where(u => !mainNumber.HasUnitValue(u.Value));
            var shuffledUnits = newNumber.Units.Where(u => mainNumber.Units.Any(x => x.Position != u.Position && x.Value == u.Value));

            Assert.AreEqual(1, addedUnits.Count());
            Assert.AreEqual(3, replacedUnits.Count());
            Assert.AreEqual(1, shuffledUnits.Count());
        }
        public void When_BuildRandomNumberWithUnitsToReplaceAndUnitsToAdd_Then_Success()
        {
            var mainNumber = new Number(0, 4, 8, 2);
            var numberBuilder = new NumberBuilder(4);
            var valuesToReplace = new List<int> { 0, 2 };
            var unitsToAdd = new List<INumberUnit>
            {
                new NumberUnit(1, 3)
            };
            var newNumber = numberBuilder.Build(mainNumber, valuesToReplace, unitsToAdd);

            var addedUnits = newNumber.Units.Where(u => u.Equals(unitsToAdd.First()));
            var replacedUnits = newNumber.Units.Where(u => !mainNumber.HasUnitValue(u.Value));
            var shuffledUnits = newNumber.Units.Where(u => mainNumber.Units.Any(x => x.Position != u.Position && x.Value == u.Value));

            Assert.AreEqual(1, addedUnits.Count());
            Assert.AreEqual(2, replacedUnits.Count());
            Assert.AreEqual(2, shuffledUnits.Count());
        }