Files
swift-mirror/test/Interpreter/classes.swift
Joe Groff db0fea590e stdlib: Use unqualified names in 'print'.
Leave the qualification off of enum cases and type names when 'print'-ing them, but keep them on 'debugPrint'. (At least, at the outermost level; since ad-hoc printing of structs and tuples uses debugPrint, we'll still get qualification at depth, which kind of sucks but needs more invasive state management in print to make possible.) Implements rdar://problem/21788604.

Swift SVN r30166
2015-07-13 21:42:11 +00:00

173 lines
3.6 KiB
Swift

// RUN: %target-run-simple-swift | FileCheck %s
// REQUIRES: executable_test
class Interval {
var lo, hi : Int
init(_ lo:Int, _ hi:Int) {
self.lo = lo
self.hi = hi
}
func show() {
print("[\(lo), \(hi)]")
}
class func like(lo: Int, _ hi: Int) -> Interval {
return Interval(lo, hi)
}
}
class OpenInterval : Interval {
override init(_ lo:Int, _ hi:Int) {
super.init(lo, hi)
}
override func show() {
print("(\(lo), \(hi))")
}
override class func like(lo:Int, _ hi:Int) -> Interval {
return OpenInterval(lo, hi)
}
}
func +(a: Interval, b: Interval) -> Interval {
return Interval(a.lo + b.lo, a.hi + b.hi)
}
func -(a: Interval, b: Interval) -> Interval {
return Interval(a.lo - b.hi, a.hi - b.lo)
}
prefix func -(a: Interval) -> Interval {
return a.dynamicType.like(-a.hi, -a.lo)
}
// CHECK: [-2, -1]
(-Interval(1,2)).show()
// CHECK: [4, 6]
(Interval(1,2) + Interval(3,4)).show()
// CHECK: [1, 3]
(Interval(3,4) - Interval(1,2)).show()
// CHECK: (-1, 1)
(OpenInterval(-1,1)).show()
// CHECK: (-3, 2)
(-OpenInterval(-2,3)).show()
// CHECK: false
print(Interval(1,2) is OpenInterval)
// CHECK: true
var i12 : Interval = OpenInterval(1,2)
print(i12 is OpenInterval)
class RDar16563763_A {}
class RDar16563763_B : RDar16563763_A {}
print("self is Type = \(RDar16563763_A.self is RDar16563763_B.Type)")
// CHECK: self is Type = false
//
// rdar://problem/19321484
//
class Base {
func makePossibleString() -> String? {
return "Base"
}
}
/* inherits from Base with method that returns a String instead of an Optional
* String */
class CompilerCrasher : Base {
override func makePossibleString() -> String {
return "CompilerCrasher"
}
}
class SonOfCompilerCrasher: CompilerCrasher {}
class ReturnOfCompilerCrasher: CompilerCrasher {
override func makePossibleString() -> String {
return "ReturnOfCompilerCrasher"
}
}
func testCrash(c: Base) -> String? {
let s = c.makePossibleString()
return s
}
public func driver() {
var c = CompilerCrasher()
var d = SonOfCompilerCrasher()
var e = ReturnOfCompilerCrasher()
var r = testCrash(c)
print(r)
r = testCrash(d)
print(r)
r = testCrash(e)
print(r)
}
driver()
// CHECK: Optional("CompilerCrasher")
// CHECK-NEXT: Optional("CompilerCrasher")
// CHECK-NEXT: Optional("ReturnOfCompilerCrasher")
struct Account {
var owner: String
}
class Bank {
func transferMoney(from: Account?, to: Account!) -> Account! {
return nil
}
func deposit(to: Account) -> Account? {
return nil
}
}
class DodgyBank : Bank {
// Parameters: swap ? and !
// Result: less optional
override func transferMoney(from: Account!, to: Account?) -> Account {
if let fromAccount = from {
return fromAccount
} else {
return Account(owner: "Bank fees")
}
}
// Parameter: more optional
// Result: swap ? and !
override func deposit(to: Account?) -> Account! {
if let toAccount = to {
if (toAccount.owner == "Cyberdyne Systems") {
return nil
}
}
return to
}
}
// CHECK: Account(owner: "A")
// CHECK: Account(owner: "Bank fees")
// CHECK: nil
// CHECK: Optional(main.Account(owner: "A"))
let b = DodgyBank()
#if false
// FIXME: rdar://problem/21435542
print(b.transferMoney(Account(owner: "A"), to: Account(owner: "B")))
print(b.transferMoney(nil, to: nil))
print(b.deposit(Account(owner: "Cyberdyne Systems")))
print(b.deposit(Account(owner: "A")))
print(b.deposit(nil))
#endif
print((b as Bank).transferMoney(Account(owner: "A"), to: Account(owner: "B")))
print((b as Bank).transferMoney(nil, to: nil))
print((b as Bank).deposit(Account(owner: "Cyberdyne Systems")))
print((b as Bank).deposit(Account(owner: "A")))