@Test
public void compare() {

	NaturalOrderComparator<Object> comparator = new NaturalOrderComparator<>();
	
	Integer o1 = 1;
	Integer o2 = 2;
	Integer o3 = 3;
	Integer o4 = 10;
	Float v1 = 3f;
	Double v2 = 3.;
	String v3 = "3";  //$NON-NLS-1$
	Object v4 = new Object();
	
	assertEquals(0, comparator.compare(o1, o1));
	assertEquals(-1, comparator.compare(o1, o2));
	assertEquals(-1, comparator.compare(o1, o3));
	assertEquals(-1, comparator.compare(o1, o4));
	try {
		comparator.compare(o1, v1);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o1, v2);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o1, v3);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o1, v4);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	assertEquals(1, comparator.compare(o2, o1));
	assertEquals(0, comparator.compare(o2, o2));
	assertEquals(-1, comparator.compare(o2, o3));
	assertEquals(-1, comparator.compare(o2, o4));
	try {
		comparator.compare(o2, v1);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o2, v2);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o2, v3);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o2, v4);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}

	assertEquals(1, comparator.compare(o3, o1));
	assertEquals(1, comparator.compare(o3, o2));
	assertEquals(0, comparator.compare(o3, o3));
	assertEquals(-1, comparator.compare(o3, o4));
	try {
		comparator.compare(o3, v1);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o3, v2);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o3, v3);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o3, v4);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}

	assertEquals(1, comparator.compare(o4, o1));
	assertEquals(1, comparator.compare(o4, o2));
	assertEquals(1, comparator.compare(o4, o3));
	assertEquals(0, comparator.compare(o4, o4));
	try {
		comparator.compare(o4, v1);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o4, v2);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o4, v3);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
	try {
		comparator.compare(o4, v4);
		fail("Expecting UnsupportedNaturalOrderException");  //$NON-NLS-1$
	}
	catch(UnsupportedNaturalOrderException exception) {
		// expected exception
	}
}