using System; using System.Linq; using Skeleton.DataStructure.Link; namespace Skeleton.Test; [TestFixture] public class LinkTest : BaseTest { private class TestObj { public TestObj(int val) => Value = val; public int Value { get; set; } = 0; } [Test] public static void Test() { Link obj = new Link(); for (int i = 0; i <= 10; i++) obj.AddLast(i); int checker = 0; foreach (int val in obj) Assert.That(checker++, Is.EqualTo(val)); checker -= 1; foreach (int val in obj.Backward) Assert.That(checker--, Is.EqualTo(val)); Link objA = new Link(); for (int i = 0; i <= 10; i++) objA.AddLast(new TestObj(i)); Assert.That(objA.Zip(obj).Count(x => x.First.Value - x.Second != 0), Is.EqualTo(0)); LinkNode findObj = objA.Find(new TestObj(0)); LinkNode findInt = obj.Find(0); Assert.That(LinkNode.Null, Is.EqualTo(findObj)); Assert.That(LinkNode.Null, Is.Not.EqualTo(findInt)); findObj = objA.Find(objA.First.Value); Assert.That(LinkNode.Null, Is.Not.EqualTo(findObj)); try { objA.Remove(findObj.Previous); Assert.Fail(); } catch (Exception) { // pass } objA.Remove(findObj.Next); objA.Remove(findObj.Next.Next); Assert.That(objA.Select(x => x.Value).Count(x => x==1 || x==3), Is.EqualTo(0)); Assert.That(findInt.Value, Is.EqualTo(0)); obj.Remove(findInt); obj.RemoveFirst(); Assert.IsFalse(obj.Contains(0) || obj.Contains(1)); Assert.That(findInt.Previous, Is.EqualTo(LinkNode.Null)); Assert.That(findInt.Next, Is.EqualTo(LinkNode.Null)); Assert.That(findInt.Parent, Is.EqualTo(Link.Null)); Assert.That(obj.Find(findInt.Value), Is.EqualTo(LinkNode.Null)); Console.WriteLine("Link Structure Test Pass"); } }