AryaWu/sqlite
0
1# 2025-12-022#3# The author disclaims copyright to this source code. In place of4# a legal notice, here is a blessing:5#6# May you do good and not evil.7# May you find forgiveness for yourself and forgive others.8# May you share freely, never taking more than you give.9#10#***********************************************************************11#12# Test cases for the Query Result Formatter (QRF), and especially13# the sqlite3_qrf_wcwidth() function and its utilization.14#15 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18set testprefix qrf0619 20# Data21db eval {22 BEGIN TRANSACTION;23 CREATE TABLE language(name TEXT);24 INSERT INTO language(name) VALUES25 ('العربية'),26 ('Deutsch'),27 ('English'),28 ('Español'),29 ('فارسی'),30 ('Français'),31 ('Italiano'),32 ('مصرى'),33 ('Nederlands'),34 ('日本語'),35 ('Polski'),36 ('Português'),37 ('Sinugboanong Binisaya'),38 ('Svenska'),39 ('Українська'),40 ('Tiếng Việt'),41 ('Winaray'),42 ('中文'),43 ('Русский'),44 ('Afrikaans'),45 ('Shqip'),46 ('Asturianu'),47 ('Azərbaycanca'),48 ('Български'),49 ('閩南語 / Bân-lâm-gú'),50 ('বাংলা'),51 ('Беларуская'),52 ('Català'),53 ('Čeština'),54 ('Cymraeg'),55 ('Dansk'),56 ('Eesti'),57 ('Ελληνικά'),58 ('Esperanto'),59 ('Euskara'),60 ('Galego'),61 ('한국어'),62 ('Հայերեն'),63 ('हिन्दी'),64 ('Hrvatski'),65 ('Bahasa Indonesia'),66 ('עברית'),67 ('ქართული'),68 ('Ladin'),69 ('Latina'),70 ('Latviešu'),71 ('Lietuvių'),72 ('Magyar'),73 ('Македонски'),74 ('Malagasy'),75 ('मराठी'),76 ('Bahasa Melayu'),77 ('Bahaso Minangkabau'),78 ('မြန်မာဘာသာ'),79 ('Norskbokmålnynorsk'),80 ('Нохчийн'),81 ('Oʻzbekcha / Ўзбекча'),82 ('Қазақша / Qazaqşa / قازاقشا'),83 ('Română'),84 ('Simple English'),85 ('Slovenčina'),86 ('Slovenščina'),87 ('Српски / Srpski'),88 ('Srpskohrvatski / Српскохрватски'),89 ('Suomi'),90 ('Kiswahili'),91 ('தமிழ்'),92 ('Татарча / Tatarça'),93 ('తెలుగు'),94 ('ภาษาไทย'),95 ('Тоҷикӣ'),96 ('تۆرکجه'),97 ('Türkçe'),98 ('اردو'),99 ('粵語'),100 ('Bahsa Acèh'),101 ('Alemannisch'),102 ('አማርኛ'),103 ('Aragonés'),104 ('Արեւմտահայերէն'),105 ('Bahasa Hulontalo'),106 ('Basa Bali'),107 ('Bahasa Banjar'),108 ('Basa Banyumasan'),109 ('Башҡортса'),110 ('Беларуская (тарашкевіца)'),111 ('Bikol Central'),112 ('বিষ্ণুপ্রিয়া মণিপুরী'),113 ('Boarisch'),114 ('Bosanski'),115 ('Brezhoneg'),116 ('Чӑвашла'),117 ('Dagbanli'),118 ('الدارجة'),119 ('Diné Bizaad'),120 ('Emigliàn–Rumagnòl'),121 ('Fiji Hindi'),122 ('Føroyskt'),123 ('Frysk'),124 ('Fulfulde'),125 ('Gaeilge'),126 ('Gàidhlig'),127 ('گیلکی'),128 ('ગુજરાતી'),129 ('Hak-kâ-ngî / 客家語'),130 ('Hausa'),131 ('Hornjoserbsce'),132 ('Ido'),133 ('Igbo'),134 ('Ilokano'),135 ('Interlingua'),136 ('Interlingue'),137 ('Ирон'),138 ('Íslenska'),139 ('Jawa'),140 ('ಕನ್ನಡ'),141 ('Kapampangan'),142 ('ភាសាខ្មែរ'),143 ('Kotava'),144 ('Kreyòl Ayisyen'),145 ('Kurdî / كوردی'),146 ('کوردیی ناوەندی'),147 ('Кыргызча'),148 ('Кырык мары'),149 ('Lëtzebuergesch'),150 ('Lìgure'),151 ('Limburgs'),152 ('Lombard'),153 ('मैथिली'),154 ('മലയാളം'),155 ('მარგალური'),156 ('مازِرونی'),157 ('Mìng-dĕ̤ng-ngṳ̄ / 閩東語'),158 ('Монгол'),159 ('Napulitano'),160 ('नेपाल भाषा'),161 ('Nordfriisk'),162 ('Occitan'),163 ('Олык марий'),164 ('ଓଡି଼ଆ'),165 ('অসমীযা়'),166 ('ਪੰਜਾਬੀ'),167 ('پنجابی (شاہ مکھی)'),168 ('پښتو'),169 ('Piemontèis'),170 ('Plattdüütsch'),171 ('Qaraqalpaqsha'),172 ('Qırımtatarca'),173 ('Runa Simi'),174 ('Русиньскый'),175 ('संस्कृतम्'),176 ('ᱥᱟᱱᱛᱟᱲᱤ'),177 ('سرائیکی'),178 ('Саха Тыла'),179 ('Scots'),180 ('ChiShona'),181 ('Sicilianu'),182 ('සිංහල'),183 ('سنڌي'),184 ('Ślůnski'),185 ('Basa Sunda'),186 ('Taclḥit'),187 ('Tagalog'),188 ('ၽႃႇသႃႇတႆး'),189 ('ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ'),190 ('tolışi'),191 ('chiTumbuka'),192 ('Basa Ugi'),193 ('Vèneto'),194 ('Volapük'),195 ('Walon'),196 ('文言'),197 ('吴语'),198 ('ייִדיש'),199 ('Yorùbá'),200 ('Zazaki'),201 ('žemaitėška'),202 ('isiZulu'),203 ('नेपाली'),204 ('ꯃꯤꯇꯩ ꯂꯣꯟ'),205 ('Dzhudezmo / לאדינו'),206 ('Адыгэбзэ'),207 ('Ænglisc'),208 ('Anarâškielâ'),209 ('अंगिका'),210 ('Аԥсшәа'),211 ('armãneashti'),212 ('Arpitan'),213 ('atikamekw'),214 ('ܐܬܘܪܝܐ'),215 ('Avañe’ẽ'),216 ('Авар'),217 ('Aymar'),218 ('Batak Toba'),219 ('Betawi'),220 ('भोजपुरी'),221 ('Bislama'),222 ('བོད་ཡིག'),223 ('Буряад'),224 ('Chavacano de Zamboanga'),225 ('Chichewa'),226 ('Corsu'),227 ('Vahcuengh / 話僮'),228 ('Dagaare'),229 ('Davvisámegiella'),230 ('Deitsch'),231 ('ދިވެހިބަސް'),232 ('Dolnoserbski'),233 ('Dusun Bundu-liwan'),234 ('Эрзянь'),235 ('Estremeñu'),236 ('Eʋegbe'),237 ('Farefare'),238 ('Fɔ̀ngbè'),239 ('Furlan'),240 ('Gaelg'),241 ('Gagauz'),242 ('ГӀалгӀай'),243 ('Ghanaian Pidgin'),244 ('Gĩkũyũ'),245 ('赣语 / 贛語'),246 ('Gungbe'),247 ('Хальмг'),248 ('ʻŌlelo Hawaiʻi'),249 ('Ikinyarwanda'),250 ('Jaku Iban'),251 ('Kabɩyɛ'),252 ('Yerwa Kanuri'),253 ('Kaszëbsczi'),254 ('Kernewek'),255 ('Коми'),256 ('Перем коми'),257 ('Kongo'),258 ('कोंकणी / Konknni'),259 ('كٲشُر'),260 ('Kriyòl Gwiyannen'),261 ('Kumoring'),262 ('Kʋsaal'),263 ('ພາສາລາວ'),264 ('Лакку'),265 ('Latgaļu'),266 ('Лезги'),267 ('Li Niha'),268 ('Lingála'),269 ('Lingua Franca Nova'),270 ('livvinkarjala'),271 ('lojban'),272 ('Luganda'),273 ('Madhurâ'),274 ('Malti'),275 ('Mandailing'),276 ('Māori'),277 ('Mfantse'),278 ('Mirandés'),279 ('Мокшень'),280 ('ဘာသာ မန်'),281 ('Moore'),282 ('ߒߞߏ'),283 ('Na Vosa Vaka-Viti'),284 ('Nāhuatlahtōlli'),285 ('Naijá'),286 ('Nedersaksisch'),287 ('Nouormand / Normaund'),288 ('Novial'),289 ('Afaan Oromoo'),290 ('ပအိုဝ်ႏဘာႏသာႏ'),291 ('Pangasinán'),292 ('Pangcah'),293 ('Papiamentu'),294 ('Patois'),295 ('Pfälzisch'),296 ('Picard'),297 ('Къарачай–малкъар'),298 ('Ripoarisch'),299 ('Rumantsch'),300 ('Sakizaya'),301 ('Gagana Sāmoa'),302 ('Sardu'),303 ('Seediq'),304 ('Seeltersk'),305 ('Sesotho'),306 ('Sesotho sa Leboa'),307 ('Setswana'),308 ('ꠍꠤꠟꠐꠤ'),309 ('Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ'),310 ('Soomaaliga'),311 ('Sranantongo'),312 ('SiSwati'),313 ('Reo tahiti'),314 ('Taqbaylit'),315 ('Tarandíne'),316 ('Tayal'),317 ('Tetun'),318 ('Tok Pisin'),319 ('faka Tonga'),320 ('Türkmençe'),321 ('Twi'),322 ('Tyap'),323 ('Тыва дыл'),324 ('Удмурт'),325 ('ئۇيغۇرچه'),326 ('Vepsän'),327 ('võro'),328 ('West-Vlams'),329 ('Wolof'),330 ('isiXhosa'),331 ('Zeêuws'),332 ('алтай тил'),333 ('अवधी'),334 ('डोटेली'),335 ('ತುಳು'),336 ('ရခိုင်'),337 ('Bajau Sama'),338 ('Bamanankan'),339 ('Chamoru'),340 ('རྫོང་ཁ'),341 ('𐌲𐌿𐍄𐌹𐍃𐌺x'),342 ('Igala'),343 ('ᐃᓄᒃᑎᑐᑦ / Inuktitut'),344 ('Iñupiak'),345 ('isiNdebele seSewula'),346 ('Kalaallisut'),347 ('Nupe'),348 ('Obolo'),349 ('पालि'),350 ('pinayuanan'),351 ('Ποντιακά'),352 ('romani čhib'),353 ('Ikirundi'),354 ('руски'),355 ('Sängö'),356 ('ᥖᥭᥰᥖᥬᥳᥑᥨᥒᥰ'),357 ('ትግርኛ'),358 ('Thuɔŋjäŋ'),359 ('ᏣᎳᎩ'),360 ('Tsėhesenėstsestotse'),361 ('Xitsonga'),362 ('Tshivenḓa'),363 ('Wayuunaiki'),364 ('адыгабзэ');365 COMMIT;366}367 368do_test 1.2 {369 set res \n[db format -style box {370 SELECT name, rowid AS id FROM language371 WHERE length(name)=2372 ORDER BY name373 }]374 set exp {375╭──────┬─────╮376│ name │ id │377╞══════╪═════╡378│ 中文 │ 18 │379│ 吴语 │ 173 │380│ 文言 │ 172 │381│ 粵語 │ 75 │382╰──────┴─────╯383}384 if {$res ne $exp} {385 puts [list $res]386 puts [list $exp]387 }388 string compare $res $exp389} {0}390 391do_test 1.3 {392 set res \n[db format -style box {393 SELECT name, rowid AS id FROM language394 WHERE length(name)=3395 ORDER BY name396 }]397 set exp {398╭────────┬─────╮399│ name │ id │400╞════════╪═════╡401│ Ido │ 108 │402│ Twi │ 297 │403│ ߒߞߏ │ 258 │404│ ᏣᎳᎩ │ 335 │405│ 日本語 │ 10 │406│ 한국어 │ 37 │407╰────────┴─────╯408}409 if {$res ne $exp} {410 puts [list $res]411 puts [list $exp]412 }413 string compare $res $exp414} {0}415 416do_test 1.4 {417 set res \n[db format -style box {418 SELECT name, rowid AS id FROM language419 WHERE length(name)=4420 ORDER BY name421 }]422 set exp {423╭──────┬─────╮424│ name │ id │425╞══════╪═════╡426│ Igbo │ 109 │427│ Jawa │ 115 │428│ Nupe │ 323 │429│ Tyap │ 298 │430│ võro │ 303 │431│ Авар │ 192 │432│ Ирон │ 113 │433│ Коми │ 231 │434│ اردو │ 74 │435│ سنڌي │ 159 │436│ مصرى │ 8 │437│ پښتو │ 144 │438│ अवधी │ 309 │439│ पालि │ 325 │440│ ತುಳು │ 311 │441│ ትግርኛ │ 333 │442│ አማርኛ │ 78 │443╰──────┴─────╯444}445 if {$res ne $exp} {446 puts [list $res]447 puts [list $exp]448 }449 string compare $res $exp450} {0}451 452do_test 1.5 {453 set res \n[db format -style box {454 SELECT name, rowid AS id FROM language455 WHERE length(name)=5456 ORDER BY name457 }]458 set exp {459╭───────┬─────╮460│ name │ id │461╞═══════╪═════╡462│ Aymar │ 193 │463│ Corsu │ 202 │464│ Dansk │ 31 │465│ Eesti │ 32 │466│ Frysk │ 99 │467│ Gaelg │ 216 │468│ Hausa │ 106 │469│ Igala │ 318 │470│ Kongo │ 233 │471│ Ladin │ 44 │472│ Malti │ 250 │473│ Moore │ 257 │474│ Māori │ 252 │475│ Naijá │ 261 │476│ Obolo │ 324 │477│ Sardu │ 278 │478│ Scots │ 155 │479│ Shqip │ 21 │480│ Suomi │ 65 │481│ Sängö │ 331 │482│ Tayal │ 292 │483│ Tetun │ 293 │484│ Walon │ 171 │485│ Wolof │ 305 │486│ Лакку │ 240 │487│ Лезги │ 242 │488│ руски │ 330 │489│ עברית │ 42 │490│ فارسی │ 5 │491│ كٲشُر │ 235 │492│ گیلکی │ 103 │493│ मराठी │ 51 │494│ বাংলা │ 26 │495│ ଓଡି଼ଆ │ 140 │496│ தமிழ் │ 67 │497│ ಕನ್ನಡ │ 116 │498│ සිංහල │ 158 │499│ ꠍꠤꠟꠐꠤ │ 284 │500╰───────┴─────╯501}502 if {$res ne $exp} {503 puts [list $res]504 puts [list $exp]505 }506 string compare $res $exp507} {0}508 509do_test 1.6 {510 set res \n[db format -style box {511 SELECT name, rowid AS id FROM language512 WHERE length(name)=6513 ORDER BY name514 }]515 set exp {516╭────────┬─────╮517│ name │ id │518╞════════╪═════╡519│ Betawi │ 195 │520│ Català │ 28 │521│ Eʋegbe │ 212 │522│ Furlan │ 215 │523│ Gagauz │ 217 │524│ Galego │ 36 │525│ Gungbe │ 222 │526│ Gĩkũyũ │ 220 │527│ Kabɩyɛ │ 227 │528│ Kotava │ 119 │529│ Kʋsaal │ 238 │530│ Latina │ 45 │531│ Lìgure │ 126 │532│ Magyar │ 48 │533│ Novial │ 264 │534│ Patois │ 270 │535│ Picard │ 272 │536│ Polski │ 11 │537│ Română │ 59 │538│ Seediq │ 279 │539│ Türkçe │ 73 │540│ Vepsän │ 302 │541│ Vèneto │ 169 │542│ Yorùbá │ 175 │543│ Zazaki │ 176 │544│ Zeêuws │ 307 │545│ lojban │ 247 │546│ tolışi │ 166 │547│ Аԥсшәа │ 186 │548│ Буряад │ 199 │549│ Монгол │ 134 │550│ Тоҷикӣ │ 71 │551│ Удмурт │ 300 │552│ Хальмг │ 223 │553│ Эрзянь │ 210 │554│ ייִדיש │ 174 │555│ تۆرکجه │ 72 │556│ ܐܬܘܪܝܐ │ 190 │557│ अंगिका │ 185 │558│ डोटेली │ 310 │559│ नेपाली │ 179 │560│ मैथिली │ 129 │561│ हिन्दी │ 39 │562│ ਪੰਜਾਬੀ │ 142 │563│ తెలుగు │ 69 │564│ മലയാളം │ 130 │565│ རྫོང་ཁ │ 316 │566│ ရခိုင် │ 312 │567╰────────┴─────╯568}569 if {$res ne $exp} {570 puts [list $res]571 puts [list $exp]572 }573 string compare $res $exp574} {0}575 576finish_test577 