// RUN: %target-run-simple-swift // REQUIRES: executable_test import StdlibUnittest var LazyPropertyTestSuite = TestSuite("LazyProperty") var lazyPropertyInitialized = 0 var lazyPropertyInitialized2 = 0 var lazyPropertyInitialized3 = 0 func lazyInitFunction() -> Int { lazyPropertyInitialized += 1 return 0 } class LazyPropertyClass { var id : Int lazy var lazyProperty = lazyInitFunction() lazy var lazyProperty2: Int = { lazyPropertyInitialized2 += 1 return 0 }() lazy var lazyProperty3: Int! = { lazyPropertyInitialized3 += 1 return 0 }() init(_ ident : Int) { id = ident } } LazyPropertyTestSuite.test("Basic") { var a = LazyPropertyClass(1) expectEqual(0, lazyPropertyInitialized) _ = a.lazyProperty expectEqual(1, lazyPropertyInitialized) _ = a.lazyProperty a.lazyProperty = 42 // nothing interesting happens expectEqual(0, lazyPropertyInitialized2) _ = a.lazyProperty2 expectEqual(1, lazyPropertyInitialized2) a = LazyPropertyClass(2) a = LazyPropertyClass(3) a.lazyProperty = 42 expectEqual(1, lazyPropertyInitialized) expectEqual(0, lazyPropertyInitialized3) expectEqual(0, a.lazyProperty3) expectEqual(1, lazyPropertyInitialized3) a.lazyProperty3 = nil expectEqual(nil, a.lazyProperty3) expectEqual(1, lazyPropertyInitialized3) } // Swift 3 had a bogus 'property resetting' behavior, // but we don't allow that anymore. LazyPropertyTestSuite.test("Reset") { } runAllTests()