public void TestNextHigherItem() { var alist = new SparseAList <int>(_maxLeafSize, _maxInnerSize); int?i; for (i = 0; i < 100; i++) { alist.Add(i.Value); } alist.InsertSpace(50, 1000000000); i = null; Assert.AreEqual(alist.NextHigherItem(ref i), 0); Assert.AreEqual(i.Value, 0); i = int.MinValue; Assert.AreEqual(alist.NextHigherItem(ref i), 0); Assert.AreEqual(i.Value, 0); Assert.AreEqual(alist.NextHigherItem(ref i), 1); Assert.AreEqual(i.Value, 1); i = 49; Assert.AreEqual(alist.NextHigherItem(ref i), 50); Assert.AreEqual(i.Value, 1000000050); i = 50; Assert.AreEqual(alist.NextHigherItem(ref i), 50); Assert.AreEqual(i.Value, 1000000050); i = 1000000049; Assert.AreEqual(alist.NextHigherItem(ref i), 50); Assert.AreEqual(i.Value, 1000000050); i = 1000000098; Assert.AreEqual(alist.NextHigherItem(ref i), 99); Assert.AreEqual(i.Value, 1000000099); Assert.AreEqual(alist.NextHigherItem(ref i), default(int)); Assert.AreEqual(i.HasValue, false); i = 1000000100; Assert.AreEqual(alist.NextHigherItem(ref i), default(int)); Assert.AreEqual(i.HasValue, false); i = int.MaxValue; Assert.AreEqual(alist.NextHigherItem(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.NextHigherItem(ref i), 777); Assert.AreEqual(i.Value, int.MaxValue); Assert.AreEqual(alist.NextLowerItem(ref i), default(int)); Assert.AreEqual(i.HasValue, false); }
public virtual IList <ClassificationSpan> GetClassificationSpans(SnapshotSpan span) { EnsureLexed(span.Snapshot, span.End.Position); List <ClassificationSpan> tags = new List <ClassificationSpan>(); int?position = span.Start.Position + 1; var eToken = _tokens.NextLowerItem(ref position); do { var tag = MakeClassificationSpan(span.Snapshot, eToken.ToToken(position ?? 0, false)); if (tag != null) { tags.Add(tag); } eToken = _tokens.NextHigherItem(ref position); } while (position != null && position < span.End.Position); return(tags); }