/** Copyright (C) 2008, International Business Machines Corporation and Others. All Rights Reserved. **/

/* NOTE: this file is AUTOMATICALLY GENERATED by gentest. */

package com.ibm.icu.dev.test.util;

public class DebugUtilitiesData extends Object {
    public static final String ICU4C_VERSION="4.0";
    public static final int UDebugEnumType = 0;
    public static final int UCalendarDateFields = 1;
    public static final int UCalendarMonths = 2;
    public static final int UDateFormatStyle = 3;
    public static final String [] TYPES = { 
        "UDebugEnumType", /* 0 */
        "UCalendarDateFields", /* 1 */
        "UCalendarMonths", /* 2 */
        "UDateFormatStyle", /* 3 */
    };

    public static final String [][] NAMES = { 
        /* UDebugEnumType, 0 */
        { 
           "UDebugEnumType", /* 0 */ 
           "UCalendarDateFields", /* 1 */ 
           "UCalendarMonths", /* 2 */ 
           "UDateFormatStyle", /* 3 */ 
        },
        /* UCalendarDateFields, 1 */
        { 
           "ERA", /* 0 */ 
           "YEAR", /* 1 */ 
           "MONTH", /* 2 */ 
           "WEEK_OF_YEAR", /* 3 */ 
           "WEEK_OF_MONTH", /* 4 */ 
           "DATE", /* 5 */ 
           "DAY_OF_YEAR", /* 6 */ 
           "DAY_OF_WEEK", /* 7 */ 
           "DAY_OF_WEEK_IN_MONTH", /* 8 */ 
           "AM_PM", /* 9 */ 
           "HOUR", /* 10 */ 
           "HOUR_OF_DAY", /* 11 */ 
           "MINUTE", /* 12 */ 
           "SECOND", /* 13 */ 
           "MILLISECOND", /* 14 */ 
           "ZONE_OFFSET", /* 15 */ 
           "DST_OFFSET", /* 16 */ 
           "YEAR_WOY", /* 17 */ 
           "DOW_LOCAL", /* 18 */ 
           "EXTENDED_YEAR", /* 19 */ 
           "JULIAN_DAY", /* 20 */ 
           "MILLISECONDS_IN_DAY", /* 21 */ 
           "IS_LEAP_MONTH", /* 22 */ 
        },
        /* UCalendarMonths, 2 */
        { 
           "JANUARY", /* 0 */ 
           "FEBRUARY", /* 1 */ 
           "MARCH", /* 2 */ 
           "APRIL", /* 3 */ 
           "MAY", /* 4 */ 
           "JUNE", /* 5 */ 
           "JULY", /* 6 */ 
           "AUGUST", /* 7 */ 
           "SEPTEMBER", /* 8 */ 
           "OCTOBER", /* 9 */ 
           "NOVEMBER", /* 10 */ 
           "DECEMBER", /* 11 */ 
           "UNDECIMBER", /* 12 */ 
        },
        /* UDateFormatStyle, 3 */
        { 
           "FULL", /* 0 */ 
           "LONG", /* 1 */ 
           "MEDIUM", /* 2 */ 
           "SHORT", /* 3 */ 
        },
    };

    public static final int [][] VALUES = { 
        /* UDebugEnumType, 0 */
        { 
           0, /* UDebugEnumType */
           1, /* UCalendarDateFields */
           2, /* UCalendarMonths */
           3, /* UDateFormatStyle */
        },
        /* UCalendarDateFields, 1 */
        { 
           com.ibm.icu.util.Calendar.ERA, /* 0 */
           com.ibm.icu.util.Calendar.YEAR, /* 1 */
           com.ibm.icu.util.Calendar.MONTH, /* 2 */
           com.ibm.icu.util.Calendar.WEEK_OF_YEAR, /* 3 */
           com.ibm.icu.util.Calendar.WEEK_OF_MONTH, /* 4 */
           com.ibm.icu.util.Calendar.DATE, /* 5 */
           com.ibm.icu.util.Calendar.DAY_OF_YEAR, /* 6 */
           com.ibm.icu.util.Calendar.DAY_OF_WEEK, /* 7 */
           com.ibm.icu.util.Calendar.DAY_OF_WEEK_IN_MONTH, /* 8 */
           com.ibm.icu.util.Calendar.AM_PM, /* 9 */
           com.ibm.icu.util.Calendar.HOUR, /* 10 */
           com.ibm.icu.util.Calendar.HOUR_OF_DAY, /* 11 */
           com.ibm.icu.util.Calendar.MINUTE, /* 12 */
           com.ibm.icu.util.Calendar.SECOND, /* 13 */
           com.ibm.icu.util.Calendar.MILLISECOND, /* 14 */
           com.ibm.icu.util.Calendar.ZONE_OFFSET, /* 15 */
           com.ibm.icu.util.Calendar.DST_OFFSET, /* 16 */
           com.ibm.icu.util.Calendar.YEAR_WOY, /* 17 */
           com.ibm.icu.util.Calendar.DOW_LOCAL, /* 18 */
           com.ibm.icu.util.Calendar.EXTENDED_YEAR, /* 19 */
           com.ibm.icu.util.Calendar.JULIAN_DAY, /* 20 */
           com.ibm.icu.util.Calendar.MILLISECONDS_IN_DAY, /* 21 */
           com.ibm.icu.util.ChineseCalendar.IS_LEAP_MONTH, /* 22 */
        },
        /* UCalendarMonths, 2 */
        { 
           com.ibm.icu.util.Calendar.JANUARY, /* 0 */
           com.ibm.icu.util.Calendar.FEBRUARY, /* 1 */
           com.ibm.icu.util.Calendar.MARCH, /* 2 */
           com.ibm.icu.util.Calendar.APRIL, /* 3 */
           com.ibm.icu.util.Calendar.MAY, /* 4 */
           com.ibm.icu.util.Calendar.JUNE, /* 5 */
           com.ibm.icu.util.Calendar.JULY, /* 6 */
           com.ibm.icu.util.Calendar.AUGUST, /* 7 */
           com.ibm.icu.util.Calendar.SEPTEMBER, /* 8 */
           com.ibm.icu.util.Calendar.OCTOBER, /* 9 */
           com.ibm.icu.util.Calendar.NOVEMBER, /* 10 */
           com.ibm.icu.util.Calendar.DECEMBER, /* 11 */
           com.ibm.icu.util.Calendar.UNDECIMBER, /* 12 */
        },
        /* UDateFormatStyle, 3 */
        { 
           0, /* FULL */
           1, /* LONG */
           2, /* MEDIUM */
           3, /* SHORT */
        },
    };

}
