mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Out of all operating systems ever supported by Swift, only Ubuntu 14.04 had libstdc++ 4.8, and Swift has sunset support for Ubuntu 14.04 for a while now.
171 lines
4.5 KiB
Swift
171 lines
4.5 KiB
Swift
// RUN: %complete-test -tok=INT_OPERATORS %s | %FileCheck %s
|
|
// RUN: %complete-test -add-inner-results -tok=INT_OPERATORS_INNER %s | %FileCheck %s -check-prefix=INNER
|
|
// RUN: %complete-test -raw -hide-none -tok=INT_OPERATORS %s | %FileCheck %s -check-prefix=RAW
|
|
// RUN: %complete-test -tok=BOOL_OPERATORS %s | %FileCheck %s -check-prefix=BOOL
|
|
// RUN: %complete-test -tok=OPT_OPERATORS %s | %FileCheck %s -check-prefix=OPT
|
|
// RUN: %complete-test -tok=KNOWN_OPERATORS_1 %s | %FileCheck %s -check-prefix=KNOWN
|
|
// RUN: %complete-test -tok=KNOWN_OPERATORS_2 %s | %FileCheck %s -check-prefix=KNOWN
|
|
|
|
struct MyInt {
|
|
var bigPowers: Int { return 1 }
|
|
}
|
|
func +(x: MyInt, y: MyInt) -> MyInt { return x }
|
|
postfix operator ++
|
|
postfix func ++(x: inout MyInt) -> MyInt { return x }
|
|
func !=(x: MyInt, y: MyInt) -> Bool { return true }
|
|
|
|
let xxxx = 1
|
|
func test1(x: inout MyInt) {
|
|
x#^INT_OPERATORS^#
|
|
}
|
|
// CHECK: .
|
|
// CHECK: =
|
|
// CHECK: !=
|
|
// CHECK: +
|
|
// CHECK: ++
|
|
|
|
func test2(x: inout MyInt) {
|
|
#^INT_OPERATORS_INNER,x^#
|
|
}
|
|
// INNER: x.
|
|
// INNER: x=
|
|
// INNER: x+
|
|
// INNER: x++
|
|
// INNER: xxxx
|
|
// INNER: x.bigPowers
|
|
|
|
// RAW: {
|
|
// RAW: key.kind: source.lang.swift.decl.function.operator.infix,
|
|
// RAW: key.name: "!=",
|
|
// RAW: key.sourcetext: " != <#T##MyInt#>",
|
|
// RAW: key.description: "!=",
|
|
// RAW: key.typename: "Bool",
|
|
// RAW: {
|
|
// RAW: key.kind: source.lang.swift.decl.function.operator.infix,
|
|
// RAW: key.name: "+",
|
|
// RAW: key.sourcetext: " + <#T##MyInt#>",
|
|
// RAW: key.description: "+",
|
|
// RAW: key.typename: "MyInt",
|
|
// RAW: },
|
|
// RAW: {
|
|
// RAW: key.kind: source.lang.swift.decl.function.operator.postfix,
|
|
// RAW: key.name: "++",
|
|
// RAW: key.sourcetext: "++",
|
|
// RAW: key.description: "++",
|
|
// RAW: key.typename: "MyInt",
|
|
// RAW: },
|
|
|
|
struct MyBool {
|
|
var foo: Int
|
|
}
|
|
func &&(x: MyBool, y: MyBool) -> MyBool { return x }
|
|
func ||(x: MyBool, y: MyBool) -> MyBool { return x }
|
|
|
|
func test3(x: MyBool) {
|
|
x#^BOOL_OPERATORS^#
|
|
}
|
|
// BOOL: .
|
|
// BOOL: &&
|
|
// BOOL: ||
|
|
|
|
func test4(x: inout MyBool?) {
|
|
x#^OPT_OPERATORS^#
|
|
}
|
|
// OPT: .
|
|
// OPT: ?.
|
|
// OPT: !
|
|
// OPT: =
|
|
// OPT: ==
|
|
// OPT: !=
|
|
// OPT: ??
|
|
|
|
class DoesEverything {
|
|
var member: Int = 0
|
|
}
|
|
func !=(x: DoesEverything, y: DoesEverything) {}
|
|
func %(x: DoesEverything, y: DoesEverything) {}
|
|
func %=(x: DoesEverything, y: DoesEverything) {}
|
|
func &(x: DoesEverything, y: DoesEverything) {}
|
|
func &&(x: DoesEverything, y: DoesEverything) {}
|
|
func &*(x: DoesEverything, y: DoesEverything) {}
|
|
func &+(x: DoesEverything, y: DoesEverything) {}
|
|
func &-(x: DoesEverything, y: DoesEverything) {}
|
|
func &=(x: DoesEverything, y: DoesEverything) {}
|
|
func *(x: DoesEverything, y: DoesEverything) {}
|
|
func *=(x: DoesEverything, y: DoesEverything) {}
|
|
func +(x: DoesEverything, y: DoesEverything) {}
|
|
func +=(x: DoesEverything, y: DoesEverything) {}
|
|
func -(x: DoesEverything, y: DoesEverything) {}
|
|
func -=(x: DoesEverything, y: DoesEverything) {}
|
|
func ...(x: DoesEverything, y: DoesEverything) {}
|
|
func ..<(x: DoesEverything, y: DoesEverything) {}
|
|
func /(x: DoesEverything, y: DoesEverything) {}
|
|
func /=(x: DoesEverything, y: DoesEverything) {}
|
|
func <(x: DoesEverything, y: DoesEverything) {}
|
|
func <<(x: DoesEverything, y: DoesEverything) {}
|
|
func <<=(x: DoesEverything, y: DoesEverything) {}
|
|
func <=(x: DoesEverything, y: DoesEverything) {}
|
|
func ==(x: DoesEverything, y: DoesEverything) {}
|
|
func >(x: DoesEverything, y: DoesEverything) {}
|
|
func >=(x: DoesEverything, y: DoesEverything) {}
|
|
func >>(x: DoesEverything, y: DoesEverything) {}
|
|
func >>=(x: DoesEverything, y: DoesEverything) {}
|
|
func ^(x: DoesEverything, y: DoesEverything) {}
|
|
func ^=(x: DoesEverything, y: DoesEverything) {}
|
|
func |(x: DoesEverything, y: DoesEverything) {}
|
|
func |=(x: DoesEverything, y: DoesEverything) {}
|
|
func ||(x: DoesEverything, y: DoesEverything) {}
|
|
func ~=(x: DoesEverything, y: DoesEverything) {}
|
|
|
|
// Custom
|
|
infix operator *** { associativity left precedence 140 }
|
|
func ***(x: DoesEverything, y: DoesEverything) {}
|
|
|
|
func test5(x: DoesEverything) {
|
|
x#^KNOWN_OPERATORS_1^#
|
|
}
|
|
func test6(x: DoesEverything) {
|
|
#^KNOWN_OPERATORS_2,x^#
|
|
}
|
|
// KNOWN: .
|
|
// KNOWN: ==
|
|
// KNOWN: !=
|
|
// KNOWN: <
|
|
// KNOWN: >
|
|
// KNOWN: <=
|
|
// KNOWN: >=
|
|
// KNOWN: +
|
|
// KNOWN: -
|
|
// KNOWN: *
|
|
// KNOWN: /
|
|
// KNOWN: %
|
|
// KNOWN: +=
|
|
// KNOWN: -=
|
|
// KNOWN: *=
|
|
// KNOWN: /=
|
|
// KNOWN: %=
|
|
// KNOWN: &&
|
|
// KNOWN: ||
|
|
|
|
// Custom/unknown operators.
|
|
// KNOWN: ***
|
|
|
|
// KNOWN: &
|
|
// KNOWN: |
|
|
// KNOWN: ^
|
|
// KNOWN: <<
|
|
// KNOWN: >>
|
|
// KNOWN: &=
|
|
// KNOWN: |=
|
|
// KNOWN: ^=
|
|
// KNOWN: <<=
|
|
// KNOWN: >>=
|
|
// KNOWN: ...
|
|
// KNOWN: ..<
|
|
// KNOWN: &*
|
|
// KNOWN: &+
|
|
// KNOWN: &-
|
|
// KNOWN: ===
|
|
// KNOWN: !==
|
|
// KNOWN: ~=
|