public static <T> MutationDetector forValueWithCoder(T value, Coder<T> coder)
      throws CoderException {
    if (value == null) {
      return noopMutationDetector();
    } else {
      return new CodedValueMutationDetector<>(value, coder);
    }
  }
@Test
  public void testMutationBasedOnStructuralValue() throws Exception {
    AtomicInteger value = new AtomicInteger();
    MutationDetector detector =
        MutationDetectors.forValueWithCoder(value, new ForSDKMutationDetectionTestCoder());
    // Even though we modified the value, we are relying on the fact that the structural
    // value will be used to compare equality
    value.incrementAndGet();
    detector.verifyUnmodified();
  }