diff options
| -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'}); |