ColumnIO(Type type, GroupColumnIO parent, int index) {
    this.type = type;
    this.parent = parent;
    this.index = index;
    this.name = type.getName();
  }
@Test
  public void testColumnIO() {
    log(schema);
    log("r1");
    log(r1);
    log("r2");
    log(r2);

    MemPageStore memPageStore = new MemPageStore(2);
    ColumnWriteStoreV1 columns = newColumnWriteStore(memPageStore);

    ColumnIOFactory columnIOFactory = new ColumnIOFactory(true);
    {
      MessageColumnIO columnIO = columnIOFactory.getColumnIO(schema);
      log(columnIO);
      RecordConsumer recordWriter = columnIO.getRecordWriter(columns);
      GroupWriter groupWriter = new GroupWriter(recordWriter, schema);
      groupWriter.write(r1);
      groupWriter.write(r2);

      recordWriter.flush();
      columns.flush();
      log(columns);
      log("=========");

      RecordReaderImplementation<Group> recordReader = getRecordReader(columnIO, schema, memPageStore);

      validateFSA(expectedFSA, columnIO, recordReader);

      List<Group> records = new ArrayList<>();
      records.add(recordReader.read());
      records.add(recordReader.read());

      int i = 0;
      for (Group record : records) {
        log("r" + (++i));
        log(record);
      }
      assertEquals(
          "deserialization does not display the same result",
          r1.toString(),
          records.get(0).toString());
      assertEquals(
          "deserialization does not display the same result",
          r2.toString(),
          records.get(1).toString());
    }
    {
      MessageColumnIO columnIO2 = columnIOFactory.getColumnIO(schema2);

      List<Group> records = new ArrayList<>();
      RecordReaderImplementation<Group> recordReader = getRecordReader(columnIO2, schema2, memPageStore);

      validateFSA(expectedFSA2, columnIO2, recordReader);

      records.add(recordReader.read());
      records.add(recordReader.read());

      int i = 0;
      for (Group record : records) {
        log("r" + (++i));
        log(record);
      }
      assertEquals(
          "deserialization does not display the expected result",
          pr1.toString(),
          records.get(0).toString());
      assertEquals(
          "deserialization does not display the expected result",
          pr2.toString(),
          records.get(1).toString());
    }
  }