195 lines
6.1 KiB
Java
195 lines
6.1 KiB
Java
package jmri.util;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
/**
|
|
* Tests for the jmri.util.AlphanumComparator class.
|
|
*
|
|
* @author Paul Bender Copyright 2016
|
|
*/
|
|
public class AlphanumComparatorTest {
|
|
|
|
protected AlphanumComparator ac;
|
|
|
|
// tests are final to make sure they're not overloaded (hence ignored) in subclass
|
|
|
|
@Test
|
|
public final void testHandlingLeadingZeros() {
|
|
assertEquals( 0, ac.compare("01", "1"), "01 == 1");
|
|
assertEquals( 0, ac.compare("1", "01"), "1 == 01");
|
|
assertEquals( 0, ac.compare("001", "1"), "001 == 1");
|
|
assertEquals( 0, ac.compare("1", "001"), "1 == 001");
|
|
assertEquals( 0, ac.compare("0001", "1"), "0001 == 1");
|
|
assertEquals( 0, ac.compare("1", "0001"), "1 == 0001");
|
|
|
|
assertEquals( 0, ac.compare("001", "01"), "001 == 01");
|
|
assertEquals( 0, ac.compare("01", "001"), "01 == 001");
|
|
|
|
assertEquals( 0, ac.compare("00A", "0A"), "00A == 0A");
|
|
assertEquals( 0, ac.compare("0A", "00A"), "0A == 00A");
|
|
|
|
assertEquals( 0, ac.compare("B00A", "B0A"), "B00A == B0A");
|
|
assertEquals( 0, ac.compare("B0A", "B00A"), "B0A == B00A");
|
|
|
|
assertEquals( +1, ac.compare("100", "10"), "100 > 10");
|
|
assertEquals( -1, ac.compare("10", "100"), "10 < 100");
|
|
|
|
assertEquals( 0, ac.compare("00", "0"), "00 == 0");
|
|
assertEquals( 0, ac.compare("0", "00"), "0 == 00");
|
|
|
|
assertEquals( -1, ac.compare("0", "A"), "0 < A");
|
|
assertEquals( +1, ac.compare("A", "0"), "A < 0");
|
|
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompare1LTA() {
|
|
assertTrue( ac.compare("1", "A") < 0, "1 < A");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareEquals() {
|
|
assertEquals( 0, ac.compare("1", "1"), " 1 == 1");
|
|
assertEquals( 0, ac.compare("10", "10"), " 10 == 10");
|
|
assertEquals( 0, ac.compare("100", "100"), " 100 == 100");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareNumbersGreater() {
|
|
assertEquals( 1, ac.compare("1", "0"), " 1 > 0");
|
|
assertEquals( 1, ac.compare("10", "2"), " 10 > 2");
|
|
assertEquals( 1, ac.compare("2", "1"), " 2 > 1");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareNumbersLesser() {
|
|
assertEquals( -1, ac.compare("1", "2"), " 1 < 2");
|
|
assertEquals( -1, ac.compare("1", "10"), " 1 < 10");
|
|
assertEquals( -1, ac.compare("2", "10"), " 2 < 10 ");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareNestedNumeric() {
|
|
assertEquals( -1, ac.compare("1.1.0", "2.1.0"), " 1.1.0 < 2.1.0");
|
|
assertEquals( 0, ac.compare("1.1.1", "1.1.1"), " 1.1.1 == 1.1.1");
|
|
assertEquals( 1, ac.compare("2.1.0", "1.1.0"), " 2.1.0 > 1.1.0");
|
|
|
|
assertEquals( 1, ac.compare("1.10.0", "1.2.0"), " 1.10.0 > 1.2.0");
|
|
assertEquals( -1, ac.compare("1.2.0", "1.10.0"), " 1.2.0 < 1.10.0");
|
|
|
|
assertEquals( 1, ac.compare("1.1.10", "1.1.2"), " 1.1.10 > 1.1.2");
|
|
|
|
}
|
|
|
|
@Test
|
|
public final void testChunkWithLeadingZeros() { // skip leading zero
|
|
assertEquals( 0, ac.compare("IS001", "IS1"), "same IS001 IS1");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareTestNeedForDots() {
|
|
assertEquals( 1, ac.compare("10.1.1", "2.1.1"), " 10.1.1 > 2.1.1");
|
|
assertEquals( -1, ac.compare("2.1.1", "10.1.1"), " 2.1.1 < 10.1.1");
|
|
|
|
assertEquals( 1, ac.compare("1.10.1", "1.2.1"), " 1.10.1 > 1.2.1");
|
|
assertEquals( -1, ac.compare("1.2.1", "1.10.1"), " 1.2.1 < 1.10.1");
|
|
|
|
assertEquals( 1, ac.compare("1.1.10", "1.1.2"), " 1.1.10 > 1.1.2");
|
|
assertEquals( -1, ac.compare("1.1.2", "1.1.10"), " 1.1.2 < 1.1.10");
|
|
}
|
|
|
|
@Test
|
|
public final void testHexadecimal() {
|
|
assertEquals( -1, ac.compare("A0", "B0"), " A0 < B0");
|
|
|
|
assertEquals( -1, ac.compare("21.A0", "21.B0"), " 21.A0 < 21.B0");
|
|
|
|
// non-intuitive, but what it does
|
|
assertEquals( -1, ac.compare("21.1F", "21.10"), " 21.1F < 21.10");
|
|
assertEquals( -1, ac.compare("1F", "10"), " 1F < 10");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareALTB() {
|
|
assertTrue( ac.compare("A", "B") < 0, "A < B");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareBGTA() {
|
|
assertTrue( ac.compare("B", "A") > 0, "B > A");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareA1LTB1() {
|
|
assertTrue( ac.compare("A1", "B1") < 0, "A1 < B1");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareB1GTA1() {
|
|
assertTrue( ac.compare("B1", "A1") > 0, "A1 > B1");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareA10LTB1() {
|
|
assertTrue( ac.compare("A10", "B1") < 0, "A10 < B1");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareB1GTA10() {
|
|
assertTrue( ac.compare("B1", "A10") > 0, "B1 > A10");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareA2LTA10() {
|
|
assertTrue( ac.compare("A2", "A10") < 0, "A2 < A10");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareA10GTA2() {
|
|
assertTrue( ac.compare("A10", "A2") > 0, "A10 > A2");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareA10LTA010() { // skip leading zero
|
|
assertTrue( ac.compare("A10", "A010") == 0, "A10 == A010");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareA010GTA10() { // skip leading zero
|
|
assertTrue( ac.compare("A010", "A10") == 0, "A010 == A10");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareA10Z2LTA10Z10() {
|
|
assertTrue( ac.compare("A10Z2", "A10Z10") < 0, "A10Z2 < A10Z10");
|
|
}
|
|
|
|
@Test
|
|
public final void testAlphanumCompareA10Z10GTA10Z2() {
|
|
assertTrue( ac.compare("A10Z10", "A10Z2") > 0, "A10Z10 > A10Z2");
|
|
}
|
|
|
|
@Test
|
|
public final void testMixedComparison() {
|
|
assertEquals( -1, ac.compare("IS100", "IS100A"), "IS100 < IS100A");
|
|
assertEquals( +1, ac.compare("IS100A", "IS100"), "IS100A > IS100");
|
|
}
|
|
|
|
|
|
// from here down is testing infrastructure
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
ac = new AlphanumComparator();
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
}
|