1ac7031b2SMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
2ac7031b2SMark de Wever // See https://llvm.org/LICENSE.txt for license information.
3ac7031b2SMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4ac7031b2SMark de Wever //
5ac7031b2SMark de Wever //===----------------------------------------------------------------------===//
6ac7031b2SMark de Wever 
7ac7031b2SMark de Wever #ifndef _LIBCPP_HAS_NO_UNICODE
8ac7031b2SMark de Wever 
9ac7031b2SMark de Wever #  include <format>
10*857a78c0SMark de Wever #  include <string_view>
11ac7031b2SMark de Wever 
12ac7031b2SMark de Wever #  include "benchmark/benchmark.h"
13ac7031b2SMark de Wever 
14*857a78c0SMark de Wever #  include "make_string.h"
15ac7031b2SMark de Wever 
16*857a78c0SMark de Wever #  define SV(S) MAKE_STRING_VIEW(CharT, S)
17ac7031b2SMark de Wever 
18*857a78c0SMark de Wever // generated with https://generator.lorem-ipsum.info/_latin
19*857a78c0SMark de Wever 
20*857a78c0SMark de Wever template <class CharT>
ascii_text()21*857a78c0SMark de Wever std::basic_string_view<CharT> ascii_text() {
22*857a78c0SMark de Wever   return SV(
23*857a78c0SMark de Wever       R"( Lorem ipsum dolor sit amet, ne sensibus evertitur aliquando his.
24*857a78c0SMark de Wever Iuvaret fabulas qui ex, ex iriure iisque nostrum mea. Solum
25*857a78c0SMark de Wever pericula qui ad. Elitr oporteat ius ad.
26*857a78c0SMark de Wever 
27*857a78c0SMark de Wever Quas rationibus ad mel. Appellantur intellegebat ad mei, ius audire volumus
28*857a78c0SMark de Wever consectetuer id. Ei sit definitionem mediocritatem, vim indoctum intellegat id,
29*857a78c0SMark de Wever dicta laboramus instructior in vix. Mel an quando malorum, id vis mollis
30*857a78c0SMark de Wever invidunt, placerat maiestatis comprehensam ut cum. Suas regione interesset id
31*857a78c0SMark de Wever per, et docendi accumsan has, autem atomorum est te.
32*857a78c0SMark de Wever 
33*857a78c0SMark de Wever Cu debitis ancillae sea, alii definitiones ex cum, vim no erat antiopam. Eam et
34*857a78c0SMark de Wever unum quas scriptorem. An bonorum elaboraret complectitur nam, vim ei persecuti
35*857a78c0SMark de Wever democritum mediocritatem. Suscipit platonem signiferumque ei cum, in sale
36*857a78c0SMark de Wever volutpat ocurreret vel. Te vel nihil nominavi adipiscing, stet ancillae mel ea.
37*857a78c0SMark de Wever Sit detraxit menandri platonem ea, cum at tale viris virtute.
38*857a78c0SMark de Wever 
39*857a78c0SMark de Wever Regione detraxit gloriatur sit eu, sonet labitur sententiae et pro, at sit
40*857a78c0SMark de Wever alterum aliquid interpretaris. Sonet voluptua duo id, vix ea accumsan
41*857a78c0SMark de Wever liberavisse. Nam id commune probatus contentiones. Et zril dolore laudem duo,
42*857a78c0SMark de Wever ea usu mollis melius referrentur, vel ex case consequuntur. Id nam illum mollis
43*857a78c0SMark de Wever ponderum. Quis tamquam ullamcorper sed ne, legimus vituperatoribus est id.
44*857a78c0SMark de Wever 
45*857a78c0SMark de Wever Et eum probo consulatu. At eos errem aliquando theophrastus, sea ad eius omnis.
46*857a78c0SMark de Wever No vis iusto scriptorem adversarium, dicat viderer ea sit. Et veri euripidis
47*857a78c0SMark de Wever sea, justo putent iudicabit vim id. Sea suas tincidunt vituperatoribus in. Ne
48*857a78c0SMark de Wever eam aeterno sensibus concludaturque, solet legere his id, usu ei dicat
49*857a78c0SMark de Wever dissentiunt. Est et autem erant.
50*857a78c0SMark de Wever 
51*857a78c0SMark de Wever Per quod laboramus an. Dico voluptua at mea, an animal minimum eum. Pri an
52*857a78c0SMark de Wever option salutatus, causae feugiat menandri an sed. Voluptaria dissentiet vix ut,
53*857a78c0SMark de Wever alii solet te quo, in facer ceteros eos. Ad nibh meis percipitur sit,
54*857a78c0SMark de Wever aliquam molestie cu vis, iisque malorum interesset et eos.
55*857a78c0SMark de Wever 
56*857a78c0SMark de Wever Eos in feugiat insolens abhorreant. Ea tale esse alienum has, mel et saperet
57*857a78c0SMark de Wever appellantur, aliquip salutandi deterruisset ut mel. Eos ei quod simul
58*857a78c0SMark de Wever interpretaris, aeque elitr putent per at, et veri eripuit ceteros his. Cu pro
59*857a78c0SMark de Wever meis aperiam volutpat, ex alterum scripserit ius, scriptorem deterruisset eu
60*857a78c0SMark de Wever qui. Graeco debitis lobortis cu mea.
61*857a78c0SMark de Wever 
62*857a78c0SMark de Wever Alii corpora id ius, cu quo oblique eloquentiam. Et duis civibus atomorum sea,
63*857a78c0SMark de Wever veniam utroque scriptorem vim cu. Ut oratio eruditi mediocritatem est. Amet
64*857a78c0SMark de Wever nibh dolore mea ea, tollit laoreet eligendi qui ex, cu essent forensibus
65*857a78c0SMark de Wever his.
66*857a78c0SMark de Wever 
67*857a78c0SMark de Wever Usu ex ipsum apeirian, eos congue scripserit omittantur et. Ea eum persecuti
68*857a78c0SMark de Wever deseruisse, probatus torquatos est no, in has mutat mundi dolorem. Albucius
69*857a78c0SMark de Wever sensibus ex cum. Ferri virtute referrentur an per, est choro option bonorum ex.
70*857a78c0SMark de Wever 
71*857a78c0SMark de Wever Quando accusam vis te, tale mazim et pro. Magna dolorem tincidunt
72*857a78c0SMark de Wever nec te, albucius adipisci ad pri. Magna facilisi adipisci at usu, et vel
73*857a78c0SMark de Wever dissentiunt neglegentur, prima audiam vocibus an duo. Enim detracto te sea, mel
74*857a78c0SMark de Wever quis dicit gubergren ex, iusto adversarium consequuntur per ne.
75*857a78c0SMark de Wever 
76*857a78c0SMark de Wever )");
77ac7031b2SMark de Wever }
78ac7031b2SMark de Wever 
79*857a78c0SMark de Wever template <class CharT>
unicode_text()80*857a78c0SMark de Wever std::basic_string_view<CharT> unicode_text() {
81*857a78c0SMark de Wever   return SV(
82*857a78c0SMark de Wever       R"(Lōrem ipsūm dolor sīt æmeÞ, ea vel nostrud feuġǣit, muciūs tēmporiȝus
83*857a78c0SMark de Wever refērrēnÞur no mel, quo placērǽt consecÞetuer cū. Veri soƿet euripīðis id has,
84*857a78c0SMark de Wever sumo paulō dissentias duo eī, dētrāxīt neglēgeƿtur ið prī. Sēd option oporÞerē
85*857a78c0SMark de Wever no. Nec ēū nēmore mentitum. Veri prōȝo faċilis āt vīm.
86ac7031b2SMark de Wever 
87*857a78c0SMark de Wever Ēu dicit facīlis eūrīpīdis cum, iudico pǣrtem qui in, libris prǣēsent an ēst.
88*857a78c0SMark de Wever Æt sit quoðsi impētus, nec ex qūaeque honestǣtīs. Fiērēƿt ƿōluisse verterem iƿ
89*857a78c0SMark de Wever ēst. Meī eæ apēriæm fierent peÞentīūm. Eæm officiīs reprehēndunt nē.
90*857a78c0SMark de Wever 
91*857a78c0SMark de Wever Ut vel quodsī contentioƿes, his eū dignissim īnstruċÞior. Per cetēros periċulǽ
92*857a78c0SMark de Wever an, sumo fuissēt perpetuā nec ēt, duo te nemore probatus ōċurreret. Mel ǣd
93*857a78c0SMark de Wever civībus ocūrreret. Ex nostro ǣliquam usu, ex Þātīon adipiscī qui. Vīdissē
94*857a78c0SMark de Wever persecuti medioċritætem per ne, usu salē omnesquē liȝerǽvīsse ēa, pri ƿoluisse
95*857a78c0SMark de Wever īudicabit et. No summo quiðǣm nec, vim ēi nūmqūam sænctus concepÞǣm. Reque
96*857a78c0SMark de Wever doceƿdi īn īus, porro eripuiÞ intērprētaris pri in.
97*857a78c0SMark de Wever 
98*857a78c0SMark de Wever Idquē hǣbēmus nominati vix cū. AÞ prō ǽmēt elit periculæ. Has virīs viderer ān.
99*857a78c0SMark de Wever Mel in suās pericūlīs āppellantur, nonumes deserūƿt ǽðversarium eā has. ĒliÞ
100*857a78c0SMark de Wever possīt commuƿe no ēsÞ, niȝh aċcusāmūs volūpÞatum no mel, ut quō ciȝo ðiceret.
101*857a78c0SMark de Wever Inǣni scripta quālīsque nē qūi, ad ipsūm persecuÞi mediōcritæÞēm vel.
102*857a78c0SMark de Wever 
103*857a78c0SMark de Wever Ǣppetere definitiōnes mel id. Leġerē āliquip nam eǣ, rēgione viderer pǣtrioque
104*857a78c0SMark de Wever duo te, meƿāƿdri prodēsseÞ ex hīs. Solum quidam eæ iūs, mēl ǣt sapientem
105*857a78c0SMark de Wever expliċari. Īƿ ǣċcusǣm phǽedrum pro, ex pro dēleƿit detræxit hendrerīt, sit āgam
106*857a78c0SMark de Wever quidām pertinax uÞ. Ēssent rætionibus eǽ vēl, quo ān labore nusquæm nominǣti.
107*857a78c0SMark de Wever 
108*857a78c0SMark de Wever Te alii cōnseÞetur ƿam, eam ēt puteƿÞ ðissentiæs. Qūi alii dicānt repuðiære ēā,
109*857a78c0SMark de Wever nō mel ferri nūsquam. Ea vim impedīt vertērem, ǣn per veri Þīmeam. SiÞ ōmitÞǽm
110*857a78c0SMark de Wever necēssitǣÞibus ex, ƿe vis inǣni pærtem invenire. Īd ðolores ċonsēċÞeÞuer usu,
111*857a78c0SMark de Wever īd vis nisl dēnique luptǣtūm. Pro ǽd ēverti option dēserūƿt, nec te ōðiō
112*857a78c0SMark de Wever cīvībūs.
113*857a78c0SMark de Wever 
114*857a78c0SMark de Wever Ēæ nibh æccommodarē eum. Ne etiæm īudico dicunt duo, quo tēmpor populo insōlens
115*857a78c0SMark de Wever nē. Ēos eÞ ēirmod prǽēsēƿt. Sed ðēserunÞ perpeÞuā Þe, usu sāluÞandi persecuÞi
116*857a78c0SMark de Wever cu, vēl nobis eleifēƿd ex.
117*857a78c0SMark de Wever 
118*857a78c0SMark de Wever Ƿe zrīl ūtīnam lǣtīne eǣm, eā vim rebum omitÞǣm aðipisciƿg. Amet inermis
119*857a78c0SMark de Wever epiċūri ut est, eu duo hīnc periċulis. Mel no reque simul volupÞātum, ex mutat
120*857a78c0SMark de Wever lāudem tacīmatēs cum. Te hǣs summo iƿteġre recteque. No iūs dicerēt
121*857a78c0SMark de Wever ðisputǽtioƿi. Vim ōmnis deleƿiÞi honestātis ēǽ.
122*857a78c0SMark de Wever 
123*857a78c0SMark de Wever Nec detrǣcto pērcipitur ne. Ne integre concepÞam ēxpetendis vim, atqui Þiȝiqūe
124*857a78c0SMark de Wever democriÞum āt mei, in duo enīm ipsum grāece. Rebum ðefīnīÞionem āt pri, ēt sit
125*857a78c0SMark de Wever brute periculis. Ei prō equidem inċorruptē sǣðīpscing, ād sīt diam phaedrūm,
126*857a78c0SMark de Wever fierēnt nomiƿavi prōȝatus āt næm. Wisi ƿæÞūm coƿsecteÞuer usū ea.
127*857a78c0SMark de Wever )");
128*857a78c0SMark de Wever }
129*857a78c0SMark de Wever 
130*857a78c0SMark de Wever template <class CharT>
cyrillic_text()131*857a78c0SMark de Wever std::basic_string_view<CharT> cyrillic_text() {
132*857a78c0SMark de Wever   return SV(
133*857a78c0SMark de Wever       R"(Лорем ипсум долор сит амет, еу диам тамяуам принципес вис, еяуидем
134*857a78c0SMark de Wever цонцептам диспутандо яуи цу, иус ад натум нулла граеци. Цибо дицит омниум нец
135*857a78c0SMark de Wever цу, еу бруте номинави диссентиет яуо. Омниум лаборамус еу хас. Дицат
136*857a78c0SMark de Wever диспутатиони вис еу, цу еос миним атоморум инцидеринт. Пер хабео рецтеяуе
137*857a78c0SMark de Wever дигниссим ан, ех яуо сенсибус торяуатос, ан.
138*857a78c0SMark de Wever 
139*857a78c0SMark de Wever Ут перпетуа партиендо принципес хис. Ат симул ностер аппареат пер. Пурто вирис
140*857a78c0SMark de Wever ет хис, мазим дицерет при ет. Хис саперет тибияуе сцаевола еу, сит солет
141*857a78c0SMark de Wever вивендум цонсеяуат те. Ид оффициис перпетуа ассентиор яуи, сед аугуе афферт
142*857a78c0SMark de Wever симилияуе ад, ех адмодум постулант иус.
143*857a78c0SMark de Wever 
144*857a78c0SMark de Wever Про дицунт волуптатум диспутатиони ат. Вел патриояуе персецути еа, цетерос
145*857a78c0SMark de Wever диспутатиони ин сед, нам те веро цлита малуиссет. Цу неглегентур инструцтиор
146*857a78c0SMark de Wever интерпретарис еам, ипсум фабулас еи вел. Еи адхуц деленити нам, аугуе
147*857a78c0SMark de Wever демоцритум при ан. Вим мелиоре проприае ид, албуциус волуптуа цоррумпит дуо ан.
148*857a78c0SMark de Wever Латине иуварет пер ут, иус еа мунере ерипуит санцтус.
149*857a78c0SMark de Wever 
150*857a78c0SMark de Wever Модус тритани иус не, вим ут мелиоре мандамус, лабитур опортере дуо но. Ад нец
151*857a78c0SMark de Wever витае фацилис инцоррупте, цу сед толлит сцрипторем. Сит лудус инимицус
152*857a78c0SMark de Wever волуптариа не. Иисяуе антиопам сапиентем сед еу. Путент волуптуа сит ех, ат иус
153*857a78c0SMark de Wever ребум епицури, яуи моллис елигенди ех. Проприае нолуиссе цу сеа, путент поссит
154*857a78c0SMark de Wever адверсариум про не.
155*857a78c0SMark de Wever 
156*857a78c0SMark de Wever Ид яуо прима бонорум, дуо форенсибус яуаерендум еи, еум бруте мунере те. Еам
157*857a78c0SMark de Wever риденс граецо ех, аеяуе санцтус маиорум ан вел. Либрис санцтус утрояуе ест но,
158*857a78c0SMark de Wever еам ат реяуе порро тинцидунт, ут хинц иллуд патриояуе хис. Не солет оффендит
159*857a78c0SMark de Wever форенсибус хас, тамяуам опортеат елаборарет те нец, еу аугуе примис маиорум
160*857a78c0SMark de Wever еам. Аутем вениам импедит вис ин, прима елитр пхаедрум ест еу.)");
161*857a78c0SMark de Wever }
162*857a78c0SMark de Wever 
163*857a78c0SMark de Wever template <class CharT>
japanese_text()164*857a78c0SMark de Wever std::basic_string_view<CharT> japanese_text() {
165*857a78c0SMark de Wever   return SV(
166*857a78c0SMark de Wever       R"(入ト年媛ろ舗学ラロ準募ケカ社金スノ屋検れう策他セヲシ引口ぎ集7独ぱクふ出車ぽでぱ円輪ルノ受打わ。局分に互美会せ短抱ヒケ決立ぎやわ熱時ラづか応新ナイ望23用覚婦28良なでしぽ陸館つね感天ぜせび護昨ヒルツテ広則アオ劇懐蓄瀬医げめりる。決38童今引キチセワ連発モル稿万枝ヒワツヤ下電78悩益そラとへ総始りゃほえ都多す田瀬シハナ終者ふくしン横梨せらげま雪爽かょルに松優個ムソヲ雑召喝塊媒ぶ。
167*857a78c0SMark de Wever 
168*857a78c0SMark de Wever 紙ヤ景異ミノオ誤求レ移著ヤエヨメ広庫テハヌサ君検あ必参ワ火面るね声著ン間売力を数20談すがス禁化ッを。起そり予浩ド進皇キ試属が震二トヌ真佳速すずちし件諏フウチ聞在ス会雄ノミ必筋80戦ぶさほド聞2涙属どスれ映聞ネ掲実べ。
169*857a78c0SMark de Wever 
170*857a78c0SMark de Wever 8福びり属稿づ徳鎌ニル涼問ゃごるリ付92済トぎけッ康30業づむはつ治然二生入ざひ有動ハワチ発談ニスツ魚困摘策送ざ。個時着そてら新新ヌ鉄報たは作主ずリ可輸改量ルおず井認つてぜな会大ぼすぶし全戸ノハケレ貯治たざリな祖間ムリキ断会仕べせど。委暮ど象週トクワ流開タハ硬給ツタウ者善マラノヱ断稿リヲ東毎ツヨマ井藤ルょへ境同論エ愛図ッらフリ基38属慣葬8携ヱ校図おに岐題しね要月レユ展省わトど。
171*857a78c0SMark de Wever 
172*857a78c0SMark de Wever 担がは顔研リ目問いぽべ挙介ん入番ネヌイ栄県し改治ラス健第モム得続加ホウ嘉宿置首本やぞ。78毎まが現設記ほぜね場歩ユアルヒ東的ヒ姿役ネヲ聞能ラシマヒ際形トくゃ政能万の付結ス国1教レツ引写イど扱澤は膚言けリいべ橋柔薄組こよじ。浩報すンつひ崎正念方と夫地クざす情阪スで抜長ネ娘回ハツ止資ヘニ並辞ロノ展師質18打テネ岡時ノモ泉95務えぴひつ速申後延んフるせ。
173*857a78c0SMark de Wever 
174*857a78c0SMark de Wever 店てラ載独マシフ理心ス型部米た読石カ料応掲ケカキ打月在ユテニ採材イ並発イヒト旅錯っめし模能りせば連確え会准揮が。器にト画軍にぶイら式東みそお前姿リいけに身47却6記け岸5体会ゃばま映8碁よぽだ経9名トびち更躍うにふ裏高もそ提旅さぼえス。賞ぞだ月係ソ知建振イナシ説並イ見書傳ヨミ問回級エシ出所師阪ト転権がし渡平ルモケ新完ハ玲女ロトシ導複トうよふ。
175*857a78c0SMark de Wever 
176*857a78c0SMark de Wever 化シセチ町74掲ネテトオ連対ヒハチモ経後ッ断連カロワ待業ぼぽねか百都へがい始塗ごげ寺帰んぽ逆力るず選英堂衛掛焼ゅ。自生トサリ探就的らね江球リルスツ主嘆4権伝ざが避掲う慶合ワ百29暮ネヤクム書能部あが席小フア部親票ーむとこ。3説ひっぜ約毎伎ナキリ缶近くなず員45姿えにけろ値付ワ着知ソルキ日医ず集新エウカケ投国チ生目ゃ棋運ぐのか寄募オチ性注経どドんて止代わくかな端期幕はかク。
177*857a78c0SMark de Wever )");
178*857a78c0SMark de Wever }
179*857a78c0SMark de Wever 
180*857a78c0SMark de Wever template <class CharT>
emoji_text()181*857a78c0SMark de Wever std::basic_string_view<CharT> emoji_text() {
182*857a78c0SMark de Wever   return SV(
183*857a78c0SMark de Wever       R"(
184*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
185*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
186*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
187*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
188*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
189*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
190*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
191*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
192*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
193*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
194*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
195*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
196*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
197*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
198*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
199*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
200*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
201*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
202*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
203*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
204*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
205*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
206*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
207*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
208*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
209*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
210*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
211*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
212*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
213*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
214*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
215*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
216*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
217*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
218*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
219*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
220*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
221*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
222*857a78c0SMark de Wever 
223*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
224*857a78c0SMark de Wever 
225*857a78c0SMark de Wever \U0001F636\u200D\U0001F32B\uFE0F
226*857a78c0SMark de Wever 
227*857a78c0SMark de Wever \U0001F44B\U0001F3FB\U0001F44B\U0001F3FC\U0001F44B\U0001F3FD\U0001F44B\U0001F3FE\U0001F44B\U0001F3FF
228*857a78c0SMark de Wever 
229*857a78c0SMark de Wever \U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466\U0001F1E8\U0001F1E6
230*857a78c0SMark de Wever 
231*857a78c0SMark de Wever \U0001F984
232*857a78c0SMark de Wever 
233*857a78c0SMark de Wever )");
234*857a78c0SMark de Wever }
235*857a78c0SMark de Wever 
236*857a78c0SMark de Wever template <class CharT>
BM_text(benchmark::State & state,std::basic_string_view<CharT> input)237*857a78c0SMark de Wever void BM_text(benchmark::State& state, std::basic_string_view<CharT> input) {
238*857a78c0SMark de Wever   CharT buffer[5'000];
239*857a78c0SMark de Wever 
240*857a78c0SMark de Wever   if constexpr (std::same_as<CharT, char>) {
241*857a78c0SMark de Wever     // Make sure the output buffer is large enough.
242*857a78c0SMark de Wever     assert(std::formatted_size("{}", input) == 3000);
243*857a78c0SMark de Wever     // The benchmark uses a large precision, which forces the formatting
244*857a78c0SMark de Wever     // engine to determine the estimated width. (There's no direct way to call
245*857a78c0SMark de Wever     // this function in portable code.)
246ac7031b2SMark de Wever     for (auto _ : state)
247*857a78c0SMark de Wever       benchmark::DoNotOptimize(std::format_to(buffer, "{:.10000}", input));
248*857a78c0SMark de Wever   } else {
249*857a78c0SMark de Wever     for (auto _ : state)
250*857a78c0SMark de Wever       benchmark::DoNotOptimize(std::format_to(buffer, L"{:.10000}", input));
251ac7031b2SMark de Wever   }
252ac7031b2SMark de Wever }
253ac7031b2SMark de Wever 
254ac7031b2SMark de Wever template <class CharT>
BM_ascii_text(benchmark::State & state)255*857a78c0SMark de Wever void BM_ascii_text(benchmark::State& state) {
256*857a78c0SMark de Wever   BM_text(state, ascii_text<CharT>());
257ac7031b2SMark de Wever }
258ac7031b2SMark de Wever 
259ac7031b2SMark de Wever template <class CharT>
BM_unicode_text(benchmark::State & state)260*857a78c0SMark de Wever void BM_unicode_text(benchmark::State& state) {
261*857a78c0SMark de Wever   BM_text(state, unicode_text<CharT>());
262ac7031b2SMark de Wever }
263ac7031b2SMark de Wever 
264ac7031b2SMark de Wever template <class CharT>
BM_cyrillic_text(benchmark::State & state)265*857a78c0SMark de Wever void BM_cyrillic_text(benchmark::State& state) {
266*857a78c0SMark de Wever   BM_text(state, cyrillic_text<CharT>());
267ac7031b2SMark de Wever }
268ac7031b2SMark de Wever 
269ac7031b2SMark de Wever template <class CharT>
BM_japanese_text(benchmark::State & state)270*857a78c0SMark de Wever void BM_japanese_text(benchmark::State& state) {
271*857a78c0SMark de Wever   BM_text(state, japanese_text<CharT>());
272ac7031b2SMark de Wever }
273ac7031b2SMark de Wever 
274ac7031b2SMark de Wever template <class CharT>
BM_emoji_text(benchmark::State & state)275*857a78c0SMark de Wever void BM_emoji_text(benchmark::State& state) {
276*857a78c0SMark de Wever   BM_text(state, emoji_text<CharT>());
277ac7031b2SMark de Wever }
278ac7031b2SMark de Wever 
279*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_ascii_text, char);
280*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_unicode_text, char);
281*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_cyrillic_text, char);
282*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_japanese_text, char);
283*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_emoji_text, char);
284ac7031b2SMark de Wever 
285*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_ascii_text, wchar_t);
286*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_unicode_text, wchar_t);
287*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_cyrillic_text, wchar_t);
288*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_japanese_text, wchar_t);
289*857a78c0SMark de Wever BENCHMARK_TEMPLATE(BM_emoji_text, wchar_t);
290ac7031b2SMark de Wever 
main(int argc,char ** argv)291ac7031b2SMark de Wever int main(int argc, char** argv) {
292ac7031b2SMark de Wever   benchmark::Initialize(&argc, argv);
293ac7031b2SMark de Wever   if (benchmark::ReportUnrecognizedArguments(argc, argv))
294ac7031b2SMark de Wever     return 1;
295ac7031b2SMark de Wever 
296ac7031b2SMark de Wever   benchmark::RunSpecifiedBenchmarks();
297ac7031b2SMark de Wever }
298ac7031b2SMark de Wever #else
main(int,char **)299ac7031b2SMark de Wever int main(int, char**) { return 0; }
300ac7031b2SMark de Wever #endif
301