Skip to content

Commit 4a55f70

Browse files
committed
Benchmarks for dropLast and suffix
1 parent e0cf515 commit 4a55f70

File tree

4 files changed

+169
-17
lines changed

4 files changed

+169
-17
lines changed

benchmark/CMakeLists.txt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ set(SWIFT_BENCH_MODULES
3636
single-source/Chars
3737
single-source/ClassArrayGetter
3838
single-source/DeadArray
39-
single-source/DictTest
40-
single-source/DictTest2
41-
single-source/DictTest3
4239
single-source/DictionaryBridge
4340
single-source/DictionaryLiteral
4441
single-source/DictionaryRemove
4542
single-source/DictionarySwap
43+
single-source/DictTest
44+
single-source/DictTest2
45+
single-source/DictTest3
46+
single-source/DropLast
4647
single-source/ErrorHandling
4748
single-source/Fibonacci
4849
single-source/GlobalClass
@@ -57,10 +58,10 @@ set(SWIFT_BENCH_MODULES
5758
single-source/Memset
5859
single-source/MonteCarloE
5960
single-source/MonteCarloPi
61+
single-source/NopDeinit
6062
single-source/NSDictionaryCastToSwift
6163
single-source/NSError
6264
single-source/NSStringConversion
63-
single-source/NopDeinit
6465
single-source/ObjectAllocation
6566
single-source/ObjectiveCBridging
6667
single-source/ObjectiveCBridgingStubs
@@ -77,11 +78,11 @@ set(SWIFT_BENCH_MODULES
7778
single-source/Prims
7879
single-source/ProtocolDispatch
7980
single-source/ProtocolDispatch2
80-
single-source/RC4
81-
single-source/RGBHistogram
8281
single-source/RangeAssignment
82+
single-source/RC4
8383
single-source/RecursiveOwnedParameter
8484
single-source/ReversedCollections
85+
single-source/RGBHistogram
8586
single-source/SetTests
8687
single-source/SevenBoom
8788
single-source/Sim2DArray
@@ -90,11 +91,12 @@ set(SWIFT_BENCH_MODULES
9091
single-source/StackPromo
9192
single-source/StaticArray
9293
single-source/StrComplexWalk
93-
single-source/StrToInt
9494
single-source/StringBuilder
9595
single-source/StringInterpolation
9696
single-source/StringTests
9797
single-source/StringWalk
98+
single-source/StrToInt
99+
single-source/Suffix
98100
single-source/SuperChars
99101
single-source/TwoSum
100102
single-source/TypeFlood
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//===--- DropLast.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+
import TestsUtils
14+
15+
let reps = 1
16+
let sequenceCount = 4096
17+
let prefixCount = 1024
18+
let dropCount = sequenceCount - prefixCount
19+
let sumCount = prefixCount * (prefixCount-1) / 2
20+
21+
@inline(never)
22+
public func run_DropLastCountableRange(_ N: Int) {
23+
let s = 0 ..< sequenceCount
24+
for _ in 1...20*N {
25+
for _ in 1...reps {
26+
var result = 0
27+
for element in s.dropLast(dropCount) {
28+
result += element
29+
}
30+
CheckResults(result == sumCount,
31+
"IncorrectResults in DropLastCountableRange: \(result) != \(sumCount)")
32+
}
33+
}
34+
}
35+
36+
fileprivate struct MySequence: Sequence {
37+
let range: CountableRange<Int>
38+
public func makeIterator() -> IndexingIterator<CountableRange<Int>> {
39+
return range.makeIterator()
40+
}
41+
}
42+
43+
@inline(never)
44+
public func run_DropLastSequence(_ N: Int) {
45+
let s = MySequence(range: 0 ..< sequenceCount)
46+
for _ in 1...20*N {
47+
for _ in 1...reps {
48+
var result = 0
49+
for element in s.dropLast(dropCount) {
50+
result += element
51+
}
52+
CheckResults(result == sumCount,
53+
"IncorrectResults in DropLastSequence: \(result) != \(sumCount)")
54+
}
55+
}
56+
}
57+
58+
@inline(never)
59+
public func run_DropLastAnySequence(_ N: Int) {
60+
let s = AnySequence(0 ..< sequenceCount)
61+
for _ in 1...20*N {
62+
for _ in 1...reps {
63+
var result = 0
64+
for element in s.dropLast(dropCount) {
65+
result += element
66+
}
67+
CheckResults(result == sumCount,
68+
"IncorrectResults in DropLastAnySequence: \(result) != \(sumCount)")
69+
}
70+
}
71+
}

benchmark/single-source/Suffix.swift

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//===--- Suffix.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+
import TestsUtils
14+
15+
let reps = 1
16+
let sequenceCount = 4096
17+
let suffixCount = 1024
18+
let sumCount = suffixCount * (2 * sequenceCount - suffixCount - 1) / 2
19+
20+
@inline(never)
21+
public func run_SuffixCountableRange(_ N: Int) {
22+
let s = 0 ..< sequenceCount
23+
for _ in 1...20*N {
24+
for _ in 1...reps {
25+
var result = 0
26+
for element in s.suffix(suffixCount) {
27+
result += element
28+
}
29+
CheckResults(result == sumCount,
30+
"IncorrectResults in SuffixCountableRange: \(result) != \(sumCount)")
31+
}
32+
}
33+
}
34+
35+
fileprivate struct MySequence: Sequence {
36+
let range: CountableRange<Int>
37+
public func makeIterator() -> IndexingIterator<CountableRange<Int>> {
38+
return range.makeIterator()
39+
}
40+
}
41+
42+
@inline(never)
43+
public func run_SuffixSequence(_ N: Int) {
44+
let s = MySequence(range: 0 ..< sequenceCount)
45+
for _ in 1...20*N {
46+
for _ in 1...reps {
47+
var result = 0
48+
for element in s.suffix(suffixCount) {
49+
result += element
50+
}
51+
CheckResults(result == sumCount,
52+
"IncorrectResults in SuffixSequence: \(result) != \(sumCount)")
53+
}
54+
}
55+
}
56+
57+
@inline(never)
58+
public func run_SuffixAnySequence(_ N: Int) {
59+
let s = AnySequence(0 ..< sequenceCount)
60+
for _ in 1...20*N {
61+
for _ in 1...reps {
62+
var result = 0
63+
for element in s.suffix(suffixCount) {
64+
result += element
65+
}
66+
CheckResults(result == sumCount,
67+
"IncorrectResults in SuffixAnySequence: \(result) != \(sumCount)")
68+
}
69+
}
70+
}
71+

benchmark/utils/main.swift

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,14 @@ import CharacterLiteralsSmall
4141
import Chars
4242
import ClassArrayGetter
4343
import DeadArray
44-
import DictTest
45-
import DictTest2
46-
import DictTest3
4744
import DictionaryBridge
4845
import DictionaryLiteral
4946
import DictionaryRemove
5047
import DictionarySwap
48+
import DictTest
49+
import DictTest2
50+
import DictTest3
51+
import DropLast
5152
import ErrorHandling
5253
import Fibonacci
5354
import GlobalClass
@@ -62,10 +63,10 @@ import MapReduce
6263
import Memset
6364
import MonteCarloE
6465
import MonteCarloPi
66+
import NopDeinit
6567
import NSDictionaryCastToSwift
6668
import NSError
6769
import NSStringConversion
68-
import NopDeinit
6970
import ObjectAllocation
7071
import ObjectiveCBridging
7172
import ObjectiveCBridgingStubs
@@ -82,11 +83,11 @@ import PopFrontGeneric
8283
import Prims
8384
import ProtocolDispatch
8485
import ProtocolDispatch2
85-
import RC4
86-
import RGBHistogram
8786
import RangeAssignment
87+
import RC4
8888
import RecursiveOwnedParameter
8989
import ReversedCollections
90+
import RGBHistogram
9091
import SetTests
9192
import SevenBoom
9293
import Sim2DArray
@@ -95,11 +96,12 @@ import SortStrings
9596
import StackPromo
9697
import StaticArray
9798
import StrComplexWalk
98-
import StrToInt
9999
import StringBuilder
100100
import StringInterpolation
101101
import StringTests
102102
import StringWalk
103+
import StrToInt
104+
import Suffix
103105
import SuperChars
104106
import TwoSum
105107
import TypeFlood
@@ -121,9 +123,9 @@ precommitTests = [
121123
"ArrayAppendReserved": run_ArrayAppendReserved,
122124
"ArrayAppendSequence": run_ArrayAppendSequence,
123125
"ArrayAppendStrings": run_ArrayAppendStrings,
124-
"ArrayAppendASCII": run_ArrayAppendAscii,
125-
"ArrayAppendLatin1": run_ArrayAppendLatin1,
126-
"ArrayAppendUTF16": run_ArrayAppendUTF16,
126+
"ArrayAppendASCII": run_ArrayAppendAscii,
127+
"ArrayAppendLatin1": run_ArrayAppendLatin1,
128+
"ArrayAppendUTF16": run_ArrayAppendUTF16,
127129
"ArrayAppendToFromGeneric": run_ArrayAppendToFromGeneric,
128130
"ArrayAppendToGeneric": run_ArrayAppendToGeneric,
129131
"ArrayPlusEqualSingleElementCollection": run_ArrayPlusEqualSingleElementCollection,
@@ -161,6 +163,9 @@ precommitTests = [
161163
"DictionaryRemoveOfObjects": run_DictionaryRemoveOfObjects,
162164
"DictionarySwap": run_DictionarySwap,
163165
"DictionarySwapOfObjects": run_DictionarySwapOfObjects,
166+
"DropLastAnySequence": run_DropLastAnySequence,
167+
"DropLastCountableRange": run_DropLastCountableRange,
168+
"DropLastSequence": run_DropLastSequence,
164169
"ErrorHandling": run_ErrorHandling,
165170
"GlobalClass": run_GlobalClass,
166171
"Hanoi": run_Hanoi,
@@ -273,6 +278,9 @@ precommitTests = [
273278
"StringInterpolation": run_StringInterpolation,
274279
"StringWalk": run_StringWalk,
275280
"StringWithCString": run_StringWithCString,
281+
"SuffixAnySequence": run_SuffixAnySequence,
282+
"SuffixCountableRange": run_SuffixCountableRange,
283+
"SuffixSequence": run_SuffixSequence,
276284
"SuperChars": run_SuperChars,
277285
"TwoSum": run_TwoSum,
278286
"TypeFlood": run_TypeFlood,

0 commit comments

Comments
 (0)