@Override
    public int compareTo(final ComparableWrapper other) {

        if (!Objects.equals(type, Type.NORMAL) || !Objects.equals(other.type, Type.NORMAL)) {
            return type.compareTo(other.type);
        } else {
            Comparator<Comparable> nullFirstCompare = Comparator.nullsFirst(Comparable::compareTo);
            return nullFirstCompare.compare(value, other.value);
        }
    }
@Test
    void compareTo() {
        assertThat(theNull.compareTo(theNull)).isEqualTo(0);
        assertThat(one.compareTo(one)).isEqualTo(0);
        assertThat(ten.compareTo(ten)).isEqualTo(0);
        assertThat(min.compareTo(min)).isEqualTo(0);
        assertThat(max.compareTo(max)).isEqualTo(0);

        assertThat(one.compareTo(theNull) > 0).isTrue();
        assertThat(one.compareTo(ten) < 0).isTrue();
        assertThat(one.compareTo(min) > 0).isTrue();
        assertThat(one.compareTo(max) < 0).isTrue();
        
        assertThat(ten.compareTo(theNull) > 0).isTrue();
        assertThat(ten.compareTo(one) > 0).isTrue();
        assertThat(ten.compareTo(min) > 0).isTrue();
        assertThat(ten.compareTo(max) < 0).isTrue();

        assertThat(min.compareTo(theNull) < 0).isTrue();
        assertThat(min.compareTo(one) < 0).isTrue();
        assertThat(min.compareTo(ten) < 0).isTrue();
        assertThat(min.compareTo(max) < 0).isTrue();

        assertThat(max.compareTo(theNull) > 0).isTrue();
        assertThat(max.compareTo(one) > 0).isTrue();
        assertThat(max.compareTo(ten) > 0).isTrue();
        assertThat(max.compareTo(min) > 0).isTrue();
    }