public void TestNextLowerItem() { var alist = new SparseAList <int>(_maxLeafSize, _maxInnerSize); int?i; for (i = 0; i < 100; i++) { alist.Add(i.Value); alist.InsertSpace(alist.Count, 1000); } i = int.MaxValue; Assert.AreEqual(alist.NextLowerItem(ref i), 99); Assert.AreEqual(i.Value, 99099); i = 99100; Assert.AreEqual(alist.NextLowerItem(ref i), 99); Assert.AreEqual(i.Value, 99099); Assert.AreEqual(alist.NextLowerItem(ref i), 98); Assert.AreEqual(i.Value, 98098); i = 55555; Assert.AreEqual(alist.NextLowerItem(ref i), 55); Assert.AreEqual(i.Value, 55055); i = 1002; Assert.AreEqual(alist.NextLowerItem(ref i), 1); Assert.AreEqual(i.Value, 1001); Assert.AreEqual(alist.NextLowerItem(ref i), 0); Assert.AreEqual(i.Value, 0); i = 1; Assert.AreEqual(alist.NextLowerItem(ref i), 0); Assert.AreEqual(i.Value, 0); Assert.AreEqual(alist.NextLowerItem(ref i), default(int)); Assert.AreEqual(i.HasValue, false); i = int.MinValue; Assert.AreEqual(alist.NextLowerItem(ref i), default(int)); Assert.AreEqual(i.HasValue, false); // Place a value at the edge of integer space alist.Clear(); alist.InsertSpace(0, int.MaxValue - 1); alist.Add(777); i = int.MinValue; Assert.AreEqual(alist.NextLowerItem(ref i), default(int)); Assert.AreEqual(i.HasValue, false); i = int.MaxValue; Assert.AreEqual(alist.NextLowerItem(ref i), default(int)); Assert.AreEqual(i.HasValue, false); i = null; Assert.AreEqual(alist.NextLowerItem(ref i), 777); Assert.AreEqual(i.Value, int.MaxValue); }
void TextBufferChanged(int position, int newLength, int dif) { int startLex = Math.Max(position - _lookahead, 0); EnsureLexed(Buffer.CurrentSnapshot, startLex); if (dif > 0) { _tokens.InsertSpace(position, dif); } else if (_tokens.Count > position) { _tokens.RemoveRange(position, Math.Min(-dif, _tokens.Count - position)); } int endLex = position + newLength + _lookahead; endLex = _tokens.NextHigherIndex(endLex - 1) ?? _tokens.Count; startLex = _tokens.NextLowerIndex(startLex + 1) ?? 0; _lexer = PrepareLexer(_lexer, _wrappedBuffer, startLex); int stoppedAt = RunLexerUntil(endLex); if (ClassificationChanged != null) { var span = new SnapshotSpan(Buffer.CurrentSnapshot, new Span(startLex, stoppedAt - startLex)); ClassificationChanged(this, new ClassificationChangedEventArgs(span)); } }
protected SparseAList <int> NewList(int initialCount, int realCount, out List <int> list) { Debug.Assert(realCount <= initialCount); SparseAList <int> alist = NewList(); list = new List <int>(); // Make a list of random size <= initialCount for (int i = 0; i < realCount; i++) { AddToBoth(alist, list, i, i); } // Add empty spaces until Count == initialCount while (alist.Count < initialCount) { int i = _r.Next(alist.Count + 1); alist.InsertSpace(i); list.Insert(i, 0); } return(alist); }
SparseAList <int> NewList(int start, int count, ListChangingHandler <int> observer, out List <int> list) { var alist = new SparseAList <int>(_maxLeafSize, _maxInnerSize); list = new List <int>(); for (int i = 0; i < count; i++) { if (_r.Next(2) == 0) { alist.Add(start + i); list.Add(start + i); } else { alist.InsertSpace(i); list.Add(0); } } if (observer != null) { alist.ListChanging += observer; } return(alist); }