public boolean contains(T versionNumber) {
        if (versionNumber == null) return false;
        if (isEmpty()) return false;
        if (isAll()) return true;

        return (minimum == null || minimum.compareTo(versionNumber) <= 0) && (maximum == null || maximum.compareTo(versionNumber) >= 0);
    }
@Test
    public void testContains() {
        VersionRange<VersionNumber> empty = VersionRange.empty();
        VersionRange<VersionNumber> all = all();

        assertTrue(VersionNumber.between("10", "20").contains(VersionNumber.asVersion("10")));
        assertTrue(VersionNumber.between("10", "20").contains(VersionNumber.asVersion("15")));
        assertTrue(VersionNumber.between("10", "20").contains(VersionNumber.asVersion("20")));
        assertFalse(VersionNumber.between("10", "20").contains(VersionNumber.asVersion("5")));
        assertFalse(VersionNumber.between("10", "20").contains(VersionNumber.asVersion("25")));

        assertTrue(VersionNumber.between("10", "10").contains(VersionNumber.asVersion("10")));
        assertFalse(VersionNumber.between("10", "10").contains(VersionNumber.asVersion("5")));
        assertFalse(VersionNumber.between("10", "10").contains(VersionNumber.asVersion("15")));

        assertTrue(VersionNumber.atLeast("10").contains(VersionNumber.asVersion("10")));
        assertTrue(VersionNumber.atLeast("10").contains(VersionNumber.asVersion("20")));
        assertFalse(VersionNumber.atLeast("10").contains(VersionNumber.asVersion("5")));

        assertTrue(VersionNumber.atMost("10").contains(VersionNumber.asVersion("10")));
        assertTrue(VersionNumber.atMost("10").contains(VersionNumber.asVersion("5")));
        assertFalse(VersionNumber.atMost("10").contains(VersionNumber.asVersion("20")));

        assertFalse(empty.contains(VersionNumber.asVersion("0")));
        assertFalse(empty.contains(VersionNumber.asVersion("10")));

        assertTrue(all.contains(VersionNumber.asVersion("0")));
        assertTrue(all.contains(VersionNumber.asVersion("10")));

        assertFalse(all.contains(null));
        assertFalse(empty.contains( null));
        assertFalse(VersionNumber.between("0", "10").contains(null));
        assertFalse(VersionNumber.atLeast("10").contains(null));
        assertFalse(VersionNumber.atMost("10").contains(null));
        assertFalse(all.contains(null));
        assertFalse(empty.contains(null));
        assertFalse(VersionNumber.between("0", "10").contains(null));
        assertFalse(VersionNumber.atLeast("10").contains(null));
        assertFalse(VersionNumber.atMost("10").contains(null));
    }