### Question:
IntOption extends ValueOption<IntOption> { @Override public int compareTo(WritableRawComparable o) { IntOption other = (IntOption) o; if (nullValue | other.nullValue) { if (nullValue & other.nullValue) { return 0; } return nullValue ? -1 : +1; } return Integer.compare(value, other.value); } IntOption();  IntOption(int value); int get(); int or(int alternate); void add(int delta); void add(IntOption other); @Deprecated IntOption modify(int newValue); @Override @Deprecated void copyFrom(IntOption optionOrNull); @Override int hashCode(); @Override boolean equals(Object obj); boolean has(int other); @Override int compareTo(WritableRawComparable o); @Override String toString(); @Override void write(DataOutput out); @SuppressWarnings("deprecation") @Override void readFields(DataInput in); @SuppressWarnings("deprecation") @Override int restore(byte[] bytes, int offset, int limit); @Override int getSizeInBytes(byte[] buf, int offset); @Override int compareInBytes(byte[] b1, int o1, byte[] b2, int o2); static int getBytesLength(byte[] bytes, int offset, int length); static int compareBytes(
            byte[] b1, int s1, int l1,
            byte[] b2, int s2, int l2);  }### Answer:
@Test public void compareTo() { IntOption a = new IntOption(); IntOption b = new IntOption(); IntOption c = new IntOption(); IntOption d = new IntOption(); a.modify(-10); b.modify(0); c.modify(30); d.modify(-10); assertThat(compare(a, b), lessThan(0)); assertThat(compare(b, c), lessThan(0)); assertThat(compare(c, a), greaterThan(0)); assertThat(compare(a, c), lessThan(0)); assertThat(compare(b, a), greaterThan(0)); assertThat(compare(c, b), greaterThan(0)); assertThat(compare(a, d), is(0)); }