Skip to content

Commit aa696af

Browse files
authored
Merge pull request swiftlang#9042 from eeckstein/new-benchmarks
Add two new benchmarks
2 parents 62b6b3b + 994c04f commit aa696af

File tree

4 files changed

+98
-0
lines changed

4 files changed

+98
-0
lines changed

benchmark/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ set(SWIFT_BENCH_MODULES
9494
single-source/SetTests
9595
single-source/SevenBoom
9696
single-source/Sim2DArray
97+
single-source/SortLargeExistentials
9798
single-source/SortLettersInPlace
9899
single-source/SortStrings
99100
single-source/StackPromo

benchmark/single-source/ArrayAppend.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,19 @@ public func run_ArrayPlusEqualFiveElementCollection(_ N: Int) {
267267
}
268268
}
269269

270+
@inline(never)
271+
public func appendThreeElements(_ a: inout [Int]) {
272+
a += [1, 2, 3]
273+
}
274+
275+
@inline(never)
276+
public func run_ArrayPlusEqualThreeElements(_ N: Int) {
277+
for _ in 0..<(10_000 * N) {
278+
var a: [Int] = []
279+
appendThreeElements(&a)
280+
}
281+
}
282+
270283
// Append the utf8 elements of an ascii string to a [UInt8]
271284
@inline(never)
272285
public func run_ArrayAppendAscii(_ N: Int) {
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
//===--- SortLettersInPlace.swift -----------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
// This test is a variant of the SortLettersInPlace.
14+
15+
import TestsUtils
16+
17+
protocol LetterKind {
18+
var value: String { get }
19+
func lessthan(_ rhs: LetterKind) -> Bool
20+
}
21+
22+
// A struct which exeeds the size of the existential inline buffer.
23+
struct Letter : LetterKind {
24+
let value: String
25+
26+
var a: Int = 27
27+
var b: Int = 27
28+
var c: Int = 27
29+
var d: Int = 27
30+
31+
init(_ value: String) {
32+
self.value = value
33+
}
34+
35+
func lessthan(_ rhs: LetterKind) -> Bool {
36+
return value < rhs.value
37+
}
38+
}
39+
40+
let lettersTemplate : [LetterKind] = [
41+
Letter("k"), Letter("a"), Letter("x"), Letter("i"), Letter("f"), Letter("l"),
42+
Letter("o"), Letter("w"), Letter("h"), Letter("p"), Letter("b"), Letter("u"),
43+
Letter("n"), Letter("c"), Letter("j"), Letter("t"), Letter("y"), Letter("s"),
44+
Letter("d"), Letter("v"), Letter("r"), Letter("e"), Letter("q"), Letter("m"),
45+
Letter("z"), Letter("g"),
46+
Letter("k"), Letter("a"), Letter("x"), Letter("i"), Letter("f"), Letter("l"),
47+
Letter("o"), Letter("w"), Letter("h"), Letter("p"), Letter("b"), Letter("u"),
48+
Letter("n"), Letter("c"), Letter("j"), Letter("t"), Letter("y"), Letter("s"),
49+
Letter("d"), Letter("v"), Letter("r"), Letter("e"), Letter("q"), Letter("m"),
50+
Letter("z"), Letter("g"),
51+
Letter("k"), Letter("a"), Letter("x"), Letter("i"), Letter("f"), Letter("l"),
52+
Letter("o"), Letter("w"), Letter("h"), Letter("p"), Letter("b"), Letter("u"),
53+
Letter("n"), Letter("c"), Letter("j"), Letter("t"), Letter("y"), Letter("s"),
54+
Letter("d"), Letter("v"), Letter("r"), Letter("e"), Letter("q"), Letter("m"),
55+
Letter("z"), Letter("g"),
56+
Letter("k"), Letter("a"), Letter("x"), Letter("i"), Letter("f"), Letter("l"),
57+
Letter("o"), Letter("w"), Letter("h"), Letter("p"), Letter("b"), Letter("u"),
58+
Letter("n"), Letter("c"), Letter("j"), Letter("t"), Letter("y"), Letter("s"),
59+
Letter("d"), Letter("v"), Letter("r"), Letter("e"), Letter("q"), Letter("m"),
60+
Letter("z"), Letter("g"),
61+
Letter("k"), Letter("a"), Letter("x"), Letter("i"), Letter("f"), Letter("l"),
62+
Letter("o"), Letter("w"), Letter("h"), Letter("p"), Letter("b"), Letter("u"),
63+
Letter("n"), Letter("c"), Letter("j"), Letter("t"), Letter("y"), Letter("s"),
64+
Letter("d"), Letter("v"), Letter("r"), Letter("e"), Letter("q"), Letter("m"),
65+
Letter("z"), Letter("g")
66+
]
67+
68+
@inline(never)
69+
public func run_SortLargeExistentials(_ N: Int) {
70+
for _ in 1...100*N {
71+
var letters = lettersTemplate
72+
73+
letters.sort {
74+
return $0.lessthan($1)
75+
}
76+
77+
// Check whether letters are sorted.
78+
CheckResults(letters[0].value <= letters[letters.count/2].value,
79+
"Incorrect results in SortLargeExistentials.")
80+
}
81+
}

benchmark/utils/main.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ import ReversedCollections
9999
import SetTests
100100
import SevenBoom
101101
import Sim2DArray
102+
import SortLargeExistentials
102103
import SortLettersInPlace
103104
import SortStrings
104105
import StackPromo
@@ -166,6 +167,7 @@ addPrecommitTest("ArrayOfRef", run_ArrayOfRef)
166167
addPrecommitTest("ArrayPlusEqualArrayOfInt", run_ArrayPlusEqualArrayOfInt)
167168
addPrecommitTest("ArrayPlusEqualFiveElementCollection", run_ArrayPlusEqualFiveElementCollection)
168169
addPrecommitTest("ArrayPlusEqualSingleElementCollection", run_ArrayPlusEqualSingleElementCollection)
170+
addPrecommitTest("ArrayPlusEqualThreeElements", run_ArrayPlusEqualThreeElements)
169171
addPrecommitTest("ArraySubscript", run_ArraySubscript)
170172
addPrecommitTest("ArrayValueProp", run_ArrayValueProp)
171173
addPrecommitTest("ArrayValueProp2", run_ArrayValueProp2)
@@ -364,6 +366,7 @@ addPrecommitTest("SetUnion", run_SetUnion)
364366
addPrecommitTest("SetUnion_OfObjects", run_SetUnion_OfObjects)
365367
addPrecommitTest("SevenBoom", run_SevenBoom)
366368
addPrecommitTest("Sim2DArray", run_Sim2DArray)
369+
addPrecommitTest("SortLargeExistentials", run_SortLargeExistentials)
367370
addPrecommitTest("SortLettersInPlace", run_SortLettersInPlace)
368371
addPrecommitTest("SortSortedStrings", run_SortSortedStrings)
369372
addPrecommitTest("SortStrings", run_SortStrings)

0 commit comments

Comments
 (0)