| //===--- ArrayOfPOD.swift -------------------------------------------------===// |
| // |
| // 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 creation and destruction of an array of |
| // trivial static type. It is meant to be a baseline for comparison against |
| // ArrayOfGenericPOD. |
| // |
| // For comparison, we always create three arrays of 200,000 words. |
| |
| import TestsUtils |
| |
| public let ArrayOfPOD = BenchmarkInfo( |
| name: "ArrayOfPOD", |
| runFunction: run_ArrayOfPOD, |
| tags: [.validation, .api, .Array]) |
| |
| class RefArray<T> { |
| var array : [T] |
| |
| init(_ i:T, count:Int = 100_000) { |
| array = [T](repeating: i, count: count) |
| } |
| } |
| |
| @inline(never) |
| func genIntArray() { |
| _ = RefArray<Int>(3, count:200_000) |
| // should be a nop |
| } |
| |
| enum PODEnum { |
| case Some(Int) |
| |
| init(i:Int) { self = .Some(i) } |
| } |
| |
| @inline(never) |
| func genEnumArray() { |
| _ = RefArray<PODEnum>(PODEnum.Some(3)) |
| // should be a nop |
| } |
| |
| struct S { |
| var x: Int |
| var y: Int |
| } |
| @inline(never) |
| func genStructArray() { |
| _ = RefArray<S>(S(x:3, y:4)) |
| // should be a nop |
| } |
| |
| @inline(never) |
| public func run_ArrayOfPOD(_ N: Int) { |
| for _ in 0...N { |
| genIntArray() |
| genEnumArray() |
| genStructArray() |
| } |
| } |