16
16
// scripts/generate_harness/generate_harness.py to regenerate this file.
17
17
////////////////////////////////////////////////////////////////////////////////
18
18
19
-
20
- // Test String subscript performance.
21
19
//
22
- // Subscript has a slow path that initializes a global variable:
23
- // Swift._cocoaStringSubscript.addressor. Global optimization would
24
- // normally hoist the initializer outside the inner loop (over
25
- // unicodeScalars), forcing the initializer to be called on each
26
- // lap. However, no that the cocoa code is properly marked "slowPath",
27
- // no hoisting should occur.
20
+ // Test String iteration performance over a variety of workloads, languages,
21
+ // and symbols.
22
+ //
23
+
28
24
import TestsUtils
29
25
30
26
var count : Int = 0
@@ -70,6 +66,8 @@ let japanese = "今回のアップデートでSwiftに大幅な改良が施さ
70
66
let chinese = " Swift 是面向 Apple 平台的编程语言,功能强大且直观易用,而本次更新对其进行了全面优化。 "
71
67
let korean = " 이번 업데이트에서는 강력하면서도 직관적인 Apple 플랫폼용 프로그래밍 언어인 Swift를 완벽히 개선하였습니다. "
72
68
let russian = " в чащах юга жил-был цитрус? да, но фальшивый экземпляр "
69
+ let punctuated = " \u{201c} Hello \u{2010} world \u{2026} \u{201d} "
70
+ let punctuatedJapanese = " \u{300c} \u{300e} 今日は \u{3001} 世界 \u{3002} \u{300f} \u{300d} "
73
71
74
72
// A workload that's mostly Latin characters, with occasional emoji
75
73
// interspersed. Common for tweets.
@@ -91,7 +89,6 @@ let unicodeScalarsMultiplier = baseMultiplier
91
89
let charactersMultiplier = baseMultiplier / 5
92
90
93
91
94
-
95
92
@inline ( never)
96
93
public func run_StringWalk_ascii_unicodeScalars( _ N: Int ) {
97
94
for _ in 1 ... unicodeScalarsMultiplier*N {
@@ -177,7 +174,6 @@ public func run_CharIndexing_ascii_unicodeScalars_Backwards(_ N: Int) {
177
174
178
175
179
176
180
-
181
177
@inline ( never)
182
178
public func run_StringWalk_utf16_unicodeScalars( _ N: Int ) {
183
179
for _ in 1 ... unicodeScalarsMultiplier*N {
@@ -263,7 +259,6 @@ public func run_CharIndexing_utf16_unicodeScalars_Backwards(_ N: Int) {
263
259
264
260
265
261
266
-
267
262
@inline ( never)
268
263
public func run_StringWalk_tweet_unicodeScalars( _ N: Int ) {
269
264
for _ in 1 ... unicodeScalarsMultiplier*N {
@@ -349,7 +344,6 @@ public func run_CharIndexing_tweet_unicodeScalars_Backwards(_ N: Int) {
349
344
350
345
351
346
352
-
353
347
@inline ( never)
354
348
public func run_StringWalk_japanese_unicodeScalars( _ N: Int ) {
355
349
for _ in 1 ... unicodeScalarsMultiplier*N {
@@ -435,7 +429,6 @@ public func run_CharIndexing_japanese_unicodeScalars_Backwards(_ N: Int) {
435
429
436
430
437
431
438
-
439
432
@inline ( never)
440
433
public func run_StringWalk_chinese_unicodeScalars( _ N: Int ) {
441
434
for _ in 1 ... unicodeScalarsMultiplier*N {
@@ -521,7 +514,6 @@ public func run_CharIndexing_chinese_unicodeScalars_Backwards(_ N: Int) {
521
514
522
515
523
516
524
-
525
517
@inline ( never)
526
518
public func run_StringWalk_korean_unicodeScalars( _ N: Int ) {
527
519
for _ in 1 ... unicodeScalarsMultiplier*N {
@@ -607,7 +599,6 @@ public func run_CharIndexing_korean_unicodeScalars_Backwards(_ N: Int) {
607
599
608
600
609
601
610
-
611
602
@inline ( never)
612
603
public func run_StringWalk_russian_unicodeScalars( _ N: Int ) {
613
604
for _ in 1 ... unicodeScalarsMultiplier*N {
@@ -692,3 +683,173 @@ public func run_CharIndexing_russian_unicodeScalars_Backwards(_ N: Int) {
692
683
693
684
694
685
686
+
687
+ @inline ( never)
688
+ public func run_StringWalk_punctuated_unicodeScalars( _ N: Int ) {
689
+ for _ in 1 ... unicodeScalarsMultiplier*N {
690
+ count_unicodeScalars ( punctuated. unicodeScalars)
691
+ }
692
+ }
693
+
694
+ @inline ( never)
695
+ public func run_StringWalk_punctuated_unicodeScalars_Backwards( _ N: Int ) {
696
+ for _ in 1 ... unicodeScalarsMultiplier*N {
697
+ count_unicodeScalars_rev ( punctuated. unicodeScalars. reversed ( ) )
698
+ }
699
+ }
700
+
701
+
702
+
703
+
704
+ @inline ( never)
705
+ public func run_StringWalk_punctuated_characters( _ N: Int ) {
706
+ for _ in 1 ... charactersMultiplier*N {
707
+ count_characters ( punctuated. characters)
708
+ }
709
+ }
710
+
711
+ @inline ( never)
712
+ public func run_StringWalk_punctuated_characters_Backwards( _ N: Int ) {
713
+ for _ in 1 ... charactersMultiplier*N {
714
+ count_characters_rev ( punctuated. characters. reversed ( ) )
715
+ }
716
+ }
717
+
718
+
719
+
720
+
721
+ let punctuatedCharacters = Array ( punctuated)
722
+
723
+ @inline ( never)
724
+ public func run_CharIteration_punctuated_unicodeScalars( _ N: Int ) {
725
+ for _ in 1 ... unicodeScalarsMultiplier*N {
726
+ for c in punctuatedCharacters {
727
+ for u in c. unicodeScalars {
728
+ count |= Int ( u. value)
729
+ }
730
+ }
731
+ }
732
+ }
733
+
734
+ @inline ( never)
735
+ public func run_CharIteration_punctuated_unicodeScalars_Backwards( _ N: Int ) {
736
+ for _ in 1 ... unicodeScalarsMultiplier*N {
737
+ for c in punctuatedCharacters {
738
+ for u in c. unicodeScalars. reversed ( ) {
739
+ count |= Int ( u. value)
740
+ }
741
+ }
742
+ }
743
+ }
744
+
745
+ @inline ( never)
746
+ public func run_CharIndexing_punctuated_unicodeScalars( _ N: Int ) {
747
+ for _ in 1 ... unicodeScalarsMultiplier*N {
748
+ for c in punctuatedCharacters {
749
+ let s = c. unicodeScalars
750
+ for i in s. indices {
751
+ count |= Int ( s [ i] . value)
752
+ }
753
+ }
754
+ }
755
+ }
756
+
757
+ @inline ( never)
758
+ public func run_CharIndexing_punctuated_unicodeScalars_Backwards( _ N: Int ) {
759
+ for _ in 1 ... unicodeScalarsMultiplier*N {
760
+ for c in punctuatedCharacters {
761
+ let s = c. unicodeScalars
762
+ for i in s. indices. reversed ( ) {
763
+ count |= Int ( s [ i] . value)
764
+ }
765
+ }
766
+ }
767
+ }
768
+
769
+
770
+
771
+
772
+ @inline ( never)
773
+ public func run_StringWalk_punctuatedJapanese_unicodeScalars( _ N: Int ) {
774
+ for _ in 1 ... unicodeScalarsMultiplier*N {
775
+ count_unicodeScalars ( punctuatedJapanese. unicodeScalars)
776
+ }
777
+ }
778
+
779
+ @inline ( never)
780
+ public func run_StringWalk_punctuatedJapanese_unicodeScalars_Backwards( _ N: Int ) {
781
+ for _ in 1 ... unicodeScalarsMultiplier*N {
782
+ count_unicodeScalars_rev ( punctuatedJapanese. unicodeScalars. reversed ( ) )
783
+ }
784
+ }
785
+
786
+
787
+
788
+
789
+ @inline ( never)
790
+ public func run_StringWalk_punctuatedJapanese_characters( _ N: Int ) {
791
+ for _ in 1 ... charactersMultiplier*N {
792
+ count_characters ( punctuatedJapanese. characters)
793
+ }
794
+ }
795
+
796
+ @inline ( never)
797
+ public func run_StringWalk_punctuatedJapanese_characters_Backwards( _ N: Int ) {
798
+ for _ in 1 ... charactersMultiplier*N {
799
+ count_characters_rev ( punctuatedJapanese. characters. reversed ( ) )
800
+ }
801
+ }
802
+
803
+
804
+
805
+
806
+ let punctuatedJapaneseCharacters = Array ( punctuatedJapanese)
807
+
808
+ @inline ( never)
809
+ public func run_CharIteration_punctuatedJapanese_unicodeScalars( _ N: Int ) {
810
+ for _ in 1 ... unicodeScalarsMultiplier*N {
811
+ for c in punctuatedJapaneseCharacters {
812
+ for u in c. unicodeScalars {
813
+ count |= Int ( u. value)
814
+ }
815
+ }
816
+ }
817
+ }
818
+
819
+ @inline ( never)
820
+ public func run_CharIteration_punctuatedJapanese_unicodeScalars_Backwards( _ N: Int ) {
821
+ for _ in 1 ... unicodeScalarsMultiplier*N {
822
+ for c in punctuatedJapaneseCharacters {
823
+ for u in c. unicodeScalars. reversed ( ) {
824
+ count |= Int ( u. value)
825
+ }
826
+ }
827
+ }
828
+ }
829
+
830
+ @inline ( never)
831
+ public func run_CharIndexing_punctuatedJapanese_unicodeScalars( _ N: Int ) {
832
+ for _ in 1 ... unicodeScalarsMultiplier*N {
833
+ for c in punctuatedJapaneseCharacters {
834
+ let s = c. unicodeScalars
835
+ for i in s. indices {
836
+ count |= Int ( s [ i] . value)
837
+ }
838
+ }
839
+ }
840
+ }
841
+
842
+ @inline ( never)
843
+ public func run_CharIndexing_punctuatedJapanese_unicodeScalars_Backwards( _ N: Int ) {
844
+ for _ in 1 ... unicodeScalarsMultiplier*N {
845
+ for c in punctuatedJapaneseCharacters {
846
+ let s = c. unicodeScalars
847
+ for i in s. indices. reversed ( ) {
848
+ count |= Int ( s [ i] . value)
849
+ }
850
+ }
851
+ }
852
+ }
853
+
854
+
855
+
0 commit comments