// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; using System.Linq; using NUnit.Framework; namespace ICSharpCode.AvalonEdit.Utils { [TestFixture] public class CompressingTreeListTests { [Test] public void EmptyTreeList() { CompressingTreeList list = new CompressingTreeList(string.Equals); Assert.AreEqual(0, list.Count); foreach (string v in list) { Assert.Fail(); } string[] arr = new string[0]; list.CopyTo(arr, 0); } [Test] public void CheckAdd10BillionElements() { const int billion = 1000000000; CompressingTreeList list = new CompressingTreeList(string.Equals); list.InsertRange(0, billion, "A"); list.InsertRange(1, billion, "B"); Assert.AreEqual(2 * billion, list.Count); try { list.InsertRange(2, billion, "C"); Assert.Fail("Expected OverflowException"); } catch (OverflowException) { // expected } } [Test] public void AddRepeated() { CompressingTreeList list = new CompressingTreeList((a, b) => a == b); list.Add(42); list.Add(42); list.Add(42); list.Insert(0, 42); list.Insert(1, 42); Assert.AreEqual(new[] { 42, 42, 42, 42, 42 }, list.ToArray()); } [Test] public void RemoveRange() { CompressingTreeList list = new CompressingTreeList((a, b) => a == b); for (int i = 1; i <= 3; i++) { list.InsertRange(list.Count, 2, i); } Assert.AreEqual(new[] { 1, 1, 2, 2, 3, 3 }, list.ToArray()); list.RemoveRange(1, 4); Assert.AreEqual(new[] { 1, 3 }, list.ToArray()); list.Insert(1, 1); list.InsertRange(2, 2, 2); list.Insert(4, 1); Assert.AreEqual(new[] { 1, 1, 2, 2, 1, 3 }, list.ToArray()); list.RemoveRange(2, 2); Assert.AreEqual(new[] { 1, 1, 1, 3 }, list.ToArray()); } [Test] public void RemoveAtEnd() { CompressingTreeList list = new CompressingTreeList((a, b) => a == b); for (int i = 1; i <= 3; i++) { list.InsertRange(list.Count, 2, i); } Assert.AreEqual(new[] { 1, 1, 2, 2, 3, 3 }, list.ToArray()); list.RemoveRange(3, 3); Assert.AreEqual(new[] { 1, 1, 2 }, list.ToArray()); } [Test] public void RemoveAtStart() { CompressingTreeList list = new CompressingTreeList((a, b) => a == b); for (int i = 1; i <= 3; i++) { list.InsertRange(list.Count, 2, i); } Assert.AreEqual(new[] { 1, 1, 2, 2, 3, 3 }, list.ToArray()); list.RemoveRange(0, 1); Assert.AreEqual(new[] { 1, 2, 2, 3, 3 }, list.ToArray()); } [Test] public void RemoveAtStart2() { CompressingTreeList list = new CompressingTreeList((a, b) => a == b); for (int i = 1; i <= 3; i++) { list.InsertRange(list.Count, 2, i); } Assert.AreEqual(new[] { 1, 1, 2, 2, 3, 3 }, list.ToArray()); list.RemoveRange(0, 3); Assert.AreEqual(new[] { 2, 3, 3 }, list.ToArray()); } } }