blob: 8289d5c8d477e2fd62d905bb476b54be00a26749 [file] [log] [blame]
//===--- ArrayInClass.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
//
//===----------------------------------------------------------------------===//
import TestsUtils
public let ArrayInClass = [
BenchmarkInfo(
name: "ArrayInClass",
runFunction: run_ArrayInClass,
tags: [.validation, .api, .Array],
setUpFunction: { ac = ArrayContainer() },
tearDownFunction: { ac = nil },
legacyFactor: 5),
BenchmarkInfo(name: "DistinctClassFieldAccesses",
runFunction: run_DistinctClassFieldAccesses,
tags: [.validation, .api, .Array],
setUpFunction: { workload = ClassWithArrs(N: 10_000) },
tearDownFunction: { workload = nil }),
]
var ac: ArrayContainer!
class ArrayContainer {
final var arr : [Int]
init() {
arr = [Int] (repeating: 0, count: 20_000)
}
func runLoop(_ N: Int) {
for _ in 0 ..< N {
for i in 0 ..< arr.count {
arr[i] = arr[i] + 1
}
}
}
}
@inline(never)
public func run_ArrayInClass(_ N: Int) {
let a = ac!
a.runLoop(N)
}
class ClassWithArrs {
var N: Int = 0
var A: [Int]
var B: [Int]
init(N: Int) {
self.N = N
A = [Int](repeating: 0, count: N)
B = [Int](repeating: 0, count: N)
}
func readArr() {
for i in 0..<self.N {
guard A[i] == B[i] else { fatalError("") }
}
}
func writeArr() {
for i in 0..<self.N {
A[i] = i
B[i] = i
}
}
}
var workload: ClassWithArrs!
public func run_DistinctClassFieldAccesses(_ N: Int) {
for _ in 1...N {
workload.writeArr()
workload.readArr()
}
}