Skip to content

Commit d0c6836

Browse files
committed
Changed a JS execution benchmark
1 parent 958d92b commit d0c6836

File tree

2 files changed

+199
-5
lines changed

2 files changed

+199
-5
lines changed

test/JavaScriptEngineSwitcher.Benchmarks/JsExecutionBenchmark.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class JsExecutionBenchmark
3535
/// <summary>
3636
/// Number of transliterated items
3737
/// </summary>
38-
private const int ItemCount = 6;
38+
private const int ItemCount = 7;
3939

4040
/// <summary>
4141
/// Code of library for transliteration of Russian
@@ -76,7 +76,8 @@ public static void PopulateTestData()
7676
$"Resources.{LibraryFileName}", typeof(JsExecutionBenchmark));
7777
_inputTypes = new string[ItemCount]
7878
{
79-
"basic", "letters-numbers", "gost-16876-71", "gost-7-79-2000", "police", "foreign-passport"
79+
"basic", "letters-numbers", "gost-16876-71", "gost-7-79-2000", "police", "foreign-passport",
80+
"yandex-friendly-url"
8081
};
8182
_inputStrings = new string[ItemCount]
8283
{
@@ -97,7 +98,9 @@ public static void PopulateTestData()
9798
"«много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения.»",
9899

99100
"Принцип инверсии зависимостей (The Dependency Inversion Principle). " +
100-
"«Зависимость на Абстракциях. Нет зависимости на что-то конкретное.»"
101+
"«Зависимость на Абстракциях. Нет зависимости на что-то конкретное.»",
102+
103+
"SOLID (объектно-ориентированное программирование)"
101104
};
102105
_targetOutputStrings = new string[ItemCount]
103106
{
@@ -120,7 +123,9 @@ public static void PopulateTestData()
120123
"naznacheniia.»",
121124

122125
"Printcip inversii zavisimostei (The Dependency Inversion Principle). " +
123-
"«Zavisimost na Abstraktciiakh. Net zavisimosti na chto-to konkretnoe.»"
126+
"«Zavisimost na Abstraktciiakh. Net zavisimosti na chto-to konkretnoe.»",
127+
128+
"solid-obektno-orientirovannoe-programmirovanie"
124129
};
125130
}
126131

