Files
Skeleton.Test/tests/LinkTest.cs
2024-06-21 21:59:13 +08:00

62 lines
2.0 KiB
C#

using System;
using System.Linq;
using Skeleton.DataStructure.Link;
namespace SkeletonTest.tests;
public static class LinkTest
{
private class TestObj
{
public TestObj(int val) => Value = val;
public int Value { get; set; } = 0;
}
[Test]
public static void Test()
{
Link<int> obj = new Link<int>();
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<TestObj> objA = new Link<TestObj>();
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<TestObj> findObj = objA.Find(new TestObj(0));
LinkNode<int> findInt = obj.Find(0);
Assert.That(LinkNode<TestObj>.Null, Is.EqualTo(findObj));
Assert.That(LinkNode<int>.Null, Is.Not.EqualTo(findInt));
findObj = objA.Find(objA.First.Value);
Assert.That(LinkNode<TestObj>.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<int>.Null));
Assert.That(findInt.Next, Is.EqualTo(LinkNode<int>.Null));
Assert.That(findInt.Parent, Is.EqualTo(Link<int>.Null));
Assert.That(obj.Find(findInt.Value), Is.EqualTo(LinkNode<int>.Null));
Console.WriteLine("Link Structure Test Pass");
}
}