Beispiel #1
0
        /// <summary>
        ///     Determines whether this parameter can consume the specified instance.
        /// </summary>
        /// <param name="instance">The instance.</param>
        /// <param name="info">The information.</param>
        /// <returns>The result of the consumption</returns>
        public override ConsumptionResult CanConsume(object instance, IterationInfo info)
        {
            if (HasBeenConsumed)
            {
                return(new ConsumptionResult(info, 0, null));
            }
            var values = info.FromNowOn().Take(MaxAllowed).ToArray();

            return(new ConsumptionResult(info, values.Length, this));
        }
        public void Throw_If_Given_An_Incompatible_Instance()
        {
            // arrange
            var    positional = new Positional <string>(new Parser("a"), (o, strings) => { });
            var    info       = new IterationInfo("a b c".Split(' '));
            Action mightThrow = () => positional.Consume(new object(), new ConsumptionRequest(info));

            // act
            // assert
            mightThrow.Should().Throw <ArgumentException>();
        }
Beispiel #3
0
        public void Not_Throw_If_Bad_Object_Given_To_Generic_Type()
        {
            // arrange
            var    values     = new List <string>();
            var    sw         = new SingleValueSwitch <StringBuilder>(new Parser("a"), 'l', "log", (o, s) => values.Add(s));
            var    info       = new IterationInfo("-l log.txt -o other".Split(' '), 0);
            Action mightThrow = () => sw.Consume(new object(), new ConsumptionRequest(info, 2));

            // act
            // assert
            mightThrow.Should().NotThrow();
        }
        public void Provide_A_Generic_Version()
        {
            // arrange
            var positional = new Positional <string>(new Parser("a"), (o, strings) => { });
            var info       = new IterationInfo("a b c".Split(' '));

            // act
            var res = positional.CanConsume("", info);

            // assert
            res.NumConsumed.Should().Be(3);
        }
Beispiel #5
0
        public void Return_No_Consumption_If_Switch_Does_Not_Match()
        {
            // arrange
            var switch0 = new TestSwitch(new Parser("a"), 't', "test", (o, strings) => { });
            var info    = new IterationInfo("-x a b c d e d f g".Split(' '));

            // act
            var result = switch0.CanConsume("", info);

            // assert
            result.NumConsumed.Should().Be(0);
        }
Beispiel #6
0
 /// <summary>
 ///     Determines whether this parameter can consume the specified instance.
 /// </summary>
 /// <param name="instance">The instance.</param>
 /// <param name="info">The information.</param>
 /// <returns>The result of the consumption</returns>
 public override ConsumptionResult CanConsume(object instance, IterationInfo info)
 {
     if (Letter.HasValue && info.Current.StartsWith($"{LetterToken}{Letter}{Separator}"))
     {
         return(new ConsumptionResult(info, 1, this));
     }
     if (Word.IsNotNullOrWhiteSpace() && info.Current.StartsWith($"{WordToken}{Word}{Separator}"))
     {
         return(new ConsumptionResult(info, 1, this));
     }
     return(new ConsumptionResult(info, 0, this));
 }
Beispiel #7
0
        public void Identify_When_There_Is_A_Next_Arg()
        {
            // arrange
            var info0 = new IterationInfo("".Split(' '), 0);
            var info1 = new IterationInfo("-h".Split(' '), 0);
            var info2 = new IterationInfo("-v something".Split(' '), 0);

            // act
            // assert
            info0.HasNext().Should().BeFalse();
            info1.HasNext().Should().BeFalse();
            info2.HasNext().Should().BeTrue();
        }
Beispiel #8
0
 public IterationsViewModel(IterationInfo iteration)
 {
     _iteration = iteration;
     Path       = iteration.Path;
     if (DateTime.TryParse(iteration.StartDate, out DateTime startDate))
     {
         StartDate = startDate;
     }
     if (DateTime.TryParse(iteration.EndDate, out DateTime endDate))
     {
         EndDate = endDate;
     }
 }