@@ -233,7 +238,8 @@ public void MsieChakraActiveScript()
233238
[Arguments(true)]
234239
public void MsieChakraIeJsRt(bool withPrecompilation)
235240
{
236-
Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings {
241+
Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
242+
{
237243
EngineMode = JsEngineMode.ChakraIeJsRt
238244
});
239245
TransliterateStrings(createJsEngine, withPrecompilation);

test/JavaScriptEngineSwitcher.Benchmarks/Resources/russian-translit.js

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,76 @@ var transliterate = (function () {
357357
'Я': 'Ja'
358358
},
359359

360+
// ISO 9:1995
361+
'iso-9-1995': {
362+
'а': 'a',
363+
'б': 'b',
364+
'в': 'v',
365+
'г': 'g',
366+
'д': 'd',
367+
'е': 'e',
368+
'ё': 'ë',
369+
'ж': 'ž',
370+
'з': 'z',
371+
'и': 'i',
372+
'й': 'j',
373+
'к': 'k',
374+
'л': 'l',
375+
'м': 'm',
376+
'н': 'n',
377+
'о': 'o',
378+
'п': 'p',
379+
'р': 'r',
380+
'с': 's',
381+
'т': 't',
382+
'у': 'u',
383+
'ф': 'f',
384+
'х': 'h',
385+
'ц': 'c',
386+
'ч': 'č',
387+
'ш': 'š',
388+
'щ': 'ŝ',
389+
'ъ': '"',
390+
'ы': 'y',
391+
'ь': '\'',
392+
'э': 'è',
393+
'ю': 'û',
394+
'я': 'â',
395+
'А': 'A',
396+
'Б': 'B',
397+
'В': 'V',
398+
'Г': 'G',
399+
'Д': 'D',
400+
'Е': 'E',
401+
'Ё': 'Ë',
402+
'Ж': 'Ž',
403+
'З': 'Z',
404+
'И': 'I',
405+
'Й': 'J',
406+
'К': 'K',
407+
'Л': 'L',
408+
'М': 'M',
409+
'Н': 'N',
410+
'О': 'O',
411+
'П': 'P',
412+
'Р': 'R',
413+
'С': 'S',
414+
'Т': 'T',
415+
'У': 'U',
416+
'Ф': 'F',
417+
'Х': 'H',
418+
'Ц': 'C',
419+
'Ч': 'Č',
420+
'Ш': 'Š',
421+
'Щ': 'Ŝ',
422+
'Ъ': '"',
423+
'Ы': 'Y',
424+
'Ь': '\'',
425+
'Э': 'È',
426+
'Ю': 'Û',
427+
'Я': 'Â'
428+
},
429+
360430
// LC
361431
'lc': {
362432
'а': 'a',
@@ -705,9 +775,123 @@ var transliterate = (function () {
705775
'Э': 'E',
706776
'Ю': 'Iu',
707777
'Я': 'Ia'
778+
},
779+
780+
// Международные телеграммы
781+
'international-telegrams': {
782+
'а': 'a',
783+
'б': 'b',
784+
'в': 'v',
785+
'г': 'g',
786+
'д': 'd',
787+
'е': 'e',
788+
'ё': 'e',
789+
'ж': 'j',
790+
'з': 'z',
791+
'и': 'i',
792+
'й': 'i',
793+
'к': 'k',
794+
'л': 'l',
795+
'м': 'm',
796+
'н': 'n',
797+
'о': 'o',
798+
'п': 'p',
799+
'р': 'r',
800+
'с': 's',
801+
'т': 't',
802+
'у': 'u',
803+
'ф': 'f',
804+
'х': 'h',
805+
'ц': 'c',
806+
'ч': 'ch',
807+
'ш': 'sh',
808+
'щ': 'sc',
809+
'ъ': '',
810+
'ы': 'y',
811+
'ь': '',
812+
'э': 'e',
813+
'ю': 'iu',
814+
'я': 'ia',
815+
'А': 'A',
816+
'Б': 'B',
817+
'В': 'V',
818+
'Г': 'G',
819+
'Д': 'D',
820+
'Е': 'E',
821+
'Ё': 'E',
822+
'Ж': 'J',
823+
'З': 'Z',
824+
'И': 'I',
825+
'Й': 'I',
826+
'К': 'K',
827+
'Л': 'L',
828+
'М': 'M',
829+
'Н': 'N',
830+
'О': 'O',
831+
'П': 'P',
832+
'Р': 'R',
833+
'С': 'S',
834+
'Т': 'T',
835+
'У': 'U',
836+
'Ф': 'F',
837+
'Х': 'H',
838+
'Ц': 'C',
839+
'Ч': 'Ch',
840+
'Ш': 'Sh',
841+
'Щ': 'Sc',
842+
'Ъ': '',
843+
'Ы': 'Y',
844+
'Ь': '',
845+
'Э': 'E',
846+
'Ю': 'Iu',
847+
'Я': 'Ia'
708848
}
709849
};
710850

851+
function toYandexFriendlyUrl(value) {
852+
var processedValue,
853+
result
854+
;
855+
856+
processedValue = value.toLowerCase();
857+
result = processedValue.replace(/([а-яё])|([\s_-])|([^a-z\d])/gi,
858+
function (all, charValue, space, special, offset) {
859+
var replacements,
860+
charCode,
861+
index,
862+
transliteratedCharValue
863+
;
864+
865+
if (space) {
866+
return '-';
867+
}
868+
869+
if (special) {
870+
return '';
871+
}
872+
873+
replacements = ['yo', 'a', 'b', 'v', 'g', 'd', 'e', 'zh',
874+
'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p',
875+
'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh',
876+
'shch', '', 'y', '', 'e', 'yu', 'ya'];
877+
878+
charCode = charValue.charCodeAt(0);
879+
if (charCode == 1025 || charCode == 1105) {
880+
index = 0;
881+
}
882+
else {
883+
index = charCode > 1071 ? charCode - 1071 : charCode - 1039;
884+
}
885+
886+
transliteratedCharValue = replacements[index];
887+
888+
return transliteratedCharValue;
889+
}
890+
);
891+
892+
return result;
893+
}
894+
711895
/**
712896
* Производит транслитерацию русского текста с кириллицы на латиницу
713897
*
@@ -733,6 +917,10 @@ var transliterate = (function () {
733917
return value;
734918
}
735919

920+
if (type === 'yandex-friendly-url') {
921+
return toYandexFriendlyUrl(value);
922+
}
923+
736924
characterMapping = characterMappings[type];
737925
if (typeof characterMapping === 'undefined') {
738926
return value;

0 commit comments

Comments
 (0)