| // RUN: %target-run-simple-swift | %FileCheck %s |
| // REQUIRES: executable_test |
| |
| import Swift |
| |
| print("testing...") |
| // CHECK: testing... |
| |
| struct Bundle { |
| init() { |
| locations = Array() |
| } |
| var name = String() |
| var locations: [String] |
| } |
| |
| var a = _HeapBuffer<Bundle,Int>(_HeapBufferStorage<Bundle,Int>.self, Bundle(), 10) |
| var b = a.value |
| a.value.name = "DaveA" |
| a.value.locations.append("Princeton") |
| a.value.locations.append("San Jose") |
| for x in 0..<10 { |
| (a.baseAddress + x).initialize(to: x) |
| } |
| |
| print("buffer has storage: \(a.storage != nil)") |
| // CHECK-NEXT: buffer has storage: true |
| |
| func testUnique() { |
| print("buffer is unique: \(a.isUniquelyReferenced())") |
| // CHECK-NEXT: buffer is unique: true |
| |
| var addRef = [a] |
| print("copied buffer is unique: \(a.isUniquelyReferenced())") |
| // CHECK-NEXT: copied buffer is unique: false |
| } |
| testUnique() |
| |
| print("a == a: \(a == a)") |
| // CHECK-NEXT: a == a: true |
| |
| let other = _HeapBuffer<Bundle,Int>( |
| _HeapBufferStorage<Bundle,Int>.self, Bundle(), 0) |
| print("a == other: \(a == other)") |
| // CHECK-NEXT: a == other: false |
| |
| print("name=\(a.value.name)") |
| // CHECK-NEXT: name=DaveA |
| |
| print("length=\(a.value.locations.count)") |
| // CHECK-NEXT: length=2 |
| |
| print("locations[0]=\(a.value.locations[0])") |
| // CHECK-NEXT: locations[0]=Princeton |
| |
| print("locations[1]=\(a.value.locations[1])") |
| // CHECK-NEXT: locations[1]=San Jose |
| |
| for x in 0..<10 { |
| print(a.baseAddress[x], terminator: "") |
| } |
| print("") |
| // CHECK-NEXT: 0123456789 |