@Test
 public void schema() throws Exception {
   EvalFunc<DataBag> func = new FrequentStringsSketchToEstimates();
   Schema schema = func.outputSchema(null);
   Assert.assertNotNull(schema);
   Assert.assertEquals(schema.size(), 1);
   Assert.assertEquals(schema.getField(0).type, DataType.BAG);
   Assert.assertEquals(schema.getField(0).schema.size(), 1);
   Assert.assertEquals(schema.getField(0).schema.getField(0).type, DataType.TUPLE);
   Assert.assertEquals(schema.getField(0).schema.getField(0).schema.size(), 4);
   Assert.assertEquals(
       schema.getField(0).schema.getField(0).schema.getField(0).type, DataType.CHARARRAY);
   Assert.assertEquals(
       schema.getField(0).schema.getField(0).schema.getField(1).type, DataType.LONG);
   Assert.assertEquals(
       schema.getField(0).schema.getField(0).schema.getField(2).type, DataType.LONG);
   Assert.assertEquals(
       schema.getField(0).schema.getField(0).schema.getField(3).type, DataType.LONG);
 }
  @SuppressWarnings("null")
  @Test
  public void outputSchemaTest() throws IOException {
    EvalFunc<String> udf = new SketchToString();

    Schema inputSchema = null;
    Schema.FieldSchema inputFieldSchema = new Schema.FieldSchema("Sketch", DataType.BYTEARRAY);

    Schema nullOutputSchema = null;

    Schema outputSchema = null;
    Schema.FieldSchema outputOuterFs0 = null;

    Schema outputInnerSchema = null;
    Schema.FieldSchema outputInnerFs0 = null;

    inputSchema = new Schema(inputFieldSchema);

    nullOutputSchema = udf.outputSchema(null);

    outputSchema = udf.outputSchema(inputSchema);
    outputOuterFs0 = outputSchema.getField(0);

    outputInnerSchema = outputOuterFs0.schema;
    outputInnerFs0 = outputInnerSchema.getField(0);

    Assert.assertNull(nullOutputSchema, "Should be null");
    Assert.assertNotNull(outputOuterFs0, "outputSchema.getField(0) schema may not be null");

    String expected = "tuple";
    String result = DataType.findTypeName(outputOuterFs0.type);
    Assert.assertEquals(result, expected);

    expected = "chararray";
    Assert.assertNotNull(outputInnerFs0, "innerSchema.getField(0) schema may not be null");
    result = DataType.findTypeName(outputInnerFs0.type);
    Assert.assertEquals(result, expected);

    // print schemas
    // @formatter:off
    StringBuilder sb = new StringBuilder();
    sb.append("input schema: ")
        .append(inputSchema)
        .append(LS)
        .append("output schema: ")
        .append(outputSchema)
        .append(LS)
        .append("outputOuterFs: ")
        .append(outputOuterFs0)
        .append(", type: ")
        .append(DataType.findTypeName(outputOuterFs0.type))
        .append(LS)
        .append("outputInnerSchema: ")
        .append(outputInnerSchema)
        .append(LS)
        .append("outputInnerFs0: ")
        .append(outputInnerFs0)
        .append(", type: ")
        .append(DataType.findTypeName(outputInnerFs0.type))
        .append(LS);
    println(sb.toString());
    // @formatter:on
    // end print schemas
  }