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.
74 lines
2.4 KiB
Swift
74 lines
2.4 KiB
Swift
//===--- DropLast.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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
% # Ignore the following warning. This _is_ the correct file to edit.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// WARNING: This file is manually generated from .gyb template and should not
|
|
// be directly modified. Instead, make changes to DropLast.swift.gyb and run
|
|
// scripts/generate_harness/generate_harness.py to regenerate this file.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
import TestsUtils
|
|
|
|
let sequenceCount = 4096
|
|
let prefixCount = 1024
|
|
let dropCount = sequenceCount - prefixCount
|
|
let sumCount = prefixCount * (prefixCount - 1) / 2
|
|
let array: [Int] = Array(0..<sequenceCount)
|
|
%{
|
|
# Name and Expression pairs for Sequences to test.
|
|
|
|
Sequences = [
|
|
('CountableRange', '0..<sequenceCount'),
|
|
('Sequence',
|
|
'sequence(first: 0) { $0 < sequenceCount - 1 ? $0 &+ 1 : nil }'),
|
|
('AnySequence',
|
|
'AnySequence(sequence(first: 0) { $0 < sequenceCount - 1 ? $0 &+ 1 : nil })'),
|
|
('AnySeqCntRange', 'AnySequence(0..<sequenceCount)'),
|
|
('AnySeqCRangeIter', 'AnySequence((0..<sequenceCount).makeIterator())'),
|
|
('AnyCollection', 'AnyCollection(0..<sequenceCount)'),
|
|
('Array', 'array'),
|
|
]
|
|
def lazy ((Name, Expr)) : return (Name + 'Lazy', '(' + Expr + ').lazy')
|
|
|
|
Sequences = Sequences + map(lazy, Sequences)
|
|
}%
|
|
|
|
public let DropLast = [
|
|
% for (Name, Expr) in Sequences:
|
|
BenchmarkInfo(
|
|
name: "DropLast${Name}",
|
|
runFunction: run_DropLast${Name},
|
|
tags: [.validation, .api${
|
|
', .Array],\n setUpFunction: { blackHole(array) })' if 'Array' in Name else
|
|
'])' },
|
|
% end
|
|
]
|
|
|
|
% for (Name, Expr) in Sequences:
|
|
@inline(never)
|
|
public func run_DropLast${Name}(_ N: Int) {
|
|
let s = ${Expr}
|
|
for _ in 1...20*N {
|
|
var result = 0
|
|
for element in s.dropLast(dropCount) {
|
|
result += element
|
|
}
|
|
CheckResults(result == sumCount)
|
|
}
|
|
}
|
|
% end
|
|
|
|
// ${'Local Variables'}:
|
|
// eval: (read-only-mode 1)
|
|
// End:
|