package edu.uw.zookeeper.data; import static org.junit.Assert.*; import java.util.Comparator; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import com.google.common.primitives.UnsignedInteger; @RunWith(JUnit4.class) public class SequentialTest { @Test public void testSequentialCompareTo() { Sequential.Overflowed<String> overflowed = Sequential.overflowed("a"); compareToEquals(overflowed, Sequential.overflowed(overflowed.prefix())); Sequential.Sequenced<String> sequenced = Sequential.sequenced(overflowed.prefix(), UnsignedInteger.MAX_VALUE); compareToEquals(sequenced, Sequential.sequenced(sequenced.prefix(), sequenced.sequence())); compareToLessThan(sequenced, overflowed); compareToLessThan( Sequential.sequenced("a", UnsignedInteger.ZERO), Sequential.sequenced("b", UnsignedInteger.ZERO)); compareToLessThan( Sequential.sequenced("b", UnsignedInteger.ZERO), Sequential.sequenced("a", UnsignedInteger.ONE)); compareToLessThan( Sequential.overflowed("a"), Sequential.overflowed("b")); } @Test public void testSequentialComparator() { Comparator<String> comparator = Sequential.comparator(); compareTo(comparator, "a", "b"); compareToLessThan( comparator, "a", Sequential.sequenced("a", UnsignedInteger.ZERO).toString()); compareToLessThan( comparator, Sequential.sequenced("a", UnsignedInteger.ZERO).toString(), "b"); compareToString( comparator, Sequential.sequenced("b", UnsignedInteger.ZERO), Sequential.sequenced("a", UnsignedInteger.ONE)); } protected <T extends Comparable<? super T>> void compareToString(Comparator<? super String> comparator, T v1, T v2) { assertEquals(v1.compareTo(v2), comparator.compare(v1.toString(), v2.toString())); assertEquals(v2.compareTo(v1), comparator.compare(v2.toString(), v1.toString())); } protected <T extends Comparable<? super T>> void compareTo(Comparator<? super T> comparator, T v1, T v2) { assertEquals(v1.compareTo(v2), comparator.compare(v1, v2)); assertEquals(v2.compareTo(v1), comparator.compare(v2, v1)); } protected <T> void compareToLessThan(Comparator<? super T> comparator, T v1, T v2) { assertTrue(comparator.compare(v1, v2) < 0); assertTrue(comparator.compare(v2, v1) > 0); } protected <T extends Comparable<? super T>> void compareToLessThan(final T v1, final T v2) { assertTrue(v1.compareTo(v2) < 0); assertTrue(v2.compareTo(v1) > 0); } protected <T extends Comparable<? super T>> void compareToEquals(final T v1, final T v2) { assertEquals(v1, v2); assertEquals(0, v1.compareTo(v2)); assertEquals(0, v2.compareTo(v1)); } }