public void TrackPolymerCorrectly_WhenUsingRealInput(int steps, string expectedTemplate)
        {
            var sut = PolymerizationEquipment.CreateEquipmentTrackingPolymers(REAL_INPUT);

            sut.RunFor(steps);
            Assert.Equal(expectedTemplate, sut.PolymerTemplate);
        }
        public void ReturnCorrectPolymerTemplate(int steps, string expectedTemplate)
        {
            var sut = PolymerizationEquipment.CreateEquipmentTrackingPolymers(SAMPLE_INPUT);

            sut.RunFor(steps);
            Assert.Equal(expectedTemplate, sut.PolymerTemplate);
        }
        public void GetCorretSubtractionOnSampleData_WhenCountingPolymers()
        {
            var sut = PolymerizationEquipment.CreateEquipmentCountingPolymers(SAMPLE_INPUT);

            sut.RunFor(10);
            Assert.Equal(1588, sut.GetSubtraction());
        }
        public void ReturnCorrectPolymerTemplateLength_AfterSteps(int steps, int expectedLength)
        {
            var sut = PolymerizationEquipment.CreateEquipmentTrackingPolymers(SAMPLE_INPUT);

            sut.RunFor(steps);
            Assert.Equal(expectedLength, sut.PolymerTemplate.Length);
        }
        public void BeInitializedCorrectly_WhenCorrectInputIsSupplied(string input, string expectedTemplate, int expectedRulesCount)
        {
            var sut = PolymerizationEquipment.CreateEquipmentTrackingPolymers(input);

            Assert.Equal(expectedTemplate, sut.PolymerTemplate);
            Assert.Equal(expectedRulesCount, sut.GetPairInsertionRulesCount());
        }
        public void SolveSecondPuzzle()
        {
            var sut = PolymerizationEquipment.CreateEquipmentCountingPolymers(REAL_INPUT);

            sut.RunFor(40);
            Assert.Equal(2884513602164, sut.GetSubtraction());
        }
        public void CalculateTemplatePolymerCorrectly_WhenApplyingFortySteps()
        {
            var sut = PolymerizationEquipment.CreateEquipmentCountingPolymers(SAMPLE_INPUT);

            sut.RunFor(40);
            Assert.Equal(2188189693529, sut.GetSubtraction());
        }
        public void SolveFirstPuzzle_WhenCountingPolymers()
        {
            var sut = PolymerizationEquipment.CreateEquipmentCountingPolymers(REAL_INPUT);

            sut.RunFor(10);
            Assert.Equal(2233, sut.GetSubtraction());
        }
        public void CreatePolymerChainWithCorrectNumberOfPolymers()
        {
            var sut = PolymerizationEquipment.CreateEquipmentTrackingPolymers(SAMPLE_INPUT);

            sut.RunFor(10);
            Assert.Equal(1749, sut.CountElementInTemplate("B"));
            Assert.Equal(298, sut.CountElementInTemplate("C"));
            Assert.Equal(161, sut.CountElementInTemplate("H"));
            Assert.Equal(865, sut.CountElementInTemplate("N"));
        }
        public void ThrowException_WhenInitializedWithInvalidTemplate(string invalidInput)
        {
            var exception = Assert.Throws <ArgumentException>(() => PolymerizationEquipment.CreateEquipmentTrackingPolymers(invalidInput));

            Assert.Equal("Invalid input", exception.Message);
        }