// RUN: %target-run-simple-swift // REQUIRES: executable_test import StdlibUnittest var StructTestSuite = TestSuite("Struct") struct Interval { var lo, hi : Int init(_ lo: Int, _ hi: Int) { self.lo = lo self.hi = 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 Interval(-a.hi, -a.lo) } func print(_ a: Interval) { print("[\(a.lo), \(a.hi)]") } StructTestSuite.test("Interval") { do { let i = -Interval(1, 2) expectEqual(-2, i.lo) expectEqual(-1, i.hi) } do { let i = Interval(1, 2) + Interval(3, 4) expectEqual(4, i.lo) expectEqual(6, i.hi) } do { let i = Interval(3, 4) - Interval(1, 2) expectEqual(1, i.lo) expectEqual(3, i.hi) } } struct BigStruct { var a,b,c,d,e,f,g,h : Int } func returnBigStruct() -> BigStruct { return BigStruct(a: 1, b: 6, c: 1, d: 8, e: 0, f: 3, g: 4, h: 0) } StructTestSuite.test("Big") { let bs = returnBigStruct() expectEqual(1, bs.a) expectEqual(6, bs.b) expectEqual(1, bs.c) expectEqual(8, bs.d) expectEqual(0, bs.e) expectEqual(3, bs.f) expectEqual(4, bs.g) expectEqual(0, bs.h) } struct GenStruct { var a, b: Int init(_ a: Int, _ b: Int) { self.a = a self.b = b } } StructTestSuite.test("Generic") { let gs = GenStruct(19, 84) expectEqual(19, gs.a) expectEqual(84, gs.b) } struct InitStruct { var x: Int var y: Int var l = LifetimeTracked(0) init() { x = 10 y = 20 } init(x: Int, y: Int) { self.x = x self.y = y } init(b: Bool) { if b { self = InitStruct(x: 5, y: 7) } else { self.init(x: 6, y: 8) } } init(initThenAssign: ()) { self.init(x: 5, y: 7) self = InitStruct(x: 6, y: 8) } init(assignThenInit: ()) { self = InitStruct(x: 5, y: 7) self.init(x: 6, y: 8) } init(initThenInit: ()) { self.init(x: 5, y: 7) self.init(x: 6, y: 8) } } StructTestSuite.test("InitStruct") { do { let s = InitStruct() expectEqual(10, s.x) expectEqual(20, s.y) } do { let s = InitStruct(x: 69, y: 420) expectEqual(69, s.x) expectEqual(420, s.y) } do { let s = InitStruct(initThenAssign: ()) expectEqual(6, s.x) expectEqual(8, s.y) } do { let s = InitStruct(assignThenInit: ()) expectEqual(6, s.x) expectEqual(8, s.y) } do { let s = InitStruct(initThenInit: ()) expectEqual(6, s.x) expectEqual(8, s.y) } } struct InitStructAddrOnly { var x: Int var y: Int var a: Any = "hi" var l = LifetimeTracked(0) init() { x = 10 y = 20 } init(x: Int, y: Int) { self.x = x self.y = y } init(b: Bool) { if b { self = InitStructAddrOnly(x: 5, y: 7) } else { self.init(x: 6, y: 8) } } init(initThenAssign: ()) { self.init(x: 5, y: 7) self = InitStructAddrOnly(x: 6, y: 8) } init(assignThenInit: ()) { self = InitStructAddrOnly(x: 5, y: 7) self.init(x: 6, y: 8) } init(initThenInit: ()) { self.init(x: 5, y: 7) self.init(x: 6, y: 8) } } StructTestSuite.test("InitStructAddrOnly") { do { let s = InitStructAddrOnly() expectEqual(10, s.x) expectEqual(20, s.y) } do { let s = InitStructAddrOnly(x: 69, y: 420) expectEqual(69, s.x) expectEqual(420, s.y) } do { let s = InitStructAddrOnly(initThenAssign: ()) expectEqual(6, s.x) expectEqual(8, s.y) } do { let s = InitStructAddrOnly(assignThenInit: ()) expectEqual(6, s.x) expectEqual(8, s.y) } do { let s = InitStructAddrOnly(initThenInit: ()) expectEqual(6, s.x) expectEqual(8, s.y) } } runAllTests()