summaryrefslogtreecommitdiff
path: root/benches
diff options
context:
space:
mode:
authorCashew <52880648+Scrub1492@users.noreply.github.com>2024-02-03 12:12:20 +0700
committerGitHub <noreply@github.com>2024-02-03 05:12:20 +0000
commit3fc7362fe189b73d9cb9a0ff3338d755ca7e7003 (patch)
tree4c5bfb646b1b4603e7bf7273b98ad292cfe4a7ca /benches
parent16423a1bc89d8a0e6439c8d3f7441fd3d36e85df (diff)
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
Diffstat (limited to 'benches')
-rw-r--r--benches/jsconfig.json43
-rw-r--r--benches/language-transformer.bench.js104
2 files changed, 147 insertions, 0 deletions
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 <https://www.gnu.org/licenses/>.
+ */
+
+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);
+ }
+ });
+});