@Override public int compare(LocationSummary o1, LocationSummary o2) { return COMPARATOR.compare(getNameOrSpec(o1).toLowerCase(), getNameOrSpec(o2).toLowerCase()); } };
ca = charAt(a, ia); cb = charAt(b, ib); ca = charAt(a, ++ia); cb = charAt(b, ++ib); if ((result = compareRight(a.substring(ia), b.substring(ib))) != 0) { return result; boolean aDigitsDone = ia >= a.length() || !Character.isDigit(charAt(a, ia)); boolean bDigitsDone = ib >= b.length() || !Character.isDigit(charAt(b, ib)); if (aDigitsDone != bDigitsDone) { if (ib >= b.length()) return 1; // only a has more chars if ((result = compare(a.substring(ia), b.substring(ib))) != 0) { return result;
@Override public int compare(Bundle o1, Bundle o2) { int r = NaturalOrderComparator.INSTANCE.compare(o1.getSymbolicName(), o2.getSymbolicName()); if (r!=0) return r; return VersionComparator.INSTANCE.compare(o1.getVersion().toString(), o2.getVersion().toString()); } });
@Override public int compare(HasName o1, HasName o2) { return COMPARATOR.compare(getDisplayNameOrName(o1).toLowerCase(), getDisplayNameOrName(o2).toLowerCase()); } };
@Test public void testBasicOnes() { Assert.assertEquals(0, noc.compare("a", "a")); Assert.assertTrue(noc.compare("a", "b") < 0); Assert.assertTrue(noc.compare("b", "a") > 0); Assert.assertTrue(noc.compare("9", "10") < 0); Assert.assertTrue(noc.compare("10", "9") > 0); Assert.assertTrue(noc.compare("b10", "a9") > 0); Assert.assertTrue(noc.compare("b9", "a10") > 0); Assert.assertTrue(noc.compare(" 9", "10") < 0); Assert.assertTrue(noc.compare("10", " 9") > 0); }
@Test public void testVersionNumbers() { Assert.assertEquals(noc.compare("10.5.8", "10.5.8"), 0); Assert.assertTrue(noc.compare("10.5", "9.9") > 0); Assert.assertTrue(noc.compare("10.5.1", "10.5") > 0); Assert.assertTrue(noc.compare("10.5.1", "10.6") < 0); Assert.assertTrue(noc.compare("10.5.1-1", "10.5.1-0") > 0); }
@Override public int compare(HasName o1, HasName o2) { return COMPARATOR.compare(o1.getName(), o2.getName()); } };
@Test public void testNoc() { Assert.assertEquals(noc.compare("0", "1"), -1); Assert.assertEquals(noc.compare("1", "10"), -1); Assert.assertEquals(noc.compare("9", "10"), -1); Assert.assertEquals(noc.compare("a", "b"), -1); Assert.assertEquals(noc.compare("a9", "a10"), -1); Assert.assertEquals(noc.compare("1", "02"), -1); Assert.assertEquals(noc.compare("02", "3"), -1); Assert.assertEquals(noc.compare("02", "2"), -1); Assert.assertEquals(noc.compare("1.b", "02.a"), -1); Assert.assertEquals(noc.compare("02.b", "3.a"), -1); Assert.assertEquals(noc.compare("02.a", "2.b"), -1); Assert.assertEquals(noc.compare("0.9", "0.91"), -1); Assert.assertEquals(noc.compare("0.90", "0.91"), -1); Assert.assertEquals(noc.compare("1.2.x", "1.09.x"), -1); Assert.assertEquals(noc.compare("2", "2.1"), -1); Assert.assertEquals(noc.compare("2", "2.01"), -1); Assert.assertEquals(noc.compare("2.01", "2.1"), -1); Assert.assertEquals(noc.compare("2.1", "2.02"), -1); Assert.assertEquals(noc.compare("2", "02.1"), -1); Assert.assertEquals(noc.compare("2", "02.01"), -1); Assert.assertEquals(noc.compare("0", "1a"), -1); Assert.assertEquals(noc.compare("0a", "1"), -1);
@Test public void testWordsNumsPunctuation() { // it's basically ascii except for where we're comparing numbers in the same place Assert.assertTrue(noc.compare("1", "") > 0); Assert.assertTrue(noc.compare("one", "1") > 0); Assert.assertTrue(noc.compare("some1", "some") > 0); Assert.assertTrue(noc.compare("someone", "some") > 0); Assert.assertTrue(noc.compare("someone", "some1") > 0); Assert.assertTrue(noc.compare("someone", "some0") > 0); Assert.assertTrue(noc.compare("some-one", "some-1") > 0); Assert.assertTrue(noc.compare("a1", "aa1") < 0); Assert.assertTrue(noc.compare("a", "aa") < 0); Assert.assertTrue(noc.compare("a", "a-") < 0); Assert.assertTrue(noc.compare("a-", "a.") < 0); Assert.assertTrue(noc.compare("a-", "a1") < 0); Assert.assertTrue(noc.compare("a-", "aa") < 0); Assert.assertTrue(noc.compare("a1", "aa") < 0); Assert.assertTrue(noc.compare("aA", "a_") < 0); Assert.assertTrue(noc.compare("a_", "aa") < 0); Assert.assertTrue(noc.compare("a-1", "a1") < 0); Assert.assertTrue(noc.compare("a0", "a-1") < 0); Assert.assertTrue(noc.compare("a0", "aa0") < 0); Assert.assertTrue(noc.compare("a-9", "a-10") < 0); Assert.assertTrue(noc.compare("a-0", "a-01") < 0); Assert.assertTrue(noc.compare("a-01", "a-1") < 0); }
int uq = NaturalOrderComparator.INSTANCE.compare(u1, u2); if (uq!=0) return uq; if (q1.startsWith("-") || q1.startsWith(".") || q1.startsWith("_")) q1 = q1.substring(1); if (q2.startsWith("-") || q2.startsWith(".") || q2.startsWith("_")) q2 = q2.substring(1); uq = NaturalOrderComparator.INSTANCE.compare(q1, q2); if (uq!=0) return uq; return NaturalOrderComparator.INSTANCE.compare(v1, v2);