Skip to content

Benchmarks for dropLast and suffix #7420

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions benchmark/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@ set(SWIFT_BENCH_MODULES
single-source/Chars
single-source/ClassArrayGetter
single-source/DeadArray
single-source/DictTest
single-source/DictTest2
single-source/DictTest3
single-source/DictionaryBridge
single-source/DictionaryLiteral
single-source/DictionaryRemove
single-source/DictionarySwap
single-source/DictTest
single-source/DictTest2
single-source/DictTest3
single-source/DropLast
single-source/ErrorHandling
single-source/Fibonacci
single-source/GlobalClass
Expand All @@ -58,10 +59,10 @@ set(SWIFT_BENCH_MODULES
single-source/Memset
single-source/MonteCarloE
single-source/MonteCarloPi
single-source/NopDeinit
single-source/NSDictionaryCastToSwift
single-source/NSError
single-source/NSStringConversion
single-source/NopDeinit
single-source/ObjectAllocation
single-source/ObjectiveCBridging
single-source/ObjectiveCBridgingStubs
Expand All @@ -78,11 +79,11 @@ set(SWIFT_BENCH_MODULES
single-source/Prims
single-source/ProtocolDispatch
single-source/ProtocolDispatch2
single-source/RC4
single-source/RGBHistogram
single-source/RangeAssignment
single-source/RC4
single-source/RecursiveOwnedParameter
single-source/ReversedCollections
single-source/RGBHistogram
single-source/SetTests
single-source/SevenBoom
single-source/Sim2DArray
Expand All @@ -91,11 +92,12 @@ set(SWIFT_BENCH_MODULES
single-source/StackPromo
single-source/StaticArray
single-source/StrComplexWalk
single-source/StrToInt
single-source/StringBuilder
single-source/StringInterpolation
single-source/StringTests
single-source/StringWalk
single-source/StrToInt
single-source/Suffix
single-source/SuperChars
single-source/TwoSum
single-source/TypeFlood
Expand Down
86 changes: 86 additions & 0 deletions benchmark/single-source/DropLast.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
//===--- DropLast.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
//
//===----------------------------------------------------------------------===//

import TestsUtils

let reps = 1
let sequenceCount = 4096
let prefixCount = 1024
let dropCount = sequenceCount - prefixCount
let sumCount = prefixCount * (prefixCount-1) / 2

@inline(never)
public func run_DropLastCountableRange(_ N: Int) {
let s = 0 ..< sequenceCount
for _ in 1...20*N {
for _ in 1...reps {
var result = 0
for element in s.dropLast(dropCount) {
result += element
}
CheckResults(result == sumCount,
"IncorrectResults in DropLastCountableRange: \(result) != \(sumCount)")
}
}
}

fileprivate struct MySequence: Sequence {
let range: CountableRange<Int>
public func makeIterator() -> IndexingIterator<CountableRange<Int>> {
return range.makeIterator()
}
}

@inline(never)
public func run_DropLastSequence(_ N: Int) {
let s = MySequence(range: 0 ..< sequenceCount)
for _ in 1...20*N {
for _ in 1...reps {
var result = 0
for element in s.dropLast(dropCount) {
result += element
}
CheckResults(result == sumCount,
"IncorrectResults in DropLastSequence: \(result) != \(sumCount)")
}
}
}

@inline(never)
public func run_DropLastAnySequence(_ N: Int) {
let s = AnySequence(0 ..< sequenceCount)
for _ in 1...20*N {
for _ in 1...reps {
var result = 0
for element in s.dropLast(dropCount) {
result += element
}
CheckResults(result == sumCount,
"IncorrectResults in DropLastAnySequence: \(result) != \(sumCount)")
}
}
}

@inline(never)
public func run_DropLastArray(_ N: Int) {
let s = Array(0 ..< sequenceCount)
for _ in 1...20*N {
for _ in 1...reps {
var result = 0
for element in s.dropLast(dropCount) {
result += element
}
CheckResults(result == sumCount,
"IncorrectResults in DropLastArray: \(result) != \(sumCount)")
}
}
}
85 changes: 85 additions & 0 deletions benchmark/single-source/Suffix.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
//===--- Suffix.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
//
//===----------------------------------------------------------------------===//

import TestsUtils

let reps = 1
let sequenceCount = 4096
let suffixCount = 1024
let sumCount = suffixCount * (2 * sequenceCount - suffixCount - 1) / 2

@inline(never)
public func run_SuffixCountableRange(_ N: Int) {
let s = 0 ..< sequenceCount
for _ in 1...20*N {
for _ in 1...reps {
var result = 0
for element in s.suffix(suffixCount) {
result += element
}
CheckResults(result == sumCount,
"IncorrectResults in SuffixCountableRange: \(result) != \(sumCount)")
}
}
}

fileprivate struct MySequence: Sequence {
let range: CountableRange<Int>
public func makeIterator() -> IndexingIterator<CountableRange<Int>> {
return range.makeIterator()
}
}

@inline(never)
public func run_SuffixSequence(_ N: Int) {
let s = MySequence(range: 0 ..< sequenceCount)
for _ in 1...20*N {
for _ in 1...reps {
var result = 0
for element in s.suffix(suffixCount) {
result += element
}
CheckResults(result == sumCount,
"IncorrectResults in SuffixSequence: \(result) != \(sumCount)")
}
}
}

@inline(never)
public func run_SuffixAnySequence(_ N: Int) {
let s = AnySequence(0 ..< sequenceCount)
for _ in 1...20*N {
for _ in 1...reps {
var result = 0
for element in s.suffix(suffixCount) {
result += element
}
CheckResults(result == sumCount,
"IncorrectResults in SuffixAnySequence: \(result) != \(sumCount)")
}
}
}

@inline(never)
public func run_SuffixArray(_ N: Int) {
let s = Array(0 ..< sequenceCount)
for _ in 1...20*N {
for _ in 1...reps {
var result = 0
for element in s.suffix(suffixCount) {
result += element
}
CheckResults(result == sumCount,
"IncorrectResults in SuffixArray: \(result) != \(sumCount)")
}
}
}
24 changes: 17 additions & 7 deletions benchmark/utils/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,14 @@ import CharacterLiteralsSmall
import Chars
import ClassArrayGetter
import DeadArray
import DictTest
import DictTest2
import DictTest3
import DictionaryBridge
import DictionaryLiteral
import DictionaryRemove
import DictionarySwap
import DictTest
import DictTest2
import DictTest3
import DropLast
import ErrorHandling
import Fibonacci
import GlobalClass
Expand All @@ -63,10 +64,10 @@ import MapReduce
import Memset
import MonteCarloE
import MonteCarloPi
import NopDeinit
import NSDictionaryCastToSwift
import NSError
import NSStringConversion
import NopDeinit
import ObjectAllocation
import ObjectiveCBridging
import ObjectiveCBridgingStubs
Expand All @@ -83,11 +84,11 @@ import PopFrontGeneric
import Prims
import ProtocolDispatch
import ProtocolDispatch2
import RC4
import RGBHistogram
import RangeAssignment
import RC4
import RecursiveOwnedParameter
import ReversedCollections
import RGBHistogram
import SetTests
import SevenBoom
import Sim2DArray
Expand All @@ -96,11 +97,12 @@ import SortStrings
import StackPromo
import StaticArray
import StrComplexWalk
import StrToInt
import StringBuilder
import StringInterpolation
import StringTests
import StringWalk
import StrToInt
import Suffix
import SuperChars
import TwoSum
import TypeFlood
Expand Down Expand Up @@ -162,6 +164,10 @@ precommitTests = [
"DictionaryRemoveOfObjects": run_DictionaryRemoveOfObjects,
"DictionarySwap": run_DictionarySwap,
"DictionarySwapOfObjects": run_DictionarySwapOfObjects,
"DropLastAnySequence": run_DropLastAnySequence,
"DropLastArray": run_DropLastArray,
"DropLastCountableRange": run_DropLastCountableRange,
"DropLastSequence": run_DropLastSequence,
"ErrorHandling": run_ErrorHandling,
"GlobalClass": run_GlobalClass,
"Hanoi": run_Hanoi,
Expand Down Expand Up @@ -276,6 +282,10 @@ precommitTests = [
"StringInterpolation": run_StringInterpolation,
"StringWalk": run_StringWalk,
"StringWithCString": run_StringWithCString,
"SuffixAnySequence": run_SuffixAnySequence,
"SuffixArray": run_SuffixArray,
"SuffixCountableRange": run_SuffixCountableRange,
"SuffixSequence": run_SuffixSequence,
"SuperChars": run_SuperChars,
"TwoSum": run_TwoSum,
"TypeFlood": run_TypeFlood,
Expand Down