Skip to content

Commit 49c3547

Browse files
committed
Merge remote-tracking branch 'origin/master' into rename-conflicting-classes-and-methods
2 parents 317451c + 6d1db52 commit 49c3547

File tree

1,340 files changed

+23224
-17912
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,340 files changed

+23224
-17912
lines changed

CHANGELOG.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,20 @@ CHANGELOG
2424
Swift 5.0
2525
---------
2626

27+
* [SE-0227][]:
28+
29+
Key paths now support the `\.self` keypath, which is a `WritableKeyPath`
30+
that refers to its entire input value:
31+
32+
```swift
33+
let id = \Int.self
34+
35+
var x = 2
36+
print(x[keyPath: id]) // prints 2
37+
x[keyPath: id] = 3
38+
print(x[keyPath: id]) // prints 3
39+
```
40+
2741
* [SE-0214][]:
2842

2943
Renamed the `DictionaryLiteral` type to `KeyValuePairs`.
@@ -72,6 +86,8 @@ Swift 5.0
7286
Swift 4.2
7387
---------
7488

89+
### 2018-09-17 (Xcode 10.0)
90+
7591
* [SE-0194][]
7692

7793
The new CaseIterable protocol describes types which have a static
@@ -277,8 +293,6 @@ Swift 4.2
277293
conditionally conforms to `P`, will succeed when the conditional
278294
requirements are met.
279295

280-
**Add new entries to the top of this section, not here!**
281-
282296
Swift 4.1
283297
---------
284298

CMakeLists.txt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -860,15 +860,14 @@ function(swift_icu_variables_set sdk arch result)
860860
endif()
861861
endfunction()
862862

863-
# ICU is provided through CoreFoundation on Darwin. On other hosts, assume that
864-
# we are compiling for the build as the host. In such a case, if the ICU
863+
# ICU is provided through CoreFoundation on Darwin. On other hosts, if the ICU
865864
# unicode and i18n include and library paths are not defined, perform a standard
866865
# package lookup. Otherwise, rely on the paths specified by the user. These
867866
# need to be defined when cross-compiling.
868867
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
869868
if(SWIFT_BUILD_STDLIB OR SWIFT_BUILD_SDK_OVERLAY)
870-
swift_icu_variables_set("${SWIFT_HOST_VARIANT_SDK_default}"
871-
"${SWIFT_HOST_VARIANT_ARCH_default}"
869+
swift_icu_variables_set("${SWIFT_PRIMARY_VARIANT_SDK}"
870+
"${SWIFT_PRIMARY_VARIANT_ARCH}"
872871
ICU_CONFIGURED)
873872
if("${SWIFT_PATH_TO_LIBICU_BUILD}" STREQUAL "" AND NOT ${ICU_CONFIGURED})
874873
find_package(ICU REQUIRED COMPONENTS uc i18n)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ supported host development operating systems.
7171

7272
#### macOS
7373

74-
To build for macOS, you need [Xcode 10 beta 6](https://developer.apple.com/xcode/downloads/).
74+
To build for macOS, you need [Xcode 10.0](https://developer.apple.com/xcode/downloads/).
7575
The required version of Xcode changes frequently, and is often a beta release.
7676
Check this document or the host information on <https://ci.swift.org> for the
7777
current required version.

benchmark/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ set(SWIFT_BENCH_MODULES
5656
single-source/Chars
5757
single-source/ClassArrayGetter
5858
single-source/Combos
59+
single-source/CountAlgo
5960
single-source/DataBenchmarks
6061
single-source/DeadArray
6162
single-source/DictOfArraysToArrayOfDicts

benchmark/scripts/Benchmark_Driver

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ class BenchmarkDoctor(object):
434434
measurements = dict(
435435
[('{0} {1} i{2}{3}'.format(benchmark, o, i, suffix),
436436
self.driver.run(benchmark, num_samples=s, num_iters=i,
437-
verbose=True))
437+
verbose=True, measure_memory=True))
438438
for o in opts
439439
for s, i in run_args
440440
for suffix in list('abcde')

benchmark/scripts/compare_perf_tests.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class `ReportFormatter` creates the test comparison report in specified format.
3434
import sys
3535
from bisect import bisect, bisect_left, bisect_right
3636
from collections import namedtuple
37+
from decimal import Decimal, ROUND_HALF_EVEN
3738
from math import sqrt
3839

3940

@@ -141,20 +142,32 @@ def max(self):
141142
"""Maximum sampled value."""
142143
return self.samples[-1].runtime
143144

145+
def quantile(self, q):
146+
"""Return runtime of a sample nearest to the quantile.
147+
148+
Explicitly uses round-half-to-even rounding algorithm to match the
149+
behavior of numpy's quantile(interpolation='nearest') and quantile
150+
estimate type R-3, SAS-2. See:
151+
https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample
152+
"""
153+
index = int(Decimal((self.count - 1) * Decimal(q))
154+
.quantize(0, ROUND_HALF_EVEN))
155+
return self.samples[index].runtime
156+
144157
@property
145158
def median(self):
146159
"""Median sampled value."""
147-
return self.samples[self.count / 2].runtime
160+
return self.quantile(0.5)
148161

149162
@property
150163
def q1(self):
151164
"""First Quartile (25th Percentile)."""
152-
return self.samples[self.count / 4].runtime
165+
return self.quantile(0.25)
153166

154167
@property
155168
def q3(self):
156169
"""Third Quartile (75th Percentile)."""
157-
return self.samples[(self.count / 2) + (self.count / 4)].runtime
170+
return self.quantile(0.75)
158171

159172
@property
160173
def iqr(self):
@@ -487,7 +500,7 @@ def __init__(self, comparator, old_branch, new_branch, changes_only,
487500
{0} ({1}): {2}"""
488501

489502
PERFORMANCE_TEST_RESULT_HEADER = ('TEST', 'MIN', 'MAX', 'MEAN', 'MAX_RSS')
490-
RESULT_COMPARISON_HEADER = ('TEST', 'OLD', 'NEW', 'DELTA', 'SPEEDUP')
503+
RESULT_COMPARISON_HEADER = ('TEST', 'OLD', 'NEW', 'DELTA', 'RATIO')
491504

492505
@staticmethod
493506
def header_for(result):

benchmark/scripts/test_Benchmark_Driver.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -476,10 +476,10 @@ def test_measure_10_independent_1s_benchmark_series(self):
476476
# 5x i1 series, with 300 μs runtime its possible to take 4098
477477
# samples/s, but it should be capped at 2k
478478
([(_run('B1', num_samples=2048, num_iters=1,
479-
verbose=True), _PTR(min=300))] * 5) +
479+
verbose=True, measure_memory=True), _PTR(min=300))] * 5) +
480480
# 5x i2 series
481481
([(_run('B1', num_samples=2048, num_iters=2,
482-
verbose=True), _PTR(min=300))] * 5)
482+
verbose=True, measure_memory=True), _PTR(min=300))] * 5)
483483
))
484484
doctor = BenchmarkDoctor(self.args, driver)
485485
with captured_output() as (out, _):

benchmark/scripts/test_compare_perf_tests.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,13 @@ def test_computes_five_number_summary(self):
7575
self.samples, (1000, 1000, 1000, 1000, 1000))
7676
self.samples.add(Sample(2, 1, 1100))
7777
self.assertEqualFiveNumberSummary(
78-
self.samples, (1000, 1000, 1100, 1100, 1100))
78+
self.samples, (1000, 1000, 1000, 1100, 1100))
7979
self.samples.add(Sample(3, 1, 1050))
8080
self.assertEqualFiveNumberSummary(
81-
self.samples, (1000, 1000, 1050, 1050, 1100))
81+
self.samples, (1000, 1000, 1050, 1100, 1100))
8282
self.samples.add(Sample(4, 1, 1025))
8383
self.assertEqualFiveNumberSummary(
84-
self.samples, (1000, 1025, 1050, 1100, 1100))
84+
self.samples, (1000, 1025, 1050, 1050, 1100))
8585
self.samples.add(Sample(5, 1, 1075))
8686
self.assertEqualFiveNumberSummary(
8787
self.samples, (1000, 1025, 1050, 1075, 1100))
@@ -156,11 +156,12 @@ def test_excludes_outliers_zero_IQR(self):
156156
self.samples.add(Sample(0, 2, 23))
157157
self.samples.add(Sample(1, 2, 18))
158158
self.samples.add(Sample(2, 2, 18))
159+
self.samples.add(Sample(3, 2, 18))
159160
self.assertEquals(self.samples.iqr, 0)
160161

161162
self.samples.exclude_outliers()
162163

163-
self.assertEquals(self.samples.count, 2)
164+
self.assertEquals(self.samples.count, 3)
164165
self.assertEqualStats(
165166
(self.samples.min, self.samples.max), (18, 18))
166167

@@ -368,7 +369,6 @@ def test_parse_results_verbose(self):
368369
Sample 0,11812
369370
Measuring with scale 90.
370371
Sample 1,13898
371-
Measuring with scale 91.
372372
Sample 2,11467
373373
1,AngryPhonebook,3,11467,13898,12392,1315,11812
374374
Running Array2D for 3 samples.
@@ -388,7 +388,7 @@ def test_parse_results_verbose(self):
388388
)
389389
self.assertEquals(r.num_samples, r.samples.num_samples)
390390
self.assertEquals(results[0].samples.all_samples,
391-
[(0, 78, 11812), (1, 90, 13898), (2, 91, 11467)])
391+
[(0, 78, 11812), (1, 90, 13898), (2, 90, 11467)])
392392

393393
r = results[1]
394394
self.assertEquals(
@@ -587,21 +587,21 @@ def test_column_headers(self):
587587
comparison_result = self.tc.increased[0]
588588
self.assertEquals(
589589
ReportFormatter.header_for(comparison_result),
590-
('TEST', 'OLD', 'NEW', 'DELTA', 'SPEEDUP')
590+
('TEST', 'OLD', 'NEW', 'DELTA', 'RATIO')
591591
)
592592
self.assert_markdown_contains([
593-
'TEST | OLD | NEW | DELTA | SPEEDUP',
593+
'TEST | OLD | NEW | DELTA | RATIO',
594594
'--- | --- | --- | --- | --- ',
595595
'TEST | MIN | MAX | MEAN | MAX_RSS'])
596596
self.assert_git_contains([
597-
'TEST OLD NEW DELTA SPEEDUP',
597+
'TEST OLD NEW DELTA RATIO',
598598
'TEST MIN MAX MEAN MAX_RSS'])
599599
self.assert_html_contains([
600600
"""
601601
<th align='left'>OLD</th>
602602
<th align='left'>NEW</th>
603603
<th align='left'>DELTA</th>
604-
<th align='left'>SPEEDUP</th>""",
604+
<th align='left'>RATIO</th>""",
605605
"""
606606
<th align='left'>MIN</th>
607607
<th align='left'>MAX</th>
@@ -764,12 +764,12 @@ class Test_compare_perf_tests_main(OldAndNewLog, FileSystemIntegration):
764764
"""Integration test that invokes the whole comparison script."""
765765
markdown = [
766766
'<summary>Regression (1)</summary>',
767-
'TEST | OLD | NEW | DELTA | SPEEDUP',
767+
'TEST | OLD | NEW | DELTA | RATIO',
768768
'BitCount | 3 | 9 | +199.9% | **0.33x**',
769769
]
770770
git = [
771771
'Regression (1):',
772-
'TEST OLD NEW DELTA SPEEDUP',
772+
'TEST OLD NEW DELTA RATIO',
773773
'BitCount 3 9 +199.9% **0.33x**',
774774
]
775775
html = ['<html>', "<td align='left'>BitCount</td>"]
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
//===--- CountAlgo.swift --------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2018 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+
import TestsUtils
13+
14+
public let CountAlgo = [
15+
BenchmarkInfo(
16+
name: "CountAlgoArray",
17+
runFunction: run_CountAlgoArray,
18+
tags: [.validation, .api]),
19+
BenchmarkInfo(
20+
name: "CountAlgoString",
21+
runFunction: run_CountAlgoString,
22+
tags: [.validation, .api]),
23+
]
24+
25+
@inline(never)
26+
public func run_CountAlgoArray(_ N: Int) {
27+
for _ in 1...10*N {
28+
CheckResults(numbers.count(where: { $0 & 4095 == 0 }) == 25)
29+
}
30+
}
31+
32+
@inline(never)
33+
public func run_CountAlgoString(_ N: Int) {
34+
let vowels = Set("aeiou")
35+
for _ in 1...5*N {
36+
CheckResults(text.count(where: vowels.contains) == 2014)
37+
}
38+
}
39+
40+
let numbers = Array(0..<100_000)
41+
42+
let text = """
43+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus
44+
dictum tellus placerat ultrices. Proin mauris risus, eleifend a elit ut,
45+
semper consectetur nibh. Nulla ultricies est a vehicula rhoncus. Morbi
46+
sollicitudin efficitur est a hendrerit. Interdum et malesuada fames ac ante
47+
ipsum primis in faucibus. Lorem ipsum dolor sit amet, consectetur
48+
adipiscing elit. Nulla facilisi. Sed euismod sagittis laoreet. Ut elementum
49+
tempus ultrices. Donec convallis mauris at faucibus maximus.
50+
Nullam in nunc sit amet ante tristique elementum quis ut eros. Fusce
51+
dignissim, ante at efficitur dapibus, ex massa convallis nibh, et venenatis
52+
leo leo sit amet nisl. Lorem ipsum dolor sit amet, consectetur adipiscing
53+
elit. Quisque sed mi eu mi rutrum accumsan vel non massa. Nunc condimentum,
54+
arcu eget interdum hendrerit, ipsum mi pretium felis, ut mollis erat metus
55+
non est. Donec eu sapien id urna lobortis eleifend et eu ipsum. Mauris
56+
purus dolor, consequat ac nulla a, vehicula sollicitudin nulla.
57+
Phasellus a congue diam. Curabitur sed orci at sem laoreet facilisis eget
58+
quis est. Pellentesque habitant morbi tristique senectus et netus et
59+
malesuada fames ac turpis egestas. Maecenas justo tellus, efficitur id
60+
velit at, mollis pellentesque mi. Vivamus maximus nibh et ipsum porttitor
61+
facilisis. Curabitur cursus lobortis erat. Sed vitae eros et dolor feugiat
62+
consequat. In ac massa in odio gravida dignissim. Praesent aliquam gravida
63+
ullamcorper.
64+
Etiam feugiat sit amet odio sed tincidunt. Duis dolor odio, posuere at
65+
pretium sed, dignissim eu diam. Aenean eu convallis orci, vitae finibus
66+
erat. Aliquam nec mollis tellus. Morbi luctus sed quam et vestibulum.
67+
Praesent id diam tempus, consectetur tortor vel, auctor orci. Aliquam
68+
congue ex eu sagittis sodales. Suspendisse non convallis nulla. Praesent
69+
elementum semper augue, et fringilla risus ullamcorper id. Fusce eu lorem
70+
sit amet augue fermentum tincidunt. In aliquam libero sit amet dui rhoncus,
71+
ac scelerisque sem porttitor. Cras venenatis, nisi quis ullamcorper
72+
dapibus, odio dolor rutrum magna, vel pellentesque sem lectus in tellus.
73+
Proin faucibus leo iaculis nulla egestas molestie.
74+
Phasellus vitae tortor vitae erat elementum feugiat vel vel enim. Phasellus
75+
fringilla lacus sed venenatis dapibus. Phasellus sagittis vel neque ut
76+
varius. Proin aliquam, lectus sit amet auctor finibus, lorem libero
77+
pellentesque turpis, ac condimentum augue felis sit amet sem. Pellentesque
78+
pharetra nisl nec est congue, in posuere felis maximus. In ut nulla
79+
sodales, pharetra neque et, venenatis dui. Mauris imperdiet, arcu vel
80+
hendrerit vehicula, elit massa consectetur purus, eu blandit nunc orci sit
81+
amet turpis. Vestibulum ultricies id lorem id maximus. Pellentesque
82+
feugiat, lacus et aliquet consequat, mi leo vehicula justo, dapibus dictum
83+
mi quam convallis magna. Quisque id pulvinar dui, consequat gravida nisl.
84+
Nam nec justo venenatis, tincidunt enim a, iaculis odio. Maecenas eget
85+
lorem posuere, euismod nisl vel, pulvinar ex. Maecenas vitae risus ipsum.
86+
Proin congue sem ante, sit amet sagittis odio mattis sit amet. Nullam et
87+
nisi nulla.
88+
Donec vel hendrerit metus. Praesent quis finibus erat. Aliquam erat
89+
volutpat. Fusce sit amet ultricies tellus, vitae dictum dolor. Morbi auctor
90+
dolor vel ligula pretium aliquam. Aenean lobortis vel magna vel ultricies.
91+
Aenean porta urna vitae ornare porta. Quisque pretium dui diam, quis
92+
iaculis odio venenatis non. Maecenas at lacus et ligula tincidunt feugiat
93+
eu vel ipsum. Proin fermentum elit et quam tempus, eget pulvinar nisl
94+
pharetra.
95+
Mauris sodales tempus erat in lobortis. Duis vitae lacinia sapien.
96+
Pellentesque vitae massa eget orci sodales aliquet. Orci varius natoque
97+
penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce
98+
nisi arcu, egestas vel consectetur eu, auctor et metus. In ultricies ligula
99+
felis, vitae pellentesque dolor tempor ac. Praesent mi magna, ultrices ut
100+
ultrices vel, sollicitudin a leo.
101+
Nam porta, nisi in scelerisque consequat, leo lacus accumsan massa,
102+
venenatis faucibus tellus quam eget tellus. Curabitur pulvinar, tellus ac
103+
facilisis consectetur, lacus lacus venenatis est, eu pretium orci augue
104+
gravida nunc. Aenean odio tellus, facilisis et finibus id, varius vitae
105+
diam. Aenean at suscipit sem. Suspendisse porta neque at nibh semper, sit
106+
amet suscipit libero egestas. Donec commodo vitae justo vitae laoreet.
107+
Suspendisse dignissim erat id ante maximus porta. Curabitur hendrerit
108+
maximus odio, et maximus felis malesuada eu. Integer dapibus finibus diam,
109+
quis convallis metus bibendum non.
110+
In vel vulputate nisi, non lacinia nunc. Nullam vitae ligula finibus,
111+
varius arcu in, pellentesque ipsum. Morbi vel velit tincidunt quam cursus
112+
lacinia non in neque. Suspendisse id feugiat nibh. Vestibulum egestas eu
113+
leo viverra fringilla. Curabitur ultrices sollicitudin libero, non sagittis
114+
felis consectetur id. Aenean non metus eget leo ornare porta sed in metus.
115+
Nullam quis fermentum sapien, sit amet sodales mi. Maecenas nec purus urna.
116+
Phasellus condimentum enim nec magna convallis, eu lacinia libero
117+
scelerisque. Suspendisse justo libero, maximus in auctor id, euismod quis
118+
risus. Nam eget augue diam. Ut id risus pulvinar elit consectetur varius.
119+
Aliquam tincidunt tortor pretium feugiat tempor. Nunc nec feugiat ex.
120+
Ut pulvinar augue eget pharetra vehicula. Phasellus malesuada tempor sem,
121+
ut tincidunt velit convallis in. Vivamus luctus libero vitae massa tempus,
122+
id elementum urna iaculis. Sed eleifend quis purus quis convallis. In
123+
rhoncus interdum mollis. Pellentesque dictum euismod felis, eget lacinia
124+
elit blandit vel. Praesent elit velit, pharetra a sodales in, cursus vitae
125+
tortor. In vitae scelerisque tellus.
126+
"""

0 commit comments

Comments
 (0)