### Question:
Quadruple extends Triple<R, S, T> implements Fourth<U>,
                   MappableFourth<U, Quadruple<R, S, T, ?>> { public static <R, S, T, U> Quadruple<R, S, T, U> quadruple(R first, S second, T third, U fourth) { return new Quadruple<R, S, T, U>(first, second, third, fourth); } Quadruple(R first, S second, T third, U fourth); static Quadruple<R, S, T, U> quadruple(R first, S second, T third, U fourth); @Override U getFourth(); @Override Quadruple<A, S, T, U> mapFirst(UnaryFunction<R, A> function); @Override Quadruple<R, A, T, U> mapSecond(UnaryFunction<S, A> function); @Override Quadruple<R, S, A, U> mapThird(UnaryFunction<T, A> function); @Override Quadruple<R, S, T, A> mapFourth(UnaryFunction<U, A> function); @Override Iterable<Object> getValues();  }### Answer:
@Test public void shouldConstructAQuadrupleWithTheSpecifiedValues() throws Exception { String first = "5"; Integer second = 4; Long third = 5L; Character fourth = 'a'; Quadruple<String, Integer, Long, Character> expected = new Quadruple<String, Integer, Long, Character>(first, second, third, fourth); Quadruple<String, Integer, Long, Character> actual = quadruple(first, second, third, fourth); assertThat(actual, is(expected)); }