-
Notifications
You must be signed in to change notification settings - Fork 10.4k
/
Copy pathArrayRemoveAll.swift
55 lines (47 loc) · 1.26 KB
/
ArrayRemoveAll.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// This test checks the performance of removeAll
// on a non-uniquely referenced array.
import TestsUtils
public let benchmarks = [
BenchmarkInfo(
name: "Array.removeAll.keepingCapacity.Int",
runFunction: run_ArrayRemoveAll_Class,
tags: [.validation, .api, .Array],
setUpFunction: { blackHole(inputArray_Class) }
),
BenchmarkInfo(
name: "Array.removeAll.keepingCapacity.Object",
runFunction: run_ArrayRemoveAll_Int,
tags: [.validation, .api, .Array],
setUpFunction: { blackHole(inputArray_Int) }
)
]
class Slow {
public var num: Int
init(num: Int) {
self.num = num
}
}
let inputArray_Int: [Int] = Array(0..<500_000)
let inputArray_Class: [Slow] = (0..<50_000).map(Slow.init(num:))
@inline(never)
func removeAll<T>(_ arr: [T]) -> [T] {
var copy = arr
copy.removeAll(keepingCapacity: true)
return copy
}
@inline(never)
func run_ArrayRemoveAll_Class(_ n: Int) {
var copy = removeAll(inputArray_Class);
for _ in 1..<n {
copy = removeAll(inputArray_Class)
}
check(copy.capacity == inputArray_Class.capacity)
}
@inline(never)
func run_ArrayRemoveAll_Int(_ n: Int) {
var copy = removeAll(inputArray_Int);
for _ in 1..<n {
copy = removeAll(inputArray_Int)
}
check(copy.capacity == inputArray_Int.capacity)
}