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 | |
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
-rw-r--r-- | benches/jsconfig.json | 2 | ||||
-rw-r--r-- | benches/translator.bench.js | 62 | ||||
-rw-r--r-- | test/fixtures/translator-test.js | 2 |
3 files changed, 65 insertions, 1 deletions
diff --git a/benches/jsconfig.json b/benches/jsconfig.json index 8b821d68..8743868a 100644 --- a/benches/jsconfig.json +++ b/benches/jsconfig.json @@ -15,6 +15,7 @@ "*": ["../types/ext/*"], "dev/*": ["../types/dev/*"], "benches/*": ["../types/benches/*"], + "test/*": ["../types/test/*"], "rollup/parseAst": ["../types/other/rollup-parse-ast"], "ext/json-schema": ["../types/ext/json-schema"], "json-schema": ["json-schema"] @@ -34,6 +35,7 @@ "../types/ext/**/*.ts", "../types/dev/**/*.ts", "../types/benches/**/*.ts", + "../types/test/**/*.ts", "../types/other/globals.d.ts" ], "exclude": [ 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); + } + }); +}); diff --git a/test/fixtures/translator-test.js b/test/fixtures/translator-test.js index d1b3de8b..a4c65b88 100644 --- a/test/fixtures/translator-test.js +++ b/test/fixtures/translator-test.js @@ -43,7 +43,7 @@ vi.stubGlobal('chrome', chrome); * @param {string} dictionaryName * @returns {Promise<Translator>} */ -async function createTranslatorContext(dictionaryDirectory, dictionaryName) { +export async function createTranslatorContext(dictionaryDirectory, dictionaryName) { // Dictionary const testDictionary = createDictionaryArchive(dictionaryDirectory, dictionaryName); const testDictionaryContent = await testDictionary.generateAsync({type: 'arraybuffer'}); |