blob: 78ef4d1cfd439f0cd53808400e23f3cdec4013e3 [file] [log] [blame]
// 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<T> {
var a, b: Int
init(_ a: Int, _ b: Int) {
self.a = a
self.b = b
}
}
StructTestSuite.test("Generic") {
let gs = GenStruct<String>(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()