// 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
