aboutsummaryrefslogtreecommitdiff
path: root/benches/translator.bench.js
diff options
context:
space:
mode:
authorCashew <52880648+Scrub1492@users.noreply.github.com>2024-02-10 12:31:34 +0700
committerGitHub <noreply@github.com>2024-02-10 05:31:34 +0000
commit8ef351a9daac22abec5b341cca4209d7595aa4f5 (patch)
tree61ac3984f5b524dfde9a47da3f8564d3f5fe36e8 /benches/translator.bench.js
parent17111eabdd1a7e1b3c537320ba24e7d4dc507f5b (diff)
Add benchmarks for Translator class methods (#654)
* add translator benches * fix path * update test names * remove unnecessary window, rename bench to translator
Diffstat (limited to 'benches/translator.bench.js')
-rw-r--r--benches/translator.bench.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/benches/translator.bench.js b/benches/translator.bench.js
new file mode 100644
index 00000000..1231c31c
--- /dev/null
+++ b/benches/translator.bench.js
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2023-2024 Yomitan Authors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+import {readFileSync} from 'fs';
+import {fileURLToPath} from 'node:url';
+import path from 'path';
+import {bench, describe} from 'vitest';
+import {parseJson} from '../dev/json.js';
+import {createFindKanjiOptions, createFindTermsOptions} from '../test/utilities/translator.js';
+import {createTranslatorContext} from '../test/fixtures/translator-test.js';
+
+const dirname = path.dirname(fileURLToPath(import.meta.url));
+const dictionaryName = 'Test Dictionary 2';
+const translator = await createTranslatorContext(path.join(dirname, '..', 'test', 'data/dictionaries/valid-dictionary1'), dictionaryName);
+
+describe('Translator', () => {
+ const testInputsFilePath = path.join(dirname, '..', 'test', 'data/translator-test-inputs.json');
+ /** @type {import('test/translator').TranslatorTestInputs} */
+ const {optionsPresets, tests} = parseJson(readFileSync(testInputsFilePath, {encoding: 'utf8'}));
+
+ const findKanjiTests = tests.filter((data) => data.options === 'kanji');
+ const findTermTests = tests.filter((data) => data.options === 'default');
+ const findTermWithTextTransformationsTests = tests.filter((data) => data.options !== 'kanji' && data.options !== 'default');
+
+ bench(`Translator.prototype.findTerms - no text transformations (n=${findTermTests.length})`, async () => {
+ for (const data of /** @type {import('test/translator').TestInputFindTerm[]} */ (findTermTests)) {
+ const {mode, text} = data;
+ const options = createFindTermsOptions(dictionaryName, optionsPresets, data.options);
+ await translator.findTerms(mode, text, options);
+ }
+ });
+
+ bench(`Translator.prototype.findTerms - text transformations (n=${findTermWithTextTransformationsTests.length})`, async () => {
+ for (const data of /** @type {import('test/translator').TestInputFindTerm[]} */ (findTermWithTextTransformationsTests)) {
+ const {mode, text} = data;
+ const options = createFindTermsOptions(dictionaryName, optionsPresets, data.options);
+ await translator.findTerms(mode, text, options);
+ }
+ });
+
+ bench(`Translator.prototype.findKanji - (n=${findKanjiTests.length})`, async () => {
+ for (const data of /** @type {import('test/translator').TestInputFindKanji[]} */ (findKanjiTests)) {
+ const {text} = data;
+ const options = createFindKanjiOptions(dictionaryName, optionsPresets, data.options);
+ await translator.findKanji(text, options);
+ }
+ });
+});