@Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Version that = (Version) o;
        return isEqualTo(that);
    }
@Test
    public void equals() throws Exception {
        assertEquals(Version.UNKNOWN, Version.UNKNOWN);
        assertEquals(Version.of(3, 0), Version.of(3, 0));

        assertFalse(Version.of(3, 0).equals(Version.of(4, 0)));
        assertFalse(Version.UNKNOWN.equals(Version.of(4, 0)));

        assertFalse(Version.UNKNOWN.equals(new Object()));
    }