62 lines
2.0 KiB
C#
62 lines
2.0 KiB
C#
using System;
|
|
using System.Linq;
|
|
using Skeleton.DataStructure.Link;
|
|
|
|
namespace Skeleton.Test;
|
|
|
|
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");
|
|
}
|
|
} |