         setUpFunction: {
           touchGlobalInfo()
           blackHole(unmanagedPrimsState)
+        }))
+    benchmarks.append(BenchmarkInfo(
+        name: "Prims.NonStrongRef.UnmanagedUGR",
+        runFunction: run_PrimsUnmanagedUGR,
+        tags: [.validation, .algorithm, .api],
+        setUpFunction: {
+          touchGlobalInfo()
+          blackHole(unmanagedUGRPrimsState)
+        }))
+    benchmarks.append(BenchmarkInfo(
+        name: "Prims.NonStrongRef.UnmanagedUGR.ClosureAccess",
+        runFunction: run_PrimsUnmanagedUGRClosureAccess,
+        tags: [.validation, .algorithm, .api],
+        setUpFunction: {
+          touchGlobalInfo()
+          blackHole(unmanagedUGRPrimsState)
         }))
     return benchmarks
   })()

  }
}

//===----------------------------------------------------------------------===//
//                            Graph Node Implementations
//===----------------------------------------------------------------------===//

}

func ==(lhs: UnmanagedGraphNode, rhs: UnmanagedGraphNode) -> Bool {
  return lhs === rhs
}


final class UnmanagedUGRGraphNode {
  /// This id is only meant for dumping the state of the graph. It is not meant
  /// to be used functionally by the algorithm.
  var id: Int

  var adjList: Array<UnmanagedUGRVarBox<UnmanagedUGRGraphNode>>

  init(id inputId: Int) {
    id = inputId
    adjList = Array<UnmanagedUGRVarBox<UnmanagedUGRGraphNode>>()
  }

  deinit {
    for x in adjList {
      x.free()
    }
  }
}

extension UnmanagedUGRGraphNode : GraphNode {
  typealias BoxType = UnmanagedUGRVarBox<UnmanagedUGRGraphNode>
}

extension UnmanagedUGRGraphNode : Equatable {}
extension UnmanagedUGRGraphNode : Hashable {
  func hash(into hasher: inout Hasher) {
    hasher.combine(ObjectIdentifier(self))
  }
}

func ==(lhs: UnmanagedUGRGraphNode, rhs: UnmanagedUGRGraphNode) -> Bool {
  return lhs === rhs
}

