@Test
  public void testSyncWith() {
    final Integer[] x = new Integer[] {1, 2, 3};
    final String[] y = new String[] {"1", "2", "4"};
    final ArrayList<String> results = new ArrayList<>();

    ArrayExtensions.syncWith(
        x,
        y,
        new Predicate2<Integer, String>() {

          @Override
          public boolean value_value_(Integer o, String n) {
            return o.toString().equals(n);
          }
        },
        new Block2<Object, Integer, String>() {

          @Override
          public Object value_value_(Integer o, String n) {
            results.add("Then old:" + o + " new: " + n);
            return null;
          }
        },
        new Block1<Object, String>() {

          @Override
          public Object value_(String n) {
            results.add("New: " + n);
            return null;
          }
        },
        new Block1<Object, Integer>() {

          @Override
          public Object value_(Integer o) {
            results.add("Old: " + o);
            return null;
          }
        });
    String[] resultArray = results.toArray(new String[results.size()]);
    assertTrue(
        ArrayExtensions.isSameAs_(
            resultArray,
            new String[] {"Then old:1 new: 1", "Then old:2 new: 2", "Old: 3", "New: 4"}));
  }