Files
SystemExtensions/SystemExtensionsTests/Collections/FibonacciHeapTests.cs
T

194 lines
4.7 KiB
C#

using Microsoft.VisualStudio.TestTools.UnitTesting;
using SystemExtensions.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace SystemExtensions.Collections.Tests
{
[TestClass()]
public class FibonacciHeapTests
{
private static int IntegerComparison(int x, int y)
{
if (x == y)
{
return 0;
}
else if (x > y)
{
return 1;
}
else
{
return -1;
}
}
FibonacciHeap<int> fibonacciHeap = new FibonacciHeap<int>(new Comparison<int>(IntegerComparison));
[TestMethod()]
public void InsertTest()
{
for (int i = 0; i < 1000; i++)
{
fibonacciHeap.Insert(i);
}
}
[TestMethod()]
public void FibonacciHeapTest()
{
fibonacciHeap = new FibonacciHeap<int>(new Comparison<int>(IntegerComparison));
if(fibonacciHeap.Count != 0)
{
Assert.Fail();
}
}
[TestMethod()]
public void MergeTest()
{
FibonacciHeap<int> fibonacciHeap1 = new FibonacciHeap<int>(new Comparison<int>(IntegerComparison));
FibonacciHeap<int> fibonacciHeap2 = new FibonacciHeap<int>(new Comparison<int>(IntegerComparison));
for(int i = 0; i < 100; i++)
{
fibonacciHeap1.Insert(i);
}
for(int i = 100; i < 300; i++)
{
fibonacciHeap2.Insert(i);
}
fibonacciHeap1.Merge(fibonacciHeap2);
for(int i = 1; i < 300; i++)
{
if (!fibonacciHeap1.Contains(i))
{
Assert.Fail();
}
}
}
[TestMethod()]
public void RemoveMinimumTest()
{
try
{
fibonacciHeap.RemoveMinimum();
Assert.Fail();
}
catch(IndexOutOfRangeException exception)
{
}
catch(Exception e)
{
Assert.Fail();
}
for (int i = 0; i < 1000; i++)
{
fibonacciHeap.Insert(i);
}
for (int i = 0; i < 1000; i++)
{
if (fibonacciHeap.RemoveMinimum() != i)
{
Assert.Fail();
}
}
}
[TestMethod()]
public void DecreaseKeyTest()
{
fibonacciHeap.Insert(5);
fibonacciHeap.Insert(10);
fibonacciHeap.Insert(7);
fibonacciHeap.DecreaseKey(5, 3);
if(fibonacciHeap.Contains(5) || !fibonacciHeap.Contains(3))
{
Assert.Fail();
}
fibonacciHeap.DecreaseKey(10, 1);
if(fibonacciHeap.RemoveMinimum() != 1)
{
Assert.Fail();
}
}
[TestMethod()]
public void ContainsTest()
{
for(int i = 0; i < 10000; i++)
{
fibonacciHeap.Insert(i);
}
if (!fibonacciHeap.Contains(5124))
{
Assert.Fail();
}
}
[TestMethod()]
public void ClearTest()
{
for(int i = 0; i < 10000; i++)
{
fibonacciHeap.Insert(i);
}
fibonacciHeap.RemoveMinimum();
fibonacciHeap.Clear();
if(fibonacciHeap.Count > 0)
{
Assert.Fail();
}
}
[TestMethod()]
public void ToArrayTest()
{
for(int i = 999; i >= 0; i--)
{
fibonacciHeap.Insert(i);
}
fibonacciHeap.RemoveMinimum();
int[] arr = fibonacciHeap.ToArray();
for(int i = 1; i < 512; i++)
{
if(arr[i - 1] != i)
{
Assert.Fail();
}
}
}
[TestMethod()]
public void GetEnumeratorTest()
{
for (int i = 999; i >= 0; i--)
{
fibonacciHeap.Insert(i);
}
int count = 0;
foreach(int value in fibonacciHeap)
{
System.Diagnostics.Debug.WriteLine(value);
count++;
}
if(count == fibonacciHeap.Count)
{
return;
}
Assert.Fail();
}
}
}