Files
swift-mirror/benchmark/single-source/Suffix.swift.gyb
tbkka 2c8ae98e5e Python3 compatibility for Benchmarks (#33039)
Three issues addressed here:

1. Dependency on dictionary iteration order

 CharacterProperties.swift.gyb iterated a dictionary to produce its output.
 Changed this to a list of tuples to ensure the order is predictable.

2. Python3 `map` returns an iterator, not a list

 Changed a bunch of `map` calls to `list(map(...))` to ensure the result is a list

3. Python3 `int()` expects a string, won't accept a list of characters

 Added a concatenation step that is effectively a no-op on Python2
2020-07-22 12:24:10 -07:00

73 lines
2.4 KiB
Swift

//===--- Suffix.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 Suffix.swift.gyb and run
// scripts/generate_harness/generate_harness.py to regenerate this file.
////////////////////////////////////////////////////////////////////////////////
import TestsUtils
let sequenceCount = 4096
let suffixCount = 1024
let sumCount = suffixCount * (2 * sequenceCount - suffixCount - 1) / 2
let array: [Int] = Array(0..<sequenceCount)
%{
# Name and initializer 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 (NameExpr) : return (NameExpr[0] + 'Lazy', '(' + NameExpr[1] + ').lazy')
Sequences = Sequences + list(map(lazy, Sequences))
}%
public let Suffix = [
% for (Name, Expr) in Sequences:
BenchmarkInfo(
name: "Suffix${Name}",
runFunction: run_Suffix${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_Suffix${Name}(_ N: Int) {
let s = ${Expr}
for _ in 1...20*N {
var result = 0
for element in s.suffix(suffixCount) {
result += element
}
CheckResults(result == sumCount)
}
}
% end
// ${'Local Variables'}:
// eval: (read-only-mode 1)
// End: