Skip to content

Instantly share code, notes, and snippets.

@hailpam
Created November 7, 2015 12:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hailpam/cb762347975cd32f6166 to your computer and use it in GitHub Desktop.
Save hailpam/cb762347975cd32f6166 to your computer and use it in GitHub Desktop.
Suite of automated tests for the Unsorted implementation of the LinkedList ADT.
package it.pm.algorithms;
import it.pm.algorithms.impl.UnsortedLinkedList;
import java.util.Random;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* Automated Unit Tests for the {@link UnsortedLinkedList} implementation.
*
* @author Paolo Maresca <plo.maresca@gmail.com>
*/
public class UnsortedLinkedListTest
{
private UnsortedLinkedList list;
public UnsortedLinkedListTest() {}
@Before
public void setUp() { list = new UnsortedLinkedList(); }
@After
public void tearDown() {}
@Test
public void iterativeReverse()
{
list.insert(0);
list.insert(1);
list.insert(2);
list.insert(3);
list.insert(4);
list.insert(5);
String serialized = list.printIterative();
Assert.assertEquals("5 4 3 2 1 0 ", serialized);
list.iterativeReverse();
String reversed = list.printIterative();
Assert.assertEquals("0 1 2 3 4 5 ", reversed);
list.iterativeReverse();
String reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
}
@Test
public void recursiveReverse()
{
list.insert(0);
list.insert(1);
list.insert(2);
list.insert(3);
list.insert(4);
list.insert(5);
String serialized = list.printIterative();
Assert.assertEquals("5 4 3 2 1 0 ", serialized);
list.recursiveReverse();
String reversed = list.printIterative();
Assert.assertEquals("0 1 2 3 4 5 ", reversed);
list.recursiveReverse();
String reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
}
@Test
public void recursiveReverseRandomItems()
{
Random rand = new Random();
for(int i = 0; i < 100; i++)
list.insert(rand.nextInt(10000));
String serialized = list.printIterative();
list.iterativeReverse();
String reversed = list.printIterative();
list.iterativeReverse();
String reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
}
@Test
public void iterativeReverseRandomItems()
{
Random rand = new Random();
for(int i = 0; i < 100; i++)
list.insert(rand.nextInt(10000));
String serialized = list.printIterative();
list.recursiveReverse();
String reversed = list.printIterative();
list.recursiveReverse();
String reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
}
@Test
public void iterativeReverseCornerCases()
{
// empty list
String serialized = list.printIterative();
list.iterativeReverse();
String reversed = list.printIterative();
Assert.assertEquals(serialized, reversed);
Assert.assertEquals("", serialized);
Assert.assertEquals("", reversed);
list.iterativeReverse();
String reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
Assert.assertEquals("", reReversed);
// one element in the list
list.insert(1);
serialized = list.printIterative();
list.iterativeReverse();
reversed = list.printIterative();
Assert.assertEquals(serialized, reversed);
Assert.assertEquals("1 ", serialized);
Assert.assertEquals("1 ", reversed);
list.iterativeReverse();
reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
Assert.assertEquals("1 ", reReversed);
// two elements in the list
list.insert(2);
serialized = list.printIterative();
list.iterativeReverse();
reversed = list.printIterative();
Assert.assertEquals("2 1 ", serialized);
Assert.assertEquals("1 2 ", reversed);
list.iterativeReverse();
reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
Assert.assertEquals("2 1 ", reReversed);
// three elements in the list
list.insert(3);
serialized = list.printIterative();
list.iterativeReverse();
reversed = list.printIterative();
Assert.assertEquals("3 2 1 ", serialized);
Assert.assertEquals("1 2 3 ", reversed);
list.iterativeReverse();
reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
Assert.assertEquals("3 2 1 ", reReversed);
}
@Test
public void recursiveReverseCornerCases()
{
// empty list
String serialized = list.printIterative();
list.recursiveReverse();
String reversed = list.printIterative();
Assert.assertEquals(serialized, reversed);
Assert.assertEquals("", serialized);
Assert.assertEquals("", reversed);
list.recursiveReverse();
String reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
Assert.assertEquals("", reReversed);
// one element in the list
list.insert(1);
serialized = list.printIterative();
list.recursiveReverse();
reversed = list.printIterative();
Assert.assertEquals(serialized, reversed);
Assert.assertEquals("1 ", serialized);
Assert.assertEquals("1 ", reversed);
list.recursiveReverse();
reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
Assert.assertEquals("1 ", reReversed);
// two elements in the list
list.insert(2);
serialized = list.printIterative();
list.recursiveReverse();
reversed = list.printIterative();
Assert.assertEquals("2 1 ", serialized);
Assert.assertEquals("1 2 ", reversed);
list.recursiveReverse();
reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
Assert.assertEquals("2 1 ", reReversed);
// three elements in the list
list.insert(3);
serialized = list.printIterative();
list.recursiveReverse();
reversed = list.printIterative();
Assert.assertEquals("3 2 1 ", serialized);
Assert.assertEquals("1 2 3 ", reversed);
list.recursiveReverse();
reReversed = list.printIterative();
Assert.assertEquals(serialized, reReversed);
Assert.assertEquals("3 2 1 ", reReversed);
}
@Test
public void testPrint()
{
String printed = list.printRecursive();
Assert.assertEquals("", printed);
list.insert(4);
list.insert(11);
printed = list.printRecursive();
Assert.assertEquals("11 4 ", printed);
}
@Test
public void testSearch()
{
// empty list
LinkedList.Node found = list.search(1);
Assert.assertNull(found);
// filled list
list.insert(4);
list.insert(11);
list.insert(1);
list.insert(5);
list.insert(7);
String printed = list.printRecursive();
Assert.assertEquals("7 5 1 11 4 ", printed);
found = list.search(5);
Assert.assertNotNull(found);
Assert.assertEquals(5, (int) found.value);
found = list.search(1);
Assert.assertNotNull(found);
Assert.assertEquals(1, (int) found.value);
// non-existing element
found = list.search(77);
Assert.assertNull(found);
}
@Test
public void testDelete()
{
// empty list
LinkedList.Node deleted = list.delete(5);
Assert.assertNull(deleted);
// fille list
list.insert(4);
list.insert(11);
list.insert(1);
list.insert(5);
list.insert(7);
deleted = list.delete(5);
Assert.assertNotNull(deleted);
Assert.assertEquals(5, (int) deleted.value);
String printed = list.printRecursive();
Assert.assertEquals("7 1 11 4 ", printed);
deleted = list.delete(4);
Assert.assertNotNull(deleted);
Assert.assertEquals(4, (int) deleted.value);
printed = list.printRecursive();
Assert.assertEquals("7 1 11 ", printed);
deleted = list.delete(1);
Assert.assertNotNull(deleted);
Assert.assertEquals(1, (int) deleted.value);
printed = list.printRecursive();
Assert.assertEquals("7 11 ", printed);
deleted = list.delete(7);
Assert.assertNotNull(deleted);
Assert.assertEquals(7, (int) deleted.value);
printed = list.printRecursive();
Assert.assertEquals("11 ", printed);
deleted = list.delete(11);
Assert.assertNotNull(deleted);
Assert.assertEquals(11, (int) deleted.value);
printed = list.printRecursive();
Assert.assertEquals("", printed);
// non-existing element in the list
deleted = list.delete(77);
Assert.assertNull(deleted);
}
@Test
public void testMin()
{
list.insert(4);
list.insert(11);
list.insert(1);
list.insert(5);
list.insert(7);
Integer min = (Integer) list.min();
Assert.assertNotNull(min);
Assert.assertEquals(new Integer(1), min);
}
@Test
public void testMax()
{
list.insert(4);
list.insert(11);
list.insert(1);
list.insert(5);
list.insert(7);
Integer max = (Integer) list.max();
Assert.assertNotNull(max);
Assert.assertEquals(new Integer(11), max);
}
@Test
public void printIterative()
{
// empty list
String serialized = list.printIterative();
Assert.assertEquals("", serialized);
// filled list
list.insert(4);
list.insert(11);
list.insert(1);
list.insert(5);
list.insert(7);
serialized = list.printIterative();
Assert.assertEquals("7 5 1 11 4 ", serialized);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment