// RUN: %empty-directory(%t)
// RUN: %gyb %s -o %t/bridging-nsnumber-and-nsvalue.swift
// RUN: %target-swift-frontend -typecheck -verify %t/bridging-nsnumber-and-nsvalue.swift -swift-version 4

// REQUIRES: objc_interop

import Foundation
import CoreGraphics

%{
coercionTypes = {
  'NSNumber': [
    'Int',
    'UInt',
    'Int64',
    'UInt64',
    'Int32',
    'UInt32',
    'Int16',
    'UInt16',
    'Int8',
    'UInt8',
    'Float',
    'Double',
    'CGFloat',
  ],
  'NSValue': [
    'CGRect',
    'CGPoint',
    'CGSize',
  ],
}
}%

// For testing purposes, make everything Hashable. Don't do this at home
extension Equatable {
  public static func ==(x: Self, y: Self) -> Bool {
    fatalError("hella cray")
  }
}
extension Hashable {
  public func hash(into hasher: inout Hasher) {
    fatalError("trill hiphy")
  }
}

extension CGSize: Hashable {}
extension CGPoint: Hashable {}
extension CGRect: Hashable {}

% for ObjectType, ValueTypes in coercionTypes.items():
func bridgeNSNumberBackToSpecificType(object: ${ObjectType},
                                      optional: ${ObjectType}?,
                                      array: [${ObjectType}],
                                      dictKeys: [${ObjectType}: Any],
                                      dictValues: [AnyHashable: ${ObjectType}],
                                      dictBoth: [${ObjectType}: ${ObjectType}],
                                      set: Set<${ObjectType}>) {
%   for Type in ValueTypes:
  _ = object as ${Type} // expected-error{{use 'as!'}}
  _ = object is ${Type}
  _ = object as? ${Type}
  _ = object as! ${Type}

  _ = optional as ${Type}? // expected-error{{use 'as!'}}
  _ = optional is ${Type}?
  _ = optional as? ${Type}?
  _ = optional as! ${Type}?

  _ = optional as ${Type} // expected-error{{use 'as!'}}
  _ = optional is ${Type}
  _ = optional as? ${Type}
  _ = optional as! ${Type}

  _ = array as [${Type}] // expected-error{{use 'as!'}}
  _ = array is [${Type}]
  _ = array as? [${Type}]
  _ = array as! [${Type}]

  _ = dictKeys as [${Type}: Any] // expected-error{{use 'as!'}}
  _ = dictKeys is [${Type}: Any]
  _ = dictKeys as? [${Type}: Any]
  _ = dictKeys as! [${Type}: Any]

  _ = dictKeys as [${Type}: AnyObject] // expected-error{{use 'as!'}}
  _ = dictKeys is [${Type}: AnyObject]
  _ = dictKeys as? [${Type}: AnyObject]
  _ = dictKeys as! [${Type}: AnyObject]

  _ = dictValues as [AnyHashable: ${Type}] // expected-error{{use 'as!'}}
  _ = dictValues is [AnyHashable: ${Type}]
  _ = dictValues as? [AnyHashable: ${Type}]
  _ = dictValues as! [AnyHashable: ${Type}]

  _ = dictValues as [NSObject: ${Type}] // expected-error{{use 'as!'}}
  _ = dictValues is [NSObject: ${Type}]
  _ = dictValues as? [NSObject: ${Type}]
  _ = dictValues as! [NSObject: ${Type}]

  _ = dictBoth as [${ObjectType}: ${Type}] // expected-error{{use 'as!'}}
  _ = dictBoth is [${ObjectType}: ${Type}]
  _ = dictBoth as? [${ObjectType}: ${Type}]
  _ = dictBoth as! [${ObjectType}: ${Type}]

  _ = dictBoth as [${Type}: ${ObjectType}] // expected-error{{use 'as!'}}
  _ = dictBoth is [${Type}: ${ObjectType}]
  _ = dictBoth as? [${Type}: ${ObjectType}]
  _ = dictBoth as! [${Type}: ${ObjectType}]

  _ = dictBoth as [${Type}: ${Type}] // expected-error{{use 'as!'}}
  _ = dictBoth is [${Type}: ${Type}]
  _ = dictBoth as? [${Type}: ${Type}]
  _ = dictBoth as! [${Type}: ${Type}]

  _ = set as Set<${Type}> // expected-error{{use 'as!'}}
  _ = set is Set<${Type}>
  _ = set as? Set<${Type}>
  _ = set as! Set<${Type}>
%   end

  _ = object is String // expected-warning{{always fails}}
  _ = object as? String // expected-warning{{always fails}}
  _ = object as! String // expected-warning{{always fails}}
}
% end
