### Question:
BaseUInt64Value implements UInt64Value<T> { @Override public T divide(T value) { return divide(value.toUInt64()); } protected  BaseUInt64Value(UInt64 value, Function<UInt64, T> ctor); protected  BaseUInt64Value(long value, Function<UInt64, T> ctor); protected  BaseUInt64Value(BigInteger value, Function<UInt64, T> ctor); @Override T add(T value); T add(UInt64 value); @Override T add(long value); @Override T addMod(T value, UInt64 modulus); T addMod(UInt64 value, UInt64 modulus); @Override T addMod(long value, UInt64 modulus); @Override T addMod(long value, long modulus); @Override T subtract(T value); T subtract(UInt64 value); @Override T subtract(long value); @Override T multiply(T value); T multiply(UInt64 value); @Override T multiply(long value); @Override T multiplyMod(T value, UInt64 modulus); T multiplyMod(UInt64 value, UInt64 modulus); @Override T multiplyMod(long value, UInt64 modulus); @Override T multiplyMod(long value, long modulus); @Override T divide(T value); T divide(UInt64 value); @Override T divide(long value); @Override T pow(UInt64 exponent); @Override T pow(long exponent); @Override T mod(UInt64 modulus); @Override T mod(long modulus); @Override int compareTo(T other); int compareTo(UInt64 other); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); @Override UInt64 toUInt64(); @Override Bytes toBytes(); @Override Bytes toMinimalBytes();  }### Answer:
@Test void shouldThrowForDivideByZero() { Throwable exception = assertThrows(ArithmeticException.class, () -> v(5).divide(v(0))); assertEquals("divide by zero", exception.getMessage()); }
@Test void shouldThrowForDivideUInt64ByZero() { Throwable exception = assertThrows(ArithmeticException.class, () -> v(5).divide(UInt64.ZERO)); assertEquals("divide by zero", exception.getMessage()); }
@Test void shouldThrowForDivideLongByZero() { Throwable exception = assertThrows(ArithmeticException.class, () -> v(5).divide(0)); assertEquals("divide by zero", exception.getMessage()); }
@Test void shouldThrowForDivideLongByNegative() { Throwable exception = assertThrows(ArithmeticException.class, () -> v(5).divide(-5)); assertEquals("divide unsigned by negative", exception.getMessage()); }