### Question:
ProteinRange implements ConvertibleToHGVSString { @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ProteinRange other = (ProteinRange) obj; if (first == null) { if (other.first != null) return false; } else if (!first.equals(other.first)) return false; if (last == null) { if (other.last != null) return false; } else if (!last.equals(other.last)) return false; return true; } ProteinRange(ProteinPointLocation first, ProteinPointLocation last); static ProteinRange build(String firstAA, int first, String lastAA, int last); static ProteinRange buildWithOffset(String firstAA, int first, int firstOffset, String lastAA, int last,
											   int lastOffset); static ProteinRange buildDownstreamOfTerminal(String firstAA, int first, String lastAA, int last); ProteinPointLocation getFirst(); ProteinPointLocation getLast(); int length(); @Override String toHGVSString(); @Override String toHGVSString(AminoAcidCode code); @Override String toString(); @Override int hashCode(); @Override boolean equals(Object obj);  }### Answer:
@Test public void testEquals() { Assert.assertEquals(firstRange, firstRange2); Assert.assertNotEquals(secondRange, firstRange); }