mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Sequence benchmarks that test operations on Arrays have setup overhead of 14 μs. (Up from 4 μs a year ago!) That’s just the creation of an [Int] with 2k elements from a range… This array is now extracted into a constant. This commit also removes the .unstable tag from some CountableRange benchmarks, restoring them back to commit set of the Swift Benchmark Suite.
245 lines
6.7 KiB
Swift
245 lines
6.7 KiB
Swift
//===--- Prefix.swift -----------------------------------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// WARNING: This file is manually generated from .gyb template and should not
|
|
// be directly modified. Instead, make changes to Prefix.swift.gyb and run
|
|
// scripts/generate_harness/generate_harness.py to regenerate this file.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
import TestsUtils
|
|
|
|
let sequenceCount = 4096
|
|
let prefixCount = sequenceCount - 1024
|
|
let sumCount = prefixCount * (prefixCount - 1) / 2
|
|
let array: [Int] = Array(0..<sequenceCount)
|
|
|
|
public let Prefix = [
|
|
BenchmarkInfo(
|
|
name: "PrefixCountableRange",
|
|
runFunction: run_PrefixCountableRange,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixSequence",
|
|
runFunction: run_PrefixSequence,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixAnySequence",
|
|
runFunction: run_PrefixAnySequence,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixAnySeqCntRange",
|
|
runFunction: run_PrefixAnySeqCntRange,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixAnySeqCRangeIter",
|
|
runFunction: run_PrefixAnySeqCRangeIter,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixAnyCollection",
|
|
runFunction: run_PrefixAnyCollection,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixArray",
|
|
runFunction: run_PrefixArray,
|
|
tags: [.validation, .api, .Array],
|
|
setUpFunction: { blackHole(array) }),
|
|
BenchmarkInfo(
|
|
name: "PrefixCountableRangeLazy",
|
|
runFunction: run_PrefixCountableRangeLazy,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixSequenceLazy",
|
|
runFunction: run_PrefixSequenceLazy,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixAnySequenceLazy",
|
|
runFunction: run_PrefixAnySequenceLazy,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixAnySeqCntRangeLazy",
|
|
runFunction: run_PrefixAnySeqCntRangeLazy,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixAnySeqCRangeIterLazy",
|
|
runFunction: run_PrefixAnySeqCRangeIterLazy,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixAnyCollectionLazy",
|
|
runFunction: run_PrefixAnyCollectionLazy,
|
|
tags: [.validation, .api]),
|
|
BenchmarkInfo(
|
|
name: "PrefixArrayLazy",
|
|
runFunction: run_PrefixArrayLazy,
|
|
tags: [.validation, .api, .Array],
|
|
setUpFunction: { blackHole(array) }),
|
|
]
|
|
|
|
@inline(never)
|
|
public func run_PrefixCountableRange(_ N: Int) {
|
|
let s = 0..<sequenceCount
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixSequence(_ N: Int) {
|
|
let s = sequence(first: 0) { $0 < sequenceCount - 1 ? $0 &+ 1 : nil }
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixAnySequence(_ N: Int) {
|
|
let s = AnySequence(sequence(first: 0) { $0 < sequenceCount - 1 ? $0 &+ 1 : nil })
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixAnySeqCntRange(_ N: Int) {
|
|
let s = AnySequence(0..<sequenceCount)
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixAnySeqCRangeIter(_ N: Int) {
|
|
let s = AnySequence((0..<sequenceCount).makeIterator())
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixAnyCollection(_ N: Int) {
|
|
let s = AnyCollection(0..<sequenceCount)
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixArray(_ N: Int) {
|
|
let s = array
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixCountableRangeLazy(_ N: Int) {
|
|
let s = (0..<sequenceCount).lazy
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixSequenceLazy(_ N: Int) {
|
|
let s = (sequence(first: 0) { $0 < sequenceCount - 1 ? $0 &+ 1 : nil }).lazy
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixAnySequenceLazy(_ N: Int) {
|
|
let s = (AnySequence(sequence(first: 0) { $0 < sequenceCount - 1 ? $0 &+ 1 : nil })).lazy
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixAnySeqCntRangeLazy(_ N: Int) {
|
|
let s = (AnySequence(0..<sequenceCount)).lazy
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixAnySeqCRangeIterLazy(_ N: Int) {
|
|
let s = (AnySequence((0..<sequenceCount).makeIterator())).lazy
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixAnyCollectionLazy(_ N: Int) {
|
|
let s = (AnyCollection(0..<sequenceCount)).lazy
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
@inline(never)
|
|
public func run_PrefixArrayLazy(_ N: Int) {
|
|
let s = (array).lazy
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.prefix(prefixCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
|
|
// Local Variables:
|
|
// eval: (read-only-mode 1)
|
|
// End:
|