diff options
author | Cashew <52880648+Scrub1492@users.noreply.github.com> | 2024-02-10 12:31:34 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-10 05:31:34 +0000 |
commit | 8ef351a9daac22abec5b341cca4209d7595aa4f5 (patch) | |
tree | 61ac3984f5b524dfde9a47da3f8564d3f5fe36e8 /benches/translator.bench.js | |
parent | 17111eabdd1a7e1b3c537320ba24e7d4dc507f5b (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.js | 62 |
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); + } + }); +}); |