Beispiel #9
0
        public void Only_Consume_Two_Strings()
        {
            // arrange
            var values = new List <string>();
            var sw     = new SingleValueSwitch(new Parser("a"), 'l', "log", (o, s) => values.Add(s));
            var info   = new IterationInfo("-l log.txt -o other".Split(' '), 0);

            // act
            var result = sw.Consume(new object(), new ConsumptionRequest(info, 2));

            // assert
            values.Should().BeEquivalentTo("log.txt".Split(' '));
            result.NumConsumed.Should().Be(2);
        }
        public void Only_Consume_One_String()
        {
            // arrange
            var parseCount = 0;
            var sw         = new BooleanSwitch(new Parser("a"), 'h', "help", o => { parseCount++; });
            var info       = new IterationInfo("-h -o other stuff".Split(' '), 0);

            // act
            var result = sw.Consume(new object(), new ConsumptionRequest(info));

            // assert
            parseCount.Should().Be(1);
            result.NumConsumed.Should().Be(1);
        }
Beispiel #11
0
        public void Provide_A_Generic_Version()
        {
            // arrange
            var values = new List <string>();
            var sw     = new SingleValueSwitch <StringBuilder>(new Parser("a"), 'l', "log", (o, s) => values.Add(s));
            var info   = new IterationInfo("-l log.txt -o other".Split(' '), 0);

            // act
            var result = sw.Consume(new StringBuilder(), new ConsumptionRequest(info, 2));

            // assert
            values.Should().BeEquivalentTo("log.txt".Split(' '));
            result.NumConsumed.Should().Be(2);
        }
Beispiel #12
0
        public void Return_The_SubSequent_Items()
        {
            // arrange
            var info0 = new IterationInfo(new string[0], 0);
            var info1 = new IterationInfo("-h".Split(' '), 0);
            var info2 = new IterationInfo("-v something".Split(' '), 0);
            var info3 = new IterationInfo("a b c d e".Split(' '), 1);

            // act
            // assert
            info0.Rest().Should().BeEmpty();
            info1.Rest().Should().BeEmpty();
            info2.Rest().Should().BeEquivalentTo("something".Split(' '));
            info3.Rest().Should().BeEquivalentTo("c d e".Split(' '));
        }
        public void Indicate_It_Cannot_Consume_If_It_Has_Already_Consumed()
        {
            // arrange
            var positional = new Positional(new Parser("a"), (o, strings) => { })
            {
                HasBeenConsumed = true
            };
            var info = new IterationInfo("a b c".Split(' '));

            // act
            var res = positional.CanConsume("", info);

            // assert
            res.NumConsumed.Should().Be(0);
        }
Beispiel #14
0
        public void Indicate_It_Can_Consume_When_One_Of_Its_Parameters_Can_Consume()
        {
            // arrange
            var parser = new Parser("base");
            var info   = new IterationInfo("a b c".Split(' '));
            var mock   = new Mock <Parameter>();

            mock.Setup(p => p.CanConsume(It.IsAny <object>(), info))
            .Returns(new ConsumptionResult(info.Consume(1), 1, mock.Object));
            parser.AddParameter(mock.Object);

            // act
            // assert
            parser.CanConsume(new object(), info).NumConsumed.Should().Be(1);
        }
Beispiel #15
0
        public void Return_No_Consumption_If_Minimum_Number_Of_Values_Are_Not_Met()
        {
            // arrange
            var switch0 = new TestSwitch(new Parser("a"), 't', "test", (o, strings) => { })
            {
                MinRequired = 50
            };
            var info = new IterationInfo("-t a b c d e d f g".Split(' '));

            // act
            var result = switch0.CanConsume("", info);

            // assert
            result.NumConsumed.Should().Be(0);
        }
        public void Consume_Only_The_Maximum_Allowed_From_The_Request()
        {
            // arrange
            var list    = new List <string[]>();
            var sw      = new ValuesSwitch(new Parser("a"), 'v', "values", (o, strings) => list.Add(strings));
            var info    = new IterationInfo("-v v0 v1 v2 v3 -s".Split(' '), 0);
            var request = new ConsumptionRequest(info, 3);

            // act
            var result = sw.Consume(new object(), request);

            // assert
            list.Should().HaveCount(1);
            list[0].Should().BeEquivalentTo("v0 v1".Split(' '));
            result.NumConsumed.Should().Be(3);
        }
