11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_ciconst common = require('../common.js'); 41cb0ef41Sopenharmony_cilet icu; 51cb0ef41Sopenharmony_citry { 61cb0ef41Sopenharmony_ci icu = common.binding('icu'); 71cb0ef41Sopenharmony_ci} catch { 81cb0ef41Sopenharmony_ci // Continue regardless of error. 91cb0ef41Sopenharmony_ci} 101cb0ef41Sopenharmony_ciconst punycode = require('punycode'); 111cb0ef41Sopenharmony_ci 121cb0ef41Sopenharmony_ciconst bench = common.createBenchmark(main, { 131cb0ef41Sopenharmony_ci method: ['punycode'].concat(icu !== undefined ? ['icu'] : []), 141cb0ef41Sopenharmony_ci n: [1024], 151cb0ef41Sopenharmony_ci val: [ 161cb0ef41Sopenharmony_ci 'افغانستا.icom.museum', 171cb0ef41Sopenharmony_ci 'الجزائر.icom.museum', 181cb0ef41Sopenharmony_ci 'österreich.icom.museum', 191cb0ef41Sopenharmony_ci 'বাংলাদেশ.icom.museum', 201cb0ef41Sopenharmony_ci 'беларусь.icom.museum', 211cb0ef41Sopenharmony_ci 'belgië.icom.museum', 221cb0ef41Sopenharmony_ci 'българия.icom.museum', 231cb0ef41Sopenharmony_ci 'تشادر.icom.museum', 241cb0ef41Sopenharmony_ci '中国.icom.museum', 251cb0ef41Sopenharmony_ci 'القمر.icom.museum', 261cb0ef41Sopenharmony_ci 'κυπρος.icom.museum', 271cb0ef41Sopenharmony_ci 'českárepublika.icom.museum', 281cb0ef41Sopenharmony_ci 'مصر.icom.museum', 291cb0ef41Sopenharmony_ci 'ελλάδα.icom.museum', 301cb0ef41Sopenharmony_ci 'magyarország.icom.museum', 311cb0ef41Sopenharmony_ci 'ísland.icom.museum', 321cb0ef41Sopenharmony_ci 'भारत.icom.museum', 331cb0ef41Sopenharmony_ci 'ايران.icom.museum', 341cb0ef41Sopenharmony_ci 'éire.icom.museum', 351cb0ef41Sopenharmony_ci 'איקו״ם.ישראל.museum', 361cb0ef41Sopenharmony_ci '日本.icom.museum', 371cb0ef41Sopenharmony_ci 'الأردن.icom.museum', 381cb0ef41Sopenharmony_ci ], 391cb0ef41Sopenharmony_ci}); 401cb0ef41Sopenharmony_ci 411cb0ef41Sopenharmony_cifunction usingPunycode(val) { 421cb0ef41Sopenharmony_ci punycode.toUnicode(punycode.toASCII(val)); 431cb0ef41Sopenharmony_ci} 441cb0ef41Sopenharmony_ci 451cb0ef41Sopenharmony_cifunction usingICU(val) { 461cb0ef41Sopenharmony_ci icu.toUnicode(icu.toASCII(val)); 471cb0ef41Sopenharmony_ci} 481cb0ef41Sopenharmony_ci 491cb0ef41Sopenharmony_cifunction runPunycode(n, val) { 501cb0ef41Sopenharmony_ci for (let i = 0; i < n; i++) 511cb0ef41Sopenharmony_ci usingPunycode(val); 521cb0ef41Sopenharmony_ci bench.start(); 531cb0ef41Sopenharmony_ci for (let i = 0; i < n; i++) 541cb0ef41Sopenharmony_ci usingPunycode(val); 551cb0ef41Sopenharmony_ci bench.end(n); 561cb0ef41Sopenharmony_ci} 571cb0ef41Sopenharmony_ci 581cb0ef41Sopenharmony_cifunction runICU(n, val) { 591cb0ef41Sopenharmony_ci bench.start(); 601cb0ef41Sopenharmony_ci for (let i = 0; i < n; i++) 611cb0ef41Sopenharmony_ci usingICU(val); 621cb0ef41Sopenharmony_ci bench.end(n); 631cb0ef41Sopenharmony_ci} 641cb0ef41Sopenharmony_ci 651cb0ef41Sopenharmony_cifunction main({ n, val, method }) { 661cb0ef41Sopenharmony_ci switch (method) { 671cb0ef41Sopenharmony_ci case 'punycode': 681cb0ef41Sopenharmony_ci runPunycode(n, val); 691cb0ef41Sopenharmony_ci break; 701cb0ef41Sopenharmony_ci case 'icu': 711cb0ef41Sopenharmony_ci if (icu !== undefined) { 721cb0ef41Sopenharmony_ci runICU(n, val); 731cb0ef41Sopenharmony_ci break; 741cb0ef41Sopenharmony_ci } 751cb0ef41Sopenharmony_ci // fallthrough 761cb0ef41Sopenharmony_ci default: 771cb0ef41Sopenharmony_ci throw new Error(`Unexpected method "${method}"`); 781cb0ef41Sopenharmony_ci } 791cb0ef41Sopenharmony_ci} 80