/// <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>(); }
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); }
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); }
/// <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)); }
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(); }
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; } }
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); }
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); }
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); }
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); }
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); }
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"); }
/// <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)); }
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"); }
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); }
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(); }
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(' ')); }
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"); }
///// <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()); }
/// <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); }