Beispiel #17
0
        public void Consume_Everything_After_The_Separator_As_A_Single_Value0()
        {
            // arrange
            var    builder = DefaultBuilder.CreateDefaultBuilder();
            var    root    = builder.Context.ParserRepository.Get("util");
            string value   = null;
            var    sut     = new SeparatedSwitch(root, 'v', "value", (o, s) => { value = s; });

            // act
            var info = new IterationInfo("-v=a".Split(' '));
            var res  = sut.Consume("", new ConsumptionRequest(info));

            // assert
            res.ConsumingParameter.Should().BeSameAs(sut);
            value.Should().Be("a");
        }
Beispiel #18
0
        /// <summary>
        ///     Determines whether this parameter can consume the specified instance.
        /// </summary>
        /// <param name="instance">The instance.</param>
        /// <param name="info">The information.</param>
        /// <returns>The result of the consumption</returns>
        public override ConsumptionResult CanConsume(object instance, IterationInfo info)
        {
            if (!IsLetterMatch(info) && !IsWordMatch(info))
            {
                return(new ConsumptionResult(info, 0, null));
            }
            var canBeTaken = info.FromNowOn().ToList();

            if (canBeTaken.Count < MinRequired)
            {
                return(new ConsumptionResult(info, 0, null));
            }
            var actuallyTaken = canBeTaken.Take(MaxAllowed).ToList();

            return(new ConsumptionResult(info, actuallyTaken.Count, this));
        }
Beispiel #19
0
        public void Indicate_It_Can_Consume_The_Max_Allowed_When_Current_Arg_Is_A_Match()
        {
            // arrange
            var switch0 = new TestSwitch(new Parser("a"), 't', "test", (o, strings) => { })
            {
                MaxAllowed = 3
            };
            var info = new IterationInfo("-t a b c d e d f g".Split(' '));

            // act
            // assert
            var result = switch0.CanConsume("", info);

            result.NumConsumed.Should().Be(3);
            result.Info.Current.Should().Be("c");
        }
Beispiel #20
0
        public void Return_The_Last_Item()
        {
            // arrange
            var    info0      = new IterationInfo(new string[0], 0);
            var    info1      = new IterationInfo("-h".Split(' '), 0);
            var    info2      = new IterationInfo("-v something".Split(' '), 0);
            var    info3      = new IterationInfo("a b c d e".Split(' '), 1);
            Action mightThrow = () => info0.Last();

            // act
            // assert
            mightThrow.Should().Throw <ArgumentOutOfRangeException>();
            info1.Last().Should().Be("-h");
            info2.Last().Should().Be("something");
            info3.Last().Should().Be("e");
        }
        public void Consume_The_Min_Of_The_Number_It_Wants_Vs_The_Number_It_Can_Have()
        {
            // arrange
            var positional = new Positional <string>(new Parser("a"), (o, strings) => { })
            {
                MaxAllowed = 3
            };
            var info = new IterationInfo("a b c d e f".Split(' '));

            // act
            var res0 = positional.Consume("", new ConsumptionRequest(info, int.MaxValue));
            var res1 = positional.Consume("", new ConsumptionRequest(info, 2));

            // assert
            res0.NumConsumed.Should().Be(3);
            res1.NumConsumed.Should().Be(2);
        }
