public void TestStrCombine() { var r = StrCombine.FromFile(SourceFile("term_strz.bin")); Assert.AreEqual(r.StrTerm, "foo"); Assert.AreEqual(r.StrLimit, "bar|"); Assert.AreEqual(r.StrEos, "baz@"); Assert.AreEqual(r.StrCalc, "bar"); Assert.AreEqual(r.StrCalcBytes, "baz"); Assert.AreEqual(r.TermOrLimit, "foo"); Assert.AreEqual(r.TermOrEos, "baz@"); Assert.AreEqual(r.TermOrCalc, "foo"); Assert.AreEqual(r.TermOrCalcBytes, "baz"); Assert.AreEqual(r.LimitOrEos, "bar|"); Assert.AreEqual(r.LimitOrCalc, "bar"); Assert.AreEqual(r.LimitOrCalcBytes, "bar|"); Assert.AreEqual(r.EosOrCalc, "bar"); Assert.AreEqual(r.EosOrCalcBytes, "baz@"); Assert.AreEqual(r.CalcOrCalcBytes, "baz"); }
private static string CombineOutput(string outputX, string outputY, StrCombine combine) { switch (combine) { case StrCombine.Ignore: return(String.Empty); case StrCombine.Append: return(String.Concat(outputX, Environment.NewLine, outputY)); case StrCombine.Prepend: return(String.Concat(outputY, Environment.NewLine, outputX)); case StrCombine.LeftOnly: return(outputX); case StrCombine.RightOnly: return(outputY); default: throw new ArgumentException($"No combine logic defined for combine type: {Enum.GetName(typeof(StrCombine), combine)}"); } }
public static GrammarParseResult Combine(string rawText, GrammarParseResult x, GrammarParseResult y, BoolCombine isSuccessfulCombine = BoolCombine.Or, ArithCombine valueCombine = ArithCombine.Add, StrCombine outputCombine = StrCombine.Ignore) { GrammarParseResult combined = new GrammarParseResult(rawText); combined.IsSuccessful = CombineSuccessful(x.IsSuccessful, y.IsSuccessful, isSuccessfulCombine); combined.Value = CombineValue(x.Value, y.Value, valueCombine); combined.Output = CombineOutput(x.Output, y.Output, outputCombine); combined.Children.Add(x); combined.Children.Add(y); return(combined); }