@Override
    public int compareTo(Version o) {
        int thisVersion = this.pack();
        int thatVersion = o.pack();
        // min pack value is 0
        // max pack value is lower than Short.MAX
        return thisVersion - thatVersion;
    }
@Test
    public void compareTo() throws Exception {
        assertEquals(0, of(3, 9).compareTo(of(3, 9)));
        assertThat(of(3, 10).compareTo(of(3, 9))).isPositive();
        assertThat(of(4, 0).compareTo(of(3, 9))).isPositive();
        assertThat(of(3, 9).compareTo(of(3, 10))).isNegative();
        assertThat(of(3, 9).compareTo(of(4, 10))).isNegative();
    }