Beispiel #22
0
        public void Return_The_Next_Item()
        {
            // arrange
            var    info0       = new IterationInfo(new string[0], 0);
            var    info1       = new IterationInfo("-h".Split(' '), 0);
            var    info2       = new IterationInfo("-v something".Split(' '), 0);
            var    info3       = new IterationInfo("a b c d e".Split(' '), 1);
            Action mightThrow0 = () => info0.Next();
            Action mightThrow1 = () => info1.Next();

            // act
            // assert
            mightThrow0.Should().Throw <IndexOutOfRangeException>();
            mightThrow1.Should().Throw <IndexOutOfRangeException>();
            info2.Next().Should().Be("something");
            info3.Next().Should().Be("c");
        }
        public void Throw_If_Cannot_Find_Parser()
        {
            // arrange
            var builder   = DefaultBuilder.CreateDefaultBuilder();
            var strat     = new ConsumerSelectionStrategy(builder.Context);
            var info      = new IterationInfo("firewall -h".Split(' '));
            var parameter = new BooleanSwitch(new Parser("fake"), 'h', "help", o => { });
            var result    = new PotentialConsumerResult(builder.Context.PathToRoot("firewall").Reverse().ToList(),
                                                        new[]
            {
                new ConsumptionResult(info, 0, parameter)
            }, info);
            Action mightThrow = () => strat.Select(result);

            // act
            // assert
            mightThrow.Should().Throw <ForwardProgressException>();
        }
        public void Not_Throw_If_Not_Given_Enough_Args_But_Return_Them_In_The_Result()
        {
            // arrange
            var list = new List <string[]>();
            var sw   = new ValuesSwitch(new Parser("a"), 'v', "values", (o, strings) => list.Add(strings))
            {
                MinRequired = 5
            };
            var info                     = new IterationInfo("-v v0 v1 v2 v3 -s".Split(' '), 0);
            var request                  = new ConsumptionRequest(info, 3);
            ConsumptionResult res        = null;
            Action            mightThrow = () => res = sw.Consume(new object(), request);

            // act
            // assert
            mightThrow.Should().NotThrow();
            res.ParseExceptions.Should().HaveCount(1).And.Subject.Single().Should().BeOfType <MissingValueException>();
        }
        public void Identify_When_There_Is_A_Next_Arg()
        {
            // arrange
            var info0 = new IterationInfo("".Split(' '), 0);
            var info1 = new IterationInfo("-h".Split(' '), 0);
            var info2 = new IterationInfo("-v something".Split(' '), 0);
            var req0  = new ConsumptionRequest(info0, 1);
            var req1  = new ConsumptionRequest(info1, 1);
            var req2  = new ConsumptionRequest(info2, 1);
            var req3  = new ConsumptionRequest(info2, 2);

            // act
            // assert
            req0.HasNext().Should().BeFalse();
            req1.HasNext().Should().BeFalse();
            req2.HasNext().Should().BeFalse();
            req3.HasNext().Should().BeTrue();
        }
Beispiel #26
0
        public void Return_No_Consumption_Result_If_Doesnt_Match()
        {
            // arrange
            var    builder = DefaultBuilder.CreateDefaultBuilder();
            var    root    = builder.Context.ParserRepository.Get("util");
            string value   = null;
            var    sut     = new SeparatedSwitch(root, 'v', "value", (o, s) => { value = s; })
            {
                Separator = ":"
            };
            var info = new IterationInfo("-x:a".Split(' '));

            // act
            // assert
            var res = sut.CanConsume("", info);

            res.ConsumingParameter.Should().Be(sut);
            res.NumConsumed.Should().Be(0);
            res.ParseExceptions.Should().BeEmpty();
        }
        public void IterationInfo_should_be_comparable(double score1, double score2, bool isMaximizing, bool smaller, bool equal, bool bigger)
        {
            var info1 = new IterationInfo(null, null, 0, score1, isMaximizing);
            var info2 = new IterationInfo(null, null, 0, score2, isMaximizing);

            if (smaller)
            {
                Assert.True(info1 < info2);
            }

            if (equal)
            {
                Assert.True(info1 <= info2 && info1 >= info2);
            }

            if (bigger)
            {
                Assert.True(info1 > info2);
            }
        }
        public void Return_The_Current_Item_And_All_SubSequent_Items()
        {
            // arrange
            var info0 = new IterationInfo("".Split(' '), 0);
            var info1 = new IterationInfo("-h".Split(' '), 0);
            var info2 = new IterationInfo("-v something".Split(' '), 0);
            var info3 = new IterationInfo("a b c d e".Split(' '), 0);
            var req0  = new ConsumptionRequest(info0, 1);
            var req1  = new ConsumptionRequest(info1, 1);
            var req2  = new ConsumptionRequest(info2, 1);
            var req3  = new ConsumptionRequest(info2, 2);
            var req4  = new ConsumptionRequest(info3, 3);

            // act
            // assert
            req0.AllToBeConsumed().Should().BeEquivalentTo("".Split(' '));
            req1.AllToBeConsumed().Should().BeEquivalentTo("-h".Split(' '));
            req2.AllToBeConsumed().Should().BeEquivalentTo("-v".Split(' '));
            req3.AllToBeConsumed().Should().BeEquivalentTo("-v something".Split(' '));
            req4.AllToBeConsumed().Should().BeEquivalentTo("a b c".Split(' '));
        }
