blob: e55043cc3553129761a43aad4c3592c99dea330e [file] [log] [blame]
//===--- 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)")
}
}
}