### Question:
Tuple4 extends Tuple3<T1, T2, T3> implements Tuple { public static <T1, T2, T3, T4> Tuple4<T1, T2, T3, T4> of(T1 a, T2 b, T3 c, T4 d) { return new Tuple4<>(a, b, c, d); } Tuple4(T1 a, T2 b, T3 c, T4 d); static Tuple4<T1, T2, T3, T4> of(T1 a, T2 b, T3 c, T4 d); T4 getItem4(); @Override Object nth(int index); @Override Tuple4<T, T2, T3, T4> mapItem1(Function<T1, T> mapper); @Override Tuple4<T1, T, T3, T4> mapItem2(Function<T2, T> mapper); @Override Tuple4<T1, T2, T, T4> mapItem3(Function<T3, T> mapper); Tuple4<T1, T2, T3, T> mapItem4(Function<T4, T> mapper); @Override List<Object> asList(); @Override int size(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void assertNullValues() { assertThat(Tuple4.of(null, 1, 2, 3)).containsExactly(null, 1, 2, 3); assertThat(Tuple4.of(1, null, 2, 3)).containsExactly(1, null, 2, 3); assertThat(Tuple4.of(1, 2, null, 3)).containsExactly(1, 2, null, 3); assertThat(Tuple4.of(1, 2, 3, null)).containsExactly(1, 2, 3, null); assertThat(Tuple4.of(null, null, null, null)).containsExactly(null, null, null, null); }
@Test public void testEquality() { assertThat(someTuple).isEqualTo(someTuple); assertThat(someTuple).isNotEqualTo(Tuple4.of(1, 2, 4, 10)); assertThat(someTuple).isNotEqualTo("not a tuple"); assertThat(someTuple).isEqualTo(Tuple4.of(1, 2, 3, 4)); }