Beispiel #29
0
            public DataItem(List <int> rgInput, int nIxInput, int nIxTarget, int nDecClip, bool bNewEpoch, bool bNewSequence, int nOutputCount)
            {
                m_rgInput        = rgInput;
                m_nIxInput       = nIxInput;
                m_nIxTarget      = nIxTarget;
                m_nDecClip       = nDecClip;
                m_iter           = new IterationInfo(bNewEpoch, bNewSequence, nOutputCount);
                m_rgInputReverse = new List <int>();

                if (rgInput != null)
                {
                    for (int i = rgInput.Count - 1; i >= 0; i--)
                    {
                        m_rgInputReverse.Add(rgInput[i]);
                    }
                }
                else
                {
                    m_rgInputReverse = null;
                }
            }
        public void Return_The_Last_Item()
        {
            // arrange
            var    info0      = new IterationInfo(new string[0], 0);
            var    info1      = new IterationInfo("-h".Split(' '), 0);
            var    info2      = new IterationInfo("-v something".Split(' '), 0);
            var    info3      = new IterationInfo("a b c d e".Split(' '), 0);
            var    req0       = new ConsumptionRequest(info0, 1);
            var    req1       = new ConsumptionRequest(info1, 1);
            var    req2       = new ConsumptionRequest(info2, 1);
            var    req3       = new ConsumptionRequest(info2, 2);
            var    req4       = new ConsumptionRequest(info3, 3);
            Action mightThrow = () => req0.Last();

            // act
            // assert
            mightThrow.Should().Throw <ArgumentOutOfRangeException>();
            req1.Last().Should().Be("-h");
            req2.Last().Should().Be("-v");
            req3.Last().Should().Be("something");
            req4.Last().Should().Be("c");
        }
Beispiel #31
0
        ///// <summary>
        ///// Event handler that observes changes in state of callee
        ///// </summary>
        ///// <param name="sender"></param>
        ///// <param name="state"></param>
        //void callee_OnStateChanged(object sender, CurrentState state)
        //{
        //    Console.WriteLine("State = " + state.ToString());
        //    if (state == CurrentState.EXECUTION_COMPLETED)
        //    {
        //        Console.WriteLine("Execution completed.. Exiting");
        //        Environment.Exit(0);
        //    }
        //}
        /// <summary>
        /// Event handler that logs the iteration result to the file
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="iInfo"></param>
        void callee_OnIterationCompleted(object sender, IterationInfo iInfo)
        {
            Console.WriteLine("Logging result for iteration " + ++iteration);

            resultLogger.writeLog(iInfo.ToString());
        }
Beispiel #32
0
        /// <summary>
        /// Event handler invoked when one call iteration is completed. 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="iInfo"></param>
        void caller_OnIterationCompleted(object sender, IterationInfo iInfo)
        {
            currIter++;

            resultLogger.writeLog(iInfo.ToString());
            Console.WriteLine("Logging result for iteration " + currIter);
        }