@Override
  public SelType call(String methodName, SelType[] args) {
    if (args.length == 1) {
      if ("dateIntToTs".equals(methodName)) {
        return dateIntToTs(args[0]);
      } else if ("tsToDateInt".equals(methodName)) {
        return tsToDateInt(args[0]);
      }
    } else if (args.length == 2) {
      if ("incrementDateInt".equals(methodName)) {
        return incrementDateInt(args[0], args[1]);
      } else if ("timeoutForDateTimeDeadline".equals(methodName)) {
        return timeoutForDateTimeDeadline(args[0], args[1]);
      } else if ("timeoutForDateIntDeadline".equals(methodName)) {
        return timeoutForDateIntDeadline(args[0], args[1]);
      }
    } else if (args.length == 3) {
      if ("dateIntsBetween".equals(methodName)) {
        return dateIntsBetween(args[0], args[1], args[2]);
      } else if ("intsBetween".equals(methodName)) {
        return intsBetween(args[0], args[1], args[2]);
      }
    } else if (args.length == 5 && "dateIntHourToTs".equals(methodName)) {
      return dateIntHourToTs(args);
    }

    throw new UnsupportedOperationException(
        type()
            + " DO NOT support calling method: "
            + methodName
            + " with args: "
            + Arrays.toString(args));
  }
@Test(expected = UnsupportedOperationException.class)
  public void testCallTimeoutForDateTimeDeadlineInvalid() {
    SelUtilFunc.INSTANCE.call("timeoutForDateTimeDeadline", new SelType[] {SelString.of("1 day")});
  }