### Question:
FrameTuple implements Tuple, Cloneable { public FrameTuple() {} FrameTuple();  FrameTuple(Tuple left, Tuple right); void set(Tuple left, Tuple right); FrameTuple setLeft(Tuple left); FrameTuple setRight(Tuple right); @Override int size(); @Override boolean contains(int fieldId); @Override boolean isBlank(int fieldid); @Override boolean isBlankOrNull(int fieldid); @Override void insertTuple(int fieldId, Tuple tuple); @Override void clear(); @Override void put(int fieldId, Datum value); @Override void put(Datum[] values); @Override TajoDataTypes.Type type(int fieldId); @Override int size(int fieldId); @Override void clearOffset(); @Override void setOffset(long offset); @Override long getOffset(); @Override Datum asDatum(int fieldId); @Override boolean getBool(int fieldId); @Override byte getByte(int fieldId); @Override char getChar(int fieldId); @Override byte [] getBytes(int fieldId); @Override byte[] getTextBytes(int fieldId); @Override short getInt2(int fieldId); @Override int getInt4(int fieldId); @Override long getInt8(int fieldId); @Override float getFloat4(int fieldId); @Override double getFloat8(int fieldId); @Override String getText(int fieldId); @Override TimeMeta getTimeDate(int fieldId); @Override ProtobufDatum getProtobufDatum(int fieldId); @Override IntervalDatum getInterval(int fieldId); @Override char [] getUnicodeChars(int fieldId); @Override Tuple clone(); @Override Datum[] getValues(); String toString();  }### Answer:
@Test public final void testFrameTuple() { Tuple frame = new FrameTuple(tuple1, tuple2); assertEquals(20, frame.size()); for (int i = 0; i < frame.size(); i++) { assertTrue(frame.contains(i)); } assertEquals(23L, frame.getInt8(5)); assertEquals(23L, frame.getInt8(15)); assertEquals("hyunsik", frame.getText(8)); assertEquals("hyunsik", frame.getText(19)); }