package com.googlecode.gaal.data.impl;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import com.googlecode.gaal.data.api.IntSequence;
public class ArraySequenceTest {
static final int[] array = { 1, 2, 3, 4, 5 };
private IntSequence sequence;
@Before
public void setUp() throws Exception {
sequence = new ArraySequence(array, 1, 4);
}
@Test
public void testArraySequenceIntArray() {
IntSequence s = new ArraySequence(array);
assertEquals("[1, 2, 3, 4, 5]", s.toString());
}
@Test
public void testArraySequenceIntArrayIntInt() {
IntSequence s = new ArraySequence(array, 1, 3);
assertEquals("[2, 3]", s.toString());
}
@Test
public void testGetIntInt() {
assertTrue(sequence.get(0, -1) == 2);
assertTrue(sequence.get(1, -1) == 3);
assertTrue(sequence.get(2, -1) == 4);
assertTrue(sequence.get(3, -1) == -1);
}
@Test
public void testGetInt() {
assertTrue(sequence.get(0) == 2);
assertTrue(sequence.get(1) == 3);
assertTrue(sequence.get(2) == 4);
Exception exception = null;
try {
sequence.get(3);
} catch (IndexOutOfBoundsException ex) {
exception = ex;
}
assertTrue(exception != null);
assertTrue(exception.getMessage().equals("3"));
}
@Test
public void testSubSequence() {
// sequence [2, 3, 4]
IntSequence s = sequence.subSequence(1, 3);
assertEquals("[3, 4]", s.toString());
}
@Test
public void testReverse() {
// sequence [2, 3, 4]
IntSequence reverse = sequence.reverse();
assertEquals("[4, 3, 2]", reverse.toString());
}
@Test
public void testReverseGetIntInt() {
IntSequence reverse = sequence.reverse();
// s [4, 3, 2]
assertTrue(reverse.get(0, -1) == 4);
assertTrue(reverse.get(1, -1) == 3);
assertTrue(reverse.get(2, -1) == 2);
assertTrue(reverse.get(3, -1) == -1);
}
@Test
public void testReverseGetInt() {
IntSequence reverse = sequence.reverse();
// s [4, 3, 2]
assertTrue(reverse.get(0) == 4);
assertTrue(reverse.get(1) == 3);
assertTrue(reverse.get(2) == 2);
Exception exception = null;
try {
reverse.get(3);
} catch (IndexOutOfBoundsException ex) {
exception = ex;
}
assertTrue(exception != null);
assertTrue(exception.getMessage().equals("3"));
}
@Test
public void testReverseSubSequence() {
IntSequence reverse = sequence.reverse();
// s [4, 3, 2]
IntSequence s = reverse.subSequence(1, 3);
assertEquals("[3, 2]", s.toString());
}
@Test
public void testSize() {
assertTrue(sequence.size() == 3);
}
@Test
public void testCompareTo() {
System.out.println("compareTo");
// equality
System.out.printf("%s=%s\n", sequence, sequence);
assertTrue(sequence.compareTo(sequence) == 0);
assertTrue(sequence.equals(new ArraySequence(new int[] { 2, 3, 4 })));
// a bigger sequence
IntSequence bigger = new ArraySequence(new int[] { 2, 3, 5 });
System.out.printf("%s<%s\n", sequence, bigger);
assertTrue(sequence.compareTo(bigger) < 0);
System.out.printf("%s>%s\n", bigger, sequence);
assertTrue(bigger.compareTo(sequence) > 0);
// a smaller sequence
IntSequence smaller = new ArraySequence(new int[] { 1, 2, 3 });
System.out.printf("%s>%s\n", sequence, smaller);
assertTrue(sequence.compareTo(smaller) > 0);
System.out.printf("%s<%s\n", smaller, sequence);
assertTrue(smaller.compareTo(sequence) < 0);
// a shorter sequence
IntSequence shorter = new ArraySequence(new int[] { 2, 3 });
System.out.printf("%s>%s\n", sequence, shorter);
assertTrue(sequence.compareTo(shorter) > 0);
System.out.printf("%s<%s\n", shorter, sequence);
assertTrue(shorter.compareTo(sequence) < 0);
// a longer sequence
IntSequence longer = new ArraySequence(new int[] { 2, 3, 4, 5 });
System.out.printf("%s<%s\n", sequence, longer);
assertTrue(sequence.compareTo(longer) < 0);
System.out.printf("%s>%s\n", longer, sequence);
assertTrue(longer.compareTo(sequence) > 0);
}
}