// RUN: rm -rf %t
// RUN: %clang_cc1 -objcmt-migrate-ns-macros -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11
// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result

typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long NSInteger;
typedef long long int64_t;

typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long NSUInteger;
typedef unsigned long long uint64_t;

#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type
#define DEPRECATED  __attribute__((deprecated))

typedef NS_ENUM(NSInteger, wibble) {
  blah,
  blarg
};

typedef NS_ENUM(NSUInteger, UITableViewCellStyle) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin,
    UIViewAutoresizingFlexibleWidth,
    UIViewAutoresizingFlexibleRightMargin,
    UIViewAutoresizingFlexibleTopMargin,
    UIViewAutoresizingFlexibleHeight,
    UIViewAutoresizingFlexibleBottomMargin
};

typedef NS_ENUM(unsigned int, UIViewAnimationTransition) {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
};

typedef NS_OPTIONS(unsigned int, UITableView) {
    UIViewOne   = 0,
    UIViewTwo   = 1 << 0,
    UIViewThree = 1 << 1,
    UIViewFour  = 1 << 2,
    UIViewFive  = 1 << 3,
    UIViewSix   = 1 << 4,
    UIViewSeven = 1 << 5
};

typedef NS_OPTIONS(NSUInteger, UI) {
  UIOne = 0,
  UITwo = 0x1,
  UIthree = 0x8,
  UIFour = 0x100
};

typedef NS_OPTIONS(unsigned int, UIPOWER2) {
  UIP2One = 0,
  UIP2Two = 0x1,
  UIP2three = 0x8,
  UIP2Four = 0x100
};

enum {
  UNOne,
  UNTwo
};

// Should use NS_ENUM even though it is all power of 2.
typedef NS_ENUM(NSInteger, UIK) {
  UIKOne = 1,
  UIKTwo = 2,
};

typedef NS_ENUM(unsigned int, NSTickMarkPosition) {
    NSTickMarkBelow = 0,
    NSTickMarkAbove = 1,
    NSTickMarkLeft = NSTickMarkAbove,
    NSTickMarkRight = NSTickMarkBelow
};

typedef NS_OPTIONS(NSUInteger, UITableStyle) {
    UIViewNone         = 0x0,
    UIViewMargin       = 0x1,
    UIViewWidth        = 0x2,
    UIViewRightMargin  = 0x3,
    UIViewBottomMargin = 0xbadbeef
};

typedef NS_OPTIONS(NSUInteger, UIStyle) {
    UIView0         = 0,
    UIView1 = 0XBADBEEF
};

typedef NS_ENUM(NSUInteger, NSBitmapImageFileType) {
    NSTIFFFileType,
    NSBMPFileType,
    NSGIFFileType,
    NSJPEGFileType,
    NSPNGFileType,
    NSJPEG2000FileType
};

typedef NS_ENUM(NSUInteger, NSAlertStyle) {
    NSWarningAlertStyle = 0,
    NSInformationalAlertStyle = 1,
    NSCriticalAlertStyle = 2
};

enum {
    D_NSTIFFFileType,
    D_NSBMPFileType,
    D_NSGIFFileType,
    D_NSJPEGFileType,
    D_NSPNGFileType,
    D_NSJPEG2000FileType
};
typedef NSUInteger D_NSBitmapImageFileType DEPRECATED;

typedef enum  {
    D_NSTickMarkBelow = 0,
    D_NSTickMarkAbove = 1
} D_NSTickMarkPosition DEPRECATED;


#define NS_ENUM_AVAILABLE(X,Y)


typedef NS_OPTIONS(NSUInteger, NSFOptions) {
    NSFStrongMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 0),       
    NSFOpaqueMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 0),
    NSFMallocMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 0),       
    NSFMachVirtualMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 0),
    NSFWeakMemory NS_ENUM_AVAILABLE(10_8, 6_0) = (5UL << 0),         

    NSFObjectPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 8),         
    NSFOpaquePersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 8),         
    NSFObjectPointerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 8),  
    NSFCStringPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 8),        
    NSFStructPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 8),         
    NSFIntegerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (5UL << 8),        
    NSFCopyIn NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 16),      
};

typedef NS_ENUM(unsigned int, UIP) {
  UIP0One = 0,
  UIP0Two = 1,
  UIP0Three = 2,
  UIP0Four = 10,
  UIP0Last = 0x100
};

typedef NS_OPTIONS(unsigned int, UIP_3) {
  UIPZero = 0x0,
  UIPOne = 0x1,
  UIPTwo = 0x2,
  UIP10 = 0x10,
  UIPHundred = 0x100
};

typedef NS_ENUM(unsigned int, UIP4_3) {
  UIP4Zero = 0x0,
  UIP4One = 0x1,
  UIP4Two = 0x2,
  UIP410 = 0x10,
  UIP4Hundred = 100
};

typedef NS_OPTIONS(unsigned int, UIP5_3) {
  UIP5Zero = 0x0,
  UIP5Two = 0x2,
  UIP510 = 0x3,
  UIP5Hundred = 0x4
};

typedef NS_ENUM(unsigned int, UIP6_3) {
  UIP6Zero = 0x0,
  UIP6One = 0x1,
  UIP6Two = 0x2,
  UIP610 = 10,
  UIP6Hundred = 0x100
};

typedef NS_ENUM(unsigned int, UIP7_3) {
  UIP7Zero = 0x0,
  UIP7One = 1,
  UIP7Two = 0x2,
  UIP710 = 10,
  UIP7Hundred = 100
};


typedef NS_ENUM(unsigned int, UIP8_3) {
  Random = 0,
  Random1 = 2,
  Random2 = 4,
  Random3 = 0x12345,
  Random4 = 0x3444444,
  Random5 = 0xbadbeef,
  Random6
};

// rdar://15200602
#define NS_AVAILABLE_MAC(X)  __attribute__((availability(macosx,introduced=X)))
#define NS_ENUM_AVAILABLE_MAC(X) __attribute__((availability(macosx,introduced=X)))

typedef NS_ENUM(NSInteger, NSModalResponse) {
    NSModalResponseStop                 = (-1000), // Also used as the default response for sheets
    NSModalResponseAbort                = (-1001),
    NSModalResponseContinue             = (-1002), 
} NS_ENUM_AVAILABLE_MAC(10.9);

// rdar://15201056
typedef NSUInteger FarFarAwayOptions;

// rdar://15200915
typedef NS_OPTIONS(NSUInteger, FarAwayOptions) {
  FarAway1    = 1 << 1,
  FarAway2    = 1 << 2
};
typedef NS_OPTIONS(NSUInteger, NSWorkspaceLaunchOptions) {
     NSWorkspaceLaunchAndPrint =                 0x00000002,
     NSWorkspaceLaunchWithErrorPresentation    = 0x00000040,
     NSWorkspaceLaunchInhibitingBackgroundOnly = 0x00000080,
     NSWorkspaceLaunchWithoutAddingToRecents   = 0x00000100,
     NSWorkspaceLaunchWithoutActivation        = 0x00000200,
     NSWorkspaceLaunchAsync                    = 0x00010000,
     NSWorkspaceLaunchAllowingClassicStartup   = 0x00020000,
     NSWorkspaceLaunchPreferringClassic        = 0x00040000,
     NSWorkspaceLaunchNewInstance              = 0x00080000,
     NSWorkspaceLaunchAndHide                  = 0x00100000,
     NSWorkspaceLaunchAndHideOthers            = 0x00200000,
     NSWorkspaceLaunchDefault = NSWorkspaceLaunchAsync | 
     NSWorkspaceLaunchAllowingClassicStartup
};

typedef NS_OPTIONS(NSUInteger, NSExcludeOptions) {
    NSExcludeQuickDrawElementsIconCreationOption    = 1 << 1,
    NSExclude10_4ElementsIconCreationOption         = 1 << 2
};

typedef NS_OPTIONS(NSUInteger, NSExcludeCreationOption) {
    NSExcludeQuickDrawElementsCreationOption    = 1 << 1,
    NSExclude10_4ElementsCreationOption         = 1 << 2
};


typedef NS_OPTIONS(NSUInteger, NSExcludeIconOptions) {
    NSExcludeQuickDrawElementsIconOption    = 1 << 1,
    NSExclude10_4ElementsIconOption         = 1 << 2
};

@interface INTF {
  NSExcludeIconOptions I1;
  NSExcludeIconOptions I2;
}
@end

enum {
  FarFarAway1    = 1 << 1,
  FarFarAway2    = 1 << 2
};

// rdar://15200915
typedef NS_OPTIONS(NSUInteger, NSWindowOcclusionState) {
    NSWindowOcclusionStateVisible = 1UL << 1,
};

typedef NS_ENUM(NSUInteger, NSWindowNumberListOptions) {
    NSWindowCloseButton,
    NSWindowMiniaturizeButton,
    NSWindowZoomButton,
    NSWindowToolbarButton,
    NSWindowDocumentIconButton
};

typedef NS_ENUM(NSUInteger, NSSelectionDirection) {
    NSDirectSelection = 0,
    NSSelectingNext,
    NSSelectingPrevious
};

// standard window buttons

// rdar://18262255
typedef NS_ENUM(NSUInteger, Thing) {
   ThingOne,
   ThingTwo,
   ThingThree,
};

// rdar://18498539
typedef NS_ENUM(unsigned int, NumericEnum) {
    one = 1
};

typedef NS_ENUM(unsigned int, NumericEnum2) {
    Two = 2
};

typedef NS_ENUM(unsigned int, NumericEnum3) {
    Three = 3
};

typedef NS_OPTIONS(unsigned int, NumericEnum4) {
    Four = 4
};

// rdar://18532199
typedef NS_ENUM(int8_t, MyEnumeratedType)
{
  UI8one = 1
};


typedef NS_OPTIONS(uint16_t, UI16) {
  UI16One = 0,
  UI16Two = 0x1,
  UI16three = 0x8,
  UI16Four = 0x100
};

typedef NS_ENUM(uint32_t, UI32TableViewCellStyle) {
    UI32ViewAutoresizingNone                 = 0,
    UI32ViewAutoresizingFlexibleLeftMargin,
    UI32ViewAutoresizingFlexibleWidth,
    UI32ViewAutoresizingFlexibleRightMargin,
    UI32ViewAutoresizingFlexibleTopMargin,
    UI32ViewAutoresizingFlexibleHeight,
    UI32ViewAutoresizingFlexibleBottomMargin
};

typedef NS_ENUM(uint8_t, UI8Type)
{
        UIU8one = 1
};

// rdar://19352510
typedef NS_ENUM(NSInteger, MyEnum) {zero};

typedef NS_ENUM(NSUInteger, MyEnumNSUInteger) {two};

typedef NS_ENUM(int, MyEnumint) {three, four};

typedef NS_ENUM(unsigned long, MyEnumlonglong) {five};

typedef NS_ENUM(unsigned long long, MyEnumunsignedlonglong) {
  ll1,
  ll2= 0xff,
  ll3,
  ll4
};

// rdar://19994496
typedef NS_ENUM(int8_t, MyOneEnum) {int8_one};

typedef NS_ENUM(int16_t, Myint16_tEnum) {
          int16_t_one,
          int16_t_two };
