Files
JIMRI/java/test/jmri/util/AlphanumComparatorTest.java
2026-06-17 14:00:51 +02:00

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();
}
}