// RUN: rm -rf %t && mkdir -p %t && %gyb %s -o %t/main.swift
// RUN: %line-directive %t/main.swift -- %target-swift-frontend -typecheck -verify -swift-version 3 %t/main.swift

func testUnaryMinusInUnsigned() {
  var a: UInt8 = -(1) // expected-error {{cannot convert value of type 'Int' to specified type 'UInt8'}} expected-note * {{}} expected-warning * {{}}

  var b: UInt16 = -(1) // expected-error {{cannot convert value of type 'Int' to specified type 'UInt16'}} expected-note * {{}} expected-warning * {{}}

  var c: UInt32 = -(1) // expected-error {{cannot convert value of type 'Int' to specified type 'UInt32'}} expected-note * {{}} expected-warning * {{}}

  var d: UInt64 = -(1) // expected-error {{cannot convert value of type 'Int' to specified type 'UInt64'}} expected-note * {{}} expected-warning * {{}}
}

// Int and UInt are not identical to any fixed-size integer type
var i   :  Int   = 0
var i64 :  Int64 = i // expected-error {{}}
var i32 :  Int32 = i // expected-error {{}}
var i16 :  Int16 = i // expected-error {{}}
var i8  :  Int8  = i // expected-error {{}}

var u   : UInt   = 0
var u64 : UInt64 = u // expected-error {{}}
var u32 : UInt32 = u // expected-error {{}}
var u16 : UInt16 = u // expected-error {{}}
var u8  : UInt8  = u // expected-error {{}}

func expectSameType<T>(_: T.Type, _: T.Type) {}

func test_truncatingBitPatternAPIIsStableAcrossPlatforms() {
  // Audit and update this test when adding new integer types.
  expectSameType(Int64.self, IntMax.self)
  expectSameType(UInt64.self, UIntMax.self)

  _ = UInt8(truncatingBitPattern: UInt(0))
  _ = UInt16(truncatingBitPattern: UInt(0))
  _ = UInt32(truncatingBitPattern: UInt(0))
  UInt64(truncatingBitPattern: UInt(0)) // expected-error {{argument labels '(truncatingBitPattern:)' do not match any available overloads}}
// expected-note @-1 {{overloads for 'UInt64' exist with these partially matching parameter lists}}
  UInt(truncatingBitPattern: UInt(0))   // expected-error {{}} expected-note * {{}}

  _ = Int8(truncatingBitPattern: UInt(0))
  _ = Int16(truncatingBitPattern: UInt(0))
  _ = Int32(truncatingBitPattern: UInt(0))
  Int64(truncatingBitPattern: UInt(0)) // expected-error {{argument labels '(truncatingBitPattern:)' do not match any available overloads}}
// expected-note @-1 {{overloads for 'Int64' exist with}}
  Int(truncatingBitPattern: UInt(0))   // expected-error {{}} expected-note * {{}}

  _ = UInt8(truncatingBitPattern: Int(0))
  _ = UInt16(truncatingBitPattern: Int(0))
  _ = UInt32(truncatingBitPattern: Int(0))
  UInt64(truncatingBitPattern: Int(0)) // expected-error {{argument labels '(truncatingBitPattern:)' do not match any available overloads}}
// expected-note @-1 {{overloads for 'UInt64' exist with these partially matching parameter lists}}
  UInt(truncatingBitPattern: Int(0))   // expected-error {{}} expected-note * {{}}

  _ = Int8(truncatingBitPattern: Int(0))
  _ = Int16(truncatingBitPattern: Int(0))
  _ = Int32(truncatingBitPattern: Int(0))
  Int64(truncatingBitPattern: Int(0)) // expected-error {{}} expected-note * {{}}
  Int(truncatingBitPattern: Int(0))   // expected-error {{}} expected-note * {{}}

  UInt(truncatingBitPattern: UInt8(0))  // expected-error {{}} expected-note * {{}}
  UInt(truncatingBitPattern: UInt16(0))  // expected-error {{}} expected-note * {{}}
  UInt(truncatingBitPattern: UInt32(0))  // expected-error {{}} expected-note * {{}}
  _ = UInt(truncatingBitPattern: UInt64(0))

  Int(truncatingBitPattern: UInt8(0))  // expected-error {{}} expected-note * {{}}
  Int(truncatingBitPattern: UInt16(0)) // expected-error {{}} expected-note * {{}}
  Int(truncatingBitPattern: UInt32(0)) // expected-error {{}} expected-note * {{}}
  _ = Int(truncatingBitPattern: UInt64(0))

  UInt(truncatingBitPattern: Int8(0))  // expected-error {{}} expected-note * {{}}
  UInt(truncatingBitPattern: Int16(0)) // expected-error {{}} expected-note * {{}}
  UInt(truncatingBitPattern: Int32(0)) // expected-error {{}} expected-note * {{}}
  _ = UInt(truncatingBitPattern: Int64(0))

  Int(truncatingBitPattern: Int8(0))  // expected-error {{}} expected-note * {{}}
  Int(truncatingBitPattern: Int16(0)) // expected-error {{}} expected-note * {{}}
  Int(truncatingBitPattern: Int32(0)) // expected-error {{}} expected-note * {{}}
  _ = Int(truncatingBitPattern: Int64(0))
}

func testMixedSignArithmetic() {
  // Ensure that the generic arithmetic operators for Strideable don't
  // allow mixed-sign arithmetic to compile.  We create a deliberate
  // ambiguity in these cases.
% for T in "UInt UInt64 UInt32 UInt16 UInt8".split():
  do {
    typealias Stride = ${T}.Stride
    _ = ${T}(1) + 0     // OK
    _ = 0 + ${T}(1)     // OK
    _ = ${T}(1) + Stride(0) // expected-warning {{}} // mixed-type arithmetics
    _ = Stride(1) + ${T}(0) // expected-warning {{}} // mixed-type arithmetics
    _ = ${T}(1) - Stride(0) // expected-warning {{}} // mixed-type arithmetics
    var x: ${T} = 0
    x += 1              // OK
    x += Stride(1)      // expected-warning {{}} // mixed-type arithmetics
    x -= Stride(1)      // expected-warning {{}} // mixed-type arithmetics

    _ = (x - x) as Stride   // expected-warning {{}} // ambiguous use of operator '-'

    //===------------------------------------------------------------------===//
    // The following errors are different because they're not being
    // disabled by the ambiguity trick.
    //===------------------------------------------------------------------===//

    (x + x) as Stride   // expected-error {{cannot convert value of type '${T}' to type 'Stride' (aka 'Int') in coercion}}
    Stride(1) - ${T}(0) // expected-error {{}} expected-note {{}}

    // These tests are expected to start failing when we get improved diagnostics.
    var y: Stride = 0
    y += ${T}(1)        // expected-error {{}} expected-note {{}}
    y -= ${T}(1)        // expected-error {{}} expected-note {{}}
  }
% end
}

func testOps<T : FixedWidthInteger>(_ x: T, _ y: T) -> T {
  let a = x + y
  let s = x - y
  let m = x * y
  let d = x / y
  let r = x % y
  return a + s + m + d + r
}

let   s_ops:    Int = testOps(5, 2)
let   u_ops:   UInt = testOps(5, 2)
let  s8_ops:   Int8 = testOps(5, 2)
let  u8_ops:  UInt8 = testOps(5, 2)
let s16_ops:  Int16 = testOps(5, 2)
let u16_ops: UInt16 = testOps(5, 2)
let s32_ops:  Int32 = testOps(5, 2)
let u32_ops: UInt32 = testOps(5, 2)
let s64_ops:  Int64 = testOps(5, 2)
let u64_ops: UInt64 = testOps(5, 2)

