### Question:
CatalogUtil { public static DataType [] newSimpleDataTypeArray(Type... types) { DataType [] dataTypes = new DataType[types.length]; for (int i = 0; i < types.length; i++) { dataTypes[i] = newSimpleDataType(types[i]); } return dataTypes; }  static String getBackwardCompitableDataFormat(String dataFormat); static TableMeta newTableMeta(String dataFormat, TajoConf conf); static TableMeta newTableMeta(String dataFormat, KeyValueSet options); static TableDesc newTableDesc(String tableName, Schema schema, TableMeta meta, Path path); static TableDesc newTableDesc(TableDescProto proto); static PartitionMethodDesc newPartitionMethodDesc(CatalogProtos.PartitionMethodProto proto); static SchemaProto getQualfiedSchema(String tableName, SchemaProto schema); static DataType newDataType(Type type, String code); static DataType newDataType(Type type, String code, int len); static DataType newSimpleDataType(Type type); static DataType newRecordType(int nestedFieldNum); static DataType [] newSimpleDataTypeArray(Type... types); static DataType newDataTypeWithLen(Type type, int length); static String columnToDDLString(Column column); static boolean isArrayType(TajoDataTypes.Type type); static boolean isMatchedFunction(List<DataType> definedTypes, List<DataType> givenTypes); static boolean checkIfMatchedNonVarLengthFunction(List<DataType> definedTypes, List<DataType> givenTypes,
                                                           int n, boolean lastArrayCompatible); static boolean checkIfCompatibleIncludingArray(Type defined, Type given); static boolean checkIfVariableLengthParamDefinition(List<DataType> definedTypes); static Type getPrimitiveTypeOf(Type type); static boolean isCompatibleType(final Type definedType, final Type givenType); static DataType getWidestType(DataType...types); static TableIdentifierProto buildTableIdentifier(String databaseName, String tableName); static void closeQuietly(Connection conn); static void closeQuietly(Statement stmt); static void closeQuietly(ResultSet res); static void closeQuietly(Statement stmt, ResultSet res); static AlterTableDesc renameColumn(String tableName, String oldColumName, String newColumName); static AlterTableDesc renameTable(String tableName, String newTableName, @Nullable Path newTablePath); static AlterTableDesc addNewColumn(String tableName, Column column); static AlterTableDesc setProperty(String tableName, KeyValueSet params); static AlterTableDesc unsetProperty(String tableName, String[] propertyKeys); static AlterTableDesc addOrDropPartition(String tableName, String[] columns, String[] values, @Nullable
    String path, AlterTableType alterTableType); static AlterTableDesc addOrDropPartition(String tableName, String[] columns, String[] values,
    @Nullable String path, AlterTableType alterTableType, long numBytes); static Pair<List<PartitionKeyProto>, String> getPartitionKeyNamePair(String[] columns, String[] values); static Direction getCastingDirection(Type lhs, Type rhs); static KeyValueSet newDefaultProperty(String dataFormat, TajoConf conf); static String getUnifiedSimpleColumnName(Schema originalSchema, String[] columnNames); static final Map<Type, Map<Type, Type>> OPERATION_CASTING_MAP; static final String BLOCK_SIZE; static final String PAGE_SIZE; static final String COMPRESSION; static final String ENABLE_DICTIONARY; static final String VALIDATION; }### Answer:
@Test public final void testGetCanonicalName() { String canonical = FunctionUtil.buildSimpleFunctionSignature("sum", CatalogUtil.newSimpleDataTypeArray(Type.INT4, Type.INT8)); assertEquals("sum(int4,int8)", canonical); }