//===----------------------------------------------------------------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// // This benchmark tests AnyHashable's initializer that needs to dynamically // upcast the instance to the type that introduces the Hashable // conformance. class TestHashableBase : Hashable { var value: Int init(_ value: Int) { self.value = value } var hashValue: Int { return value } static func == ( lhs: TestHashableBase, rhs: TestHashableBase ) -> Bool { return lhs.value == rhs.value } } class TestHashableDerived1 : TestHashableBase {} class TestHashableDerived2 : TestHashableDerived1 {} class TestHashableDerived3 : TestHashableDerived2 {} class TestHashableDerived4 : TestHashableDerived3 {} class TestHashableDerived5 : TestHashableDerived4 {} @inline(never) public func run_AnyHashableWithAClass(_ N: Int) { let c = TestHashableDerived5(10) for _ in 0...(N*500000) { _ = AnyHashable(c) } }