From 3fc7362fe189b73d9cb9a0ff3338d755ca7e7003 Mon Sep 17 00:00:00 2001 From: Cashew <52880648+Scrub1492@users.noreply.github.com> Date: Sat, 3 Feb 2024 12:12:20 +0700 Subject: Add vitest benchmark (#583) * add basic benches * add package.json script * fix header * add codspeed plugin * add benchmark GitHub action * add env * revert change * merge upstream * update names --- benches/jsconfig.json | 43 ++++++++++++++ benches/language-transformer.bench.js | 104 ++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 benches/jsconfig.json create mode 100644 benches/language-transformer.bench.js (limited to 'benches') diff --git a/benches/jsconfig.json b/benches/jsconfig.json new file mode 100644 index 00000000..8b821d68 --- /dev/null +++ b/benches/jsconfig.json @@ -0,0 +1,43 @@ +{ + "compilerOptions": { + "module": "ES2022", + "target": "ES2022", + "checkJs": true, + "moduleResolution": "node", + "strict": true, + "strictNullChecks": true, + "noImplicitAny": true, + "strictPropertyInitialization": true, + "suppressImplicitAnyIndexErrors": false, + "skipLibCheck": false, + "baseUrl": ".", + "paths": { + "*": ["../types/ext/*"], + "dev/*": ["../types/dev/*"], + "benches/*": ["../types/benches/*"], + "rollup/parseAst": ["../types/other/rollup-parse-ast"], + "ext/json-schema": ["../types/ext/json-schema"], + "json-schema": ["json-schema"] + }, + "types": [ + "chrome", + "firefox-webext-browser", + "handlebars", + "jszip", + "parse5", + "wanakana" + ] + }, + "include": [ + "**/*.js", + "../ext/**/*.js", + "../types/ext/**/*.ts", + "../types/dev/**/*.ts", + "../types/benches/**/*.ts", + "../types/other/globals.d.ts" + ], + "exclude": [ + "../node_modules", + "../dev/lib" + ] +} diff --git a/benches/language-transformer.bench.js b/benches/language-transformer.bench.js new file mode 100644 index 00000000..9d312fb7 --- /dev/null +++ b/benches/language-transformer.bench.js @@ -0,0 +1,104 @@ +/* + * 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 . + */ + +import fs from 'fs'; +import {fileURLToPath} from 'node:url'; +import path from 'path'; +import {bench, describe} from 'vitest'; +import {parseJson} from '../dev/json.js'; +import {LanguageTransformer} from '../ext/js/language/language-transformer.js'; + +const dirname = path.dirname(fileURLToPath(import.meta.url)); + +/** @type {import('language-transformer').LanguageTransformDescriptor} */ +const descriptor = parseJson(fs.readFileSync(path.join(dirname, '..', 'ext', 'data/language/japanese-transforms.json'), {encoding: 'utf8'})); +const languageTransformer = new LanguageTransformer(); +languageTransformer.addDescriptor(descriptor); + +describe('Language transformer basic tests', () => { + const adjectiveInflections = [ + '愛しい', + '愛しそう', + '愛しすぎる', + '愛しかったら', + '愛しかったり', + '愛しくて', + '愛しく', + '愛しくない', + '愛しさ', + '愛しかった', + '愛しくありません', + '愛しくありませんでした', + '愛しき' + ]; + + const verbInflections = [ + '食べる', + '食べます', + '食べた', + '食べました', + '食べて', + '食べられる', + '食べられる', + '食べさせる', + '食べさせられる', + '食べろ', + '食べない', + '食べません', + '食べなかった', + '食べませんでした', + '食べなくて', + '食べられない', + '食べられない', + '食べさせない', + '食べさせられない', + '食べ', + '食べれば', + '食べちゃう', + '食べちまう', + '食べなさい', + '食べそう', + '食べすぎる', + '食べたい', + '食べたら', + '食べたり', + '食べず', + '食べぬ', + '食べ', + '食べましょう', + '食べよう', + '食べとく', + '食べている', + '食べておる', + '食べてる', + '食べとる', + '食べてしまう' + ]; + + const inflectionCombinations = [ + '抱き抱えていなければ', + '抱きかかえていなければ', + '打ち込んでいませんでした', + '食べさせられたくなかった' + ]; + + bench('transformations', () => { + for (const transform of [...adjectiveInflections, ...verbInflections, ...inflectionCombinations]) { + languageTransformer.transform(transform); + } + }); +}); -- cgit v1.2.3