|
15 | 15 | import TestsUtils
|
16 | 16 | import Foundation
|
17 | 17 |
|
| 18 | +let t: [BenchmarkCategory] = [.validation, .api, .String] |
| 19 | + |
18 | 20 | public let AngryPhonebook = [
|
19 | 21 | BenchmarkInfo(
|
20 |
| - name: "AngryPhonebook", |
21 |
| - runFunction: run_AngryPhonebook, |
22 |
| - tags: [.validation, .api, .String], |
23 |
| - legacyFactor: 7), |
| 22 | + name: "AngryPhonebook.Latin", |
| 23 | + runFunction: { angryPhonebook($0, latin) }, |
| 24 | + tags: t, |
| 25 | + setUpFunction: { blackHole(latin) }), |
24 | 26 | BenchmarkInfo(
|
25 |
| - name: "AngryPhonebookCyrillic", |
26 |
| - runFunction: run_AngryPhonebookCyrillic, |
27 |
| - tags: [.validation, .api, .String]), |
| 27 | + name: "AngryPhonebook.Armenian", |
| 28 | + runFunction: { angryPhonebook($0, armenian) }, |
| 29 | + tags: t, |
| 30 | + setUpFunction: { blackHole(armenian) }), |
28 | 31 | BenchmarkInfo(
|
29 |
| - name: "AngryPhonebookArmenian", |
30 |
| - runFunction: run_AngryPhonebookArmenian, |
31 |
| - tags: [.validation, .api, .String]) |
| 32 | + name: "AngryPhonebook.Cyrillic", |
| 33 | + runFunction: { angryPhonebook($0, cyrillic) }, |
| 34 | + tags: t, |
| 35 | + setUpFunction: { blackHole(cyrillic) }) |
32 | 36 | ]
|
33 | 37 |
|
34 |
| -let words = [ |
35 |
| - "James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", |
36 |
| - "Charles", "Thomas", "Christopher", "Daniel", "Matthew", "Donald", "Anthony", |
37 |
| - "Paul", "Mark", "George", "Steven", "Kenneth", "Andrew", "Edward", "Brian", |
38 |
| - "Joshua", "Kevin", "Ronald", "Timothy", "Jason", "Jeffrey", "Gary", "Ryan", |
39 |
| - "Nicholas", "Eric", "Stephen", "Jacob", "Larry", "Frank"] |
40 |
| - |
41 |
| -@inline(never) |
42 |
| -public func run_AngryPhonebook(_ N: Int) { |
43 |
| - // Permute the names. |
44 |
| - for _ in 1...N { |
45 |
| - for firstname in words { |
46 |
| - for lastname in words { |
47 |
| - _ = (firstname.uppercased(), lastname.lowercased()) |
48 |
| - } |
49 |
| - } |
50 |
| - } |
51 |
| -} |
| 38 | +// Workloads for various scripts. Always 20 names for 400 pairings. |
| 39 | +// To keep the performance of various scripts roughly comparable, aim for |
| 40 | +// a total length of approximately 120 characters. |
| 41 | +// E.g.: `latin.joined(separator: "").count == 118` |
52 | 42 |
|
53 |
| -let cyrillicNames: [String] = [ |
54 |
| - "Александр", "Аркадий", "Аня", "Даниил", "Дмитрий", "Эдуард", "Юрій 🇺🇦", "Давид", |
55 |
| - "Анна", "Дмитрий 🇺🇸", "Евгений", "👍🏼 Борис", "Владимир", "👍🏽 Артур", "Антон", |
56 |
| - "Антон 👍🏻", "Надія 👍", "Алёна", "Алиса", "Елена 🇷🇺", "Елизавета 👍🏾", "👍🏿 Инна", |
57 |
| - "Жанна 🇨🇦", "Ульяна", "Кристина", "Ксения", "👍🏿👍🏾👍🏽👍🏼👍🏻👍🇺🇦🇷🇺🇨🇦🇺🇸👨👩👧👦"] |
| 43 | +let latin = [ |
| 44 | + "James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", |
| 45 | + "Charles", "Thomas", "Jacob", "Daniel", "Matthew", "Donald", "Anthony", |
| 46 | + "Paul", "Mark", "George", "Steven", "Kenneth"] |
58 | 47 |
|
59 |
| -@inline(never) |
60 |
| -public func run_AngryPhonebookCyrillic(_ N: Int) { |
61 |
| - // Permute the names. |
62 |
| - for _ in 1...N { |
63 |
| - for firstname in cyrillicNames { |
64 |
| - for lastname in cyrillicNames { |
65 |
| - _ = (firstname.uppercased(), lastname.lowercased()) |
66 |
| - } |
67 |
| - } |
68 |
| - } |
69 |
| -} |
| 48 | +let armenian: [String] = [ |
| 49 | + "Արմեն", "Աննա", "Հարութ", "Միքայել", "Մարիա", "Դավիթ", "Վարդան", |
| 50 | + "Նարինե", "Տիգրան", "Տաթևիկ", "Թագուհի", "Թամարա", "Ազնաուր", "Գրիգոր", |
| 51 | + "Կոմիտաս", "Հայկ", "Գառնիկ", "Վահրամ", "Վահագն", "Գևորգ"] |
70 | 52 |
|
71 |
| -let armenianNames: [String] = [ |
72 |
| - "Արմեն 🇦🇲", "Աննա", "Հարություն", "Միքայել", "Մարիա", "Դավիթ", "Վարդան", "Նարինե", |
73 |
| - "Հռիփսիմե", "Տիգրան👍", "Տաթև", "Ադամ", "Ազատ", "Ազնաւուր🇨🇦", "Գրիգոր", "Անի", |
74 |
| - "Լիլիթ👍🏽", "Հայկ👍🏼", "Անդրանիկ", "Գառնիկ 👨👩👧👦", "Վահրամ", "Վահագն👍🏿", "Գևորգ", |
75 |
| - "Թագուհի 🇺🇸", "Թամարա👍🏻", "Արամ", "Արսեն", "Կոմիտաս", "👍🏿👍🏾👍🏽👍🏼👍🏻👍🇦🇲🇨🇦🇺🇸👨👩👧👦"] |
| 53 | +let cyrillic: [String] = [ |
| 54 | + "Ульяна", "Аркадий", "Аня", "Даниил", "Дмитрий", "Эдуард", "Юрій", "Давид", |
| 55 | + "Анна", "Дмитрий", "Евгений", "Борис", "Ксения", "Артур", "Аполлон", |
| 56 | + "Соломон", "Николай", "Кристи", "Надежда", "Спартак"] |
76 | 57 |
|
77 | 58 | @inline(never)
|
78 |
| -public func run_AngryPhonebookArmenian(_ N: Int) { |
| 59 | +public func angryPhonebook(_ N: Int, _ names: [String]) { |
| 60 | + assert(names.count == 20) |
79 | 61 | // Permute the names.
|
80 | 62 | for _ in 1...N {
|
81 |
| - for firstname in armenianNames { |
82 |
| - for lastname in armenianNames { |
83 |
| - _ = (firstname.uppercased(), lastname.lowercased()) |
| 63 | + for firstname in names { |
| 64 | + for lastname in names { |
| 65 | + blackHole((firstname.uppercased(), lastname.lowercased())) |
84 | 66 | }
|
85 | 67 | }
|
86 | 68 | }
|
|
0 commit comments