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