public SurvivedTextLine GetTextLine(List<String> originalText, List<String> changedText) { if (originalText == null || changedText == null) throw new ArgumentNullException(); _textLineCoreResults = new Dictionary<Tuple<int, int>, SurvivedTextLine>(); _indexOfWithComparerResults = new Dictionary<Tuple<int, int>, int>(); _weightKeeper = new Dictionary<SurvivedTextLine, int>(); SurvivedTextLineComposite result = new SurvivedTextLineComposite("", 0, 0); for (int origLineIndex = 0; origLineIndex < originalText.Count; origLineIndex++) { var origStrLine = originalText[origLineIndex]; var changedLineIndex = GetIndexOfWithComparer(origLineIndex, changedText, origStrLine, 0, Comparer); if (changedLineIndex >= 0) { result.TextLines.Add(GetTextLineCore( originalText, changedText, origLineIndex, changedLineIndex, Comparer)); } } if (result.TextLines.Count <= 0) { return new SurvivedTextLineDummy(); } return result.GetThisAndNextValues().Skip(1).First(); }
public void GetMaxWeightLine() { // arraange SurvivedTextLineComposite tlc_a = new SurvivedTextLineComposite("a", 1, 0); SurvivedTextLineLeaf tll_b = new SurvivedTextLineLeaf("b", 2, 0); SurvivedTextLineLeaf tll_d = new SurvivedTextLineLeaf("d", 3, 0); SurvivedTextLineLeaf tll_e = new SurvivedTextLineLeaf("e", 4, 0); tlc_a.TextLines = new List<SurvivedTextLine> {tll_b, tll_d, tll_e}; // act var res = tlc_a.GetMaxWeightLine(); //assert Assert.AreEqual(tll_b, res); }
public void GetWeightTest1() { // arraange SurvivedTextLine tl = new SurvivedTextLineComposite("a",0,0) { TextLines = new List<SurvivedTextLine> { new SurvivedTextLineLeaf("b",1,0), new SurvivedTextLineLeaf("c",2,0), new SurvivedTextLineLeaf("d",3,0) } }; // act var res = tl.GetTotalWeight(); //assert Assert.AreEqual(4, res); }
private SurvivedTextLine GetTextLineCore( List<String> originalText, List<String> changedText, int origLineIndex, int changedLineIndex, IComparer<string> comparer) { var key = new Tuple<int, int>(origLineIndex, changedLineIndex); if (_textLineCoreResults.ContainsKey(key)) { return _textLineCoreResults[key]; } SurvivedTextLineComposite result = new SurvivedTextLineComposite(originalText[origLineIndex], origLineIndex, changedLineIndex) { WeightKeeper = _weightKeeper }; for (int origLineIndexTmp = origLineIndex + 1; origLineIndexTmp < originalText.Count; origLineIndexTmp++) { var origStrLine = originalText[origLineIndexTmp]; var changedLineIndexTmp = GetIndexOfWithComparer(origLineIndexTmp, changedText, origStrLine, changedLineIndex + 1, comparer); if (changedLineIndexTmp >= 0) { result.TextLines.Add(GetTextLineCore( originalText, changedText, origLineIndexTmp, changedLineIndexTmp, comparer)); } } _textLineCoreResults.Add(new Tuple<int, int>(origLineIndex, changedLineIndex), result); return result; }