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