summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCashew <52880648+cashewnuttynuts@users.noreply.github.com>2024-06-28 23:06:27 +0700
committerGitHub <noreply@github.com>2024-06-28 16:06:27 +0000
commitb4e885d1f1f467152295c2a830d87704b36f4ff6 (patch)
tree87219b4477b9f86fc6791a3a36394625f8d81635
parent79dc26b6a83e4ef1643d0795d569429086ac1024 (diff)
Korean transformation tests (#1134)
* wip * add tests * wip * fix typo * beautify test output * fix static analysis tests
-rw-r--r--test/fixtures/language-transformer-test.js6
-rw-r--r--test/language/korean-transforms.test.js707
2 files changed, 711 insertions, 2 deletions
diff --git a/test/fixtures/language-transformer-test.js b/test/fixtures/language-transformer-test.js
index 69cdc230..bf6b723c 100644
--- a/test/fixtures/language-transformer-test.js
+++ b/test/fixtures/language-transformer-test.js
@@ -58,12 +58,14 @@ function hasTermReasons(languageTransformer, source, expectedTerm, expectedCondi
/**
* @param {LanguageTransformer} languageTransformer
* @param {import('test/language-transformer-test').LanguageTransformerTestCategory[]} data
+ * @param {(input: string) => string} [preprocess] An optional function for if the input to the transformer needs to be preprocessed.
*/
-export function testLanguageTransformer(languageTransformer, data) {
+export function testLanguageTransformer(languageTransformer, data, preprocess) {
+ if (typeof preprocess === 'undefined') { preprocess = (input) => input; }
describe('deinflections', () => {
describe.each(data)('$category', ({valid, tests}) => {
for (const {source, term, rule, reasons} of tests) {
- const {has} = hasTermReasons(languageTransformer, source, term, rule, reasons);
+ const {has} = hasTermReasons(languageTransformer, preprocess(source), preprocess(term), rule, reasons);
let message = `${source} ${valid ? 'has' : 'does not have'} term candidate ${JSON.stringify(term)}`;
if (rule !== null) {
message += ` with rule ${JSON.stringify(rule)}`;
diff --git a/test/language/korean-transforms.test.js b/test/language/korean-transforms.test.js
new file mode 100644
index 00000000..c91c1756
--- /dev/null
+++ b/test/language/korean-transforms.test.js
@@ -0,0 +1,707 @@
+/*
+ * Copyright (C) 2023-2024 Yomitan Authors
+ * Copyright (C) 2020-2022 Yomichan 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 {koreanTransforms} from '../../ext/js/language/ko/korean-transforms.js';
+import {LanguageTransformer} from '../../ext/js/language/language-transformer.js';
+import {testLanguageTransformer} from '../fixtures/language-transformer-test.js';
+import {Hangul} from '../../ext/lib/hangul-js.js';
+
+/* eslint-disable @stylistic/no-multi-spaces */
+const tests = [
+ {
+ category: 'ㅏ다',
+ valid: true,
+ tests: [
+ {term: '가다', source: '가다', rule: 'v', reasons: []},
+ {term: '가다', source: '갑니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '가다', source: '가요', rule: 'v', reasons: ['-아/어요']},
+ {term: '가다', source: '가', rule: 'v', reasons: ['어간']},
+ {term: '가다', source: '간다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '가다', source: '갔습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '가다', source: '갔어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '가다', source: '갔어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '가다', source: '갔다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '가다', source: '가겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '가다', source: '가겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '가다', source: '가겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '가다', source: '가겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '가다', source: '갑니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '가다', source: '가냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '가다', source: '갔습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '가다', source: '갔냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '가다', source: '가겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '가다', source: '가겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '가다', source: '가네', rule: 'v', reasons: ['-네']},
+ {term: '가다', source: '가는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '가다', source: '감', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '가다', source: '간', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '가다', source: '가게', rule: 'v', reasons: ['-게']},
+ {term: '가다', source: '가고', rule: 'v', reasons: ['-고']},
+ {term: '가다', source: '가면', rule: 'v', reasons: ['-(으)면']},
+ {term: '가다', source: '가니', rule: 'v', reasons: ['-(으)니']},
+ {term: '가다', source: '가십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '가다', source: '가세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '가다', source: '가라', rule: 'v', reasons: ['-아/어라']},
+ {term: '가다', source: '갑시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '가다', source: '가자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㅓ다',
+ valid: true,
+ tests: [
+ {term: '서다', source: '서다', rule: 'v', reasons: []},
+ {term: '서다', source: '섭니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '서다', source: '서요', rule: 'v', reasons: ['-아/어요']},
+ {term: '서다', source: '서', rule: 'v', reasons: ['어간']},
+ {term: '서다', source: '선다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '서다', source: '섰어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '서다', source: '섰어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '서다', source: '섰다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '서다', source: '섰습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '서다', source: '서겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '서다', source: '서겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '서다', source: '서겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '서다', source: '서겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '서다', source: '섭니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '서다', source: '서냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '서다', source: '섰습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '서다', source: '섰냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '서다', source: '서겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '서다', source: '서겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '서다', source: '서는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '서다', source: '서네', rule: 'v', reasons: ['-네']},
+ {term: '서다', source: '섬', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '서다', source: '선', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '서다', source: '서게', rule: 'v', reasons: ['-게']},
+ {term: '서다', source: '서면', rule: 'v', reasons: ['-(으)면']},
+ {term: '서다', source: '서고', rule: 'v', reasons: ['-고']},
+ {term: '서다', source: '서니', rule: 'v', reasons: ['-(으)니']},
+ {term: '서다', source: '서세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '서다', source: '서십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '서다', source: '서라', rule: 'v', reasons: ['-아/어라']},
+ {term: '서다', source: '서자', rule: 'v', reasons: ['-자']},
+ {term: '서다', source: '섭시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ ],
+ },
+ {
+ category: 'ㅗ다',
+ valid: true,
+ tests: [
+ {term: '오다', source: '오다', rule: 'v', reasons: []},
+ {term: '오다', source: '옵니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '오다', source: '와요', rule: 'v', reasons: ['-아/어요']},
+ {term: '오다', source: '와', rule: 'v', reasons: ['-아/어']},
+ {term: '오다', source: '온다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '오다', source: '왔습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '오다', source: '왔어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '오다', source: '왔어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '오다', source: '왔다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '오다', source: '오겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '오다', source: '오겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '오다', source: '오겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '오다', source: '오겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '오다', source: '옵니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '오다', source: '오냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '오다', source: '왔습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '오다', source: '왔냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '오다', source: '오겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '오다', source: '오겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '오다', source: '오네', rule: 'v', reasons: ['-네']},
+ {term: '오다', source: '오는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '오다', source: '옴', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '오다', source: '온', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '오다', source: '오게', rule: 'v', reasons: ['-게']},
+ {term: '오다', source: '오고', rule: 'v', reasons: ['-고']},
+ {term: '오다', source: '오면', rule: 'v', reasons: ['-(으)면']},
+ {term: '오다', source: '오니', rule: 'v', reasons: ['-(으)니']},
+ {term: '오다', source: '오십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '오다', source: '오세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '오다', source: '와라', rule: 'v', reasons: ['-아/어라']},
+ {term: '오다', source: '옵시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '오다', source: '오자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㅜ다',
+ valid: true,
+ tests: [
+ {term: '나누다', source: '나누다', rule: 'v', reasons: []},
+ {term: '나누다', source: '나눕니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '나누다', source: '나눈다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '나누다', source: '나눠', rule: 'v', reasons: ['-아/어']},
+ {term: '나누다', source: '나눠요', rule: 'v', reasons: ['-아/어요']},
+ {term: '나누다', source: '나눴어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '나누다', source: '나눴어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '나누다', source: '나눴다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '나누다', source: '나눴습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '나누다', source: '나누겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '나누다', source: '나누겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '나누다', source: '나누겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '나누다', source: '나누겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '나누다', source: '나눕니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '나누다', source: '나누냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '나누다', source: '나눴냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '나누다', source: '나눴습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '나누다', source: '나누겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '나누다', source: '나누겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '나누다', source: '나누네', rule: 'v', reasons: ['-네']},
+ {term: '나누다', source: '나누는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '나누다', source: '나눔', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '나누다', source: '나눈', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '나누다', source: '나누게', rule: 'v', reasons: ['-게']},
+ {term: '나누다', source: '나누니', rule: 'v', reasons: ['-(으)니']},
+ {term: '나누다', source: '나누면', rule: 'v', reasons: ['-(으)면']},
+ {term: '나누다', source: '나누고', rule: 'v', reasons: ['-고']},
+ {term: '나누다', source: '나누세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '나누다', source: '나눠라', rule: 'v', reasons: ['-아/어라']},
+ {term: '나누다', source: '나누십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '나누다', source: '나누자', rule: 'v', reasons: ['-자']},
+ {term: '나누다', source: '나눕시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ ],
+ },
+ {
+ category: 'ㅡ다',
+ valid: true,
+ tests: [
+ {term: '쓰다', source: '쓰다', rule: 'v', reasons: []},
+ {term: '쓰다', source: '씁니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '쓰다', source: '써요', rule: 'v', reasons: ['-아/어요']},
+ {term: '쓰다', source: '써', rule: 'v', reasons: ['-아/어']},
+ {term: '쓰다', source: '쓴다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '쓰다', source: '썼습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '쓰다', source: '썼어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '쓰다', source: '썼어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '쓰다', source: '썼다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '쓰다', source: '쓰겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '쓰다', source: '쓰겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '쓰다', source: '쓰겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '쓰다', source: '쓰겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '쓰다', source: '씁니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '쓰다', source: '쓰냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '쓰다', source: '썼습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '쓰다', source: '썼을까', rule: 'v', reasons: ['-았/었', '-(으)ㄹ까']},
+ {term: '쓰다', source: '썼냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '쓰다', source: '쓰겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '쓰다', source: '쓰겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '쓰다', source: '쓰네', rule: 'v', reasons: ['-네']},
+ // Adjective 쓰다
+ {term: '쓰다', source: '쓰구나', rule: 'adj', reasons: ['-구나']},
+ {term: '쓰다', source: '쓰는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '쓰다', source: '씀', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '쓰다', source: '쓴', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '쓰다', source: '쓰게', rule: 'v', reasons: ['-게']},
+ {term: '쓰다', source: '쓰고', rule: 'v', reasons: ['-고']},
+ {term: '쓰다', source: '쓰면', rule: 'v', reasons: ['-(으)면']},
+ {term: '쓰다', source: '쓰니', rule: 'v', reasons: ['-(으)니']},
+ {term: '쓰다', source: '쓰세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '쓰다', source: '써라', rule: 'v', reasons: ['-아/어라']},
+ {term: '쓰다', source: '쓰십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '쓰다', source: '쓰자', rule: 'v', reasons: ['-자']},
+ {term: '쓰다', source: '씁시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ ],
+ },
+ {
+ category: 'ㅣ다',
+ valid: true,
+ tests: [
+ {term: '기다리다', source: '기다리다', rule: 'v', reasons: []},
+ {term: '기다리다', source: '기다립니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '기다리다', source: '기다려요', rule: 'v', reasons: ['-아/어요']},
+ {term: '기다리다', source: '기다려', rule: 'v', reasons: ['-아/어']},
+ {term: '기다리다', source: '기다린다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '기다리다', source: '기다렸습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '기다리다', source: '기다렸어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '기다리다', source: '기다렸어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '기다리다', source: '기다렸다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '기다리다', source: '기다리겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '기다리다', source: '기다리겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '기다리다', source: '기다리겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '기다리다', source: '기다리겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '기다리다', source: '기다립니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '기다리다', source: '기다리냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '기다리다', source: '기다렸습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '기다리다', source: '기다렸냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '기다리다', source: '기다리겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '기다리다', source: '기다리겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '기다리다', source: '기다리네', rule: 'v', reasons: ['-네']},
+ {term: '기다리다', source: '기다리는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '기다리다', source: '기다림', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '기다리다', source: '기다린', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '기다리다', source: '기다리게', rule: 'v', reasons: ['-게']},
+ {term: '기다리다', source: '기다리고', rule: 'v', reasons: ['-고']},
+ {term: '기다리다', source: '기다리면', rule: 'v', reasons: ['-(으)면']},
+ {term: '기다리다', source: '기다리니', rule: 'v', reasons: ['-(으)니']},
+ {term: '기다리다', source: '기다리십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '기다리다', source: '기다리세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '기다리다', source: '기다려라', rule: 'v', reasons: ['-아/어라']},
+ {term: '기다리다', source: '기다립시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '기다리다', source: '기다리자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㅚ다',
+ valid: true,
+ tests: [
+ {term: '되다', source: '되다', rule: 'v', reasons: []},
+ {term: '되다', source: '됩니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '되다', source: '돼요', rule: 'v', reasons: ['-아/어요']},
+ {term: '되다', source: '돼', rule: 'v', reasons: ['-아/어']},
+ {term: '되다', source: '된다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '되다', source: '됐습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '되다', source: '됐어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '되다', source: '됐어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '되다', source: '됐다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '되다', source: '되겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '되다', source: '되겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '되다', source: '되겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '되다', source: '되겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '되다', source: '됩니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '되다', source: '되냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '되다', source: '됐습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '되다', source: '됐냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '되다', source: '되겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '되다', source: '되겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '되다', source: '되네', rule: 'v', reasons: ['-네']},
+ {term: '되다', source: '되는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '되다', source: '됨', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '되다', source: '된', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '되다', source: '되게', rule: 'v', reasons: ['-게']},
+ {term: '되다', source: '되고', rule: 'v', reasons: ['-고']},
+ {term: '되다', source: '되면', rule: 'v', reasons: ['-(으)면']},
+ {term: '되다', source: '되니', rule: 'v', reasons: ['-(으)니']},
+ {term: '되다', source: '되십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '되다', source: '되세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '되다', source: '돼라', rule: 'v', reasons: ['-아/어라']},
+ {term: '되다', source: '됩시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '되다', source: '되자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㅐ다',
+ valid: true,
+ tests: [
+ {term: '보내다', source: '보내다', rule: 'v', reasons: []},
+ {term: '보내다', source: '보냅니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '보내다', source: '보내요', rule: 'v', reasons: ['-아/어요']},
+ {term: '보내다', source: '보내', rule: 'v', reasons: ['어간']},
+ {term: '보내다', source: '보낸다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '보내다', source: '보냈습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '보내다', source: '보냈어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '보내다', source: '보냈어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '보내다', source: '보냈다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '보내다', source: '보내겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '보내다', source: '보내겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '보내다', source: '보내겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '보내다', source: '보내겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '보내다', source: '보냅니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '보내다', source: '보내냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '보내다', source: '보냈습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '보내다', source: '보냈냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '보내다', source: '보내겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '보내다', source: '보내겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '보내다', source: '보내네', rule: 'v', reasons: ['-네']},
+ {term: '보내다', source: '보내는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '보내다', source: '보냄', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '보내다', source: '보낸', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '보내다', source: '보내게', rule: 'v', reasons: ['-게']},
+ {term: '보내다', source: '보내고', rule: 'v', reasons: ['-고']},
+ {term: '보내다', source: '보내면', rule: 'v', reasons: ['-(으)면']},
+ {term: '보내다', source: '보내니', rule: 'v', reasons: ['-(으)니']},
+ {term: '보내다', source: '보내십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '보내다', source: '보내세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '보내다', source: '보내라', rule: 'v', reasons: ['-아/어라']},
+ {term: '보내다', source: '보냅시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '보내다', source: '보내자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㅕ다',
+ valid: true,
+ tests: [
+ {term: '펴다', source: '펴다', rule: 'v', reasons: []},
+ {term: '펴다', source: '폅니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '펴다', source: '펴요', rule: 'v', reasons: ['-아/어요']},
+ {term: '펴다', source: '펴', rule: 'v', reasons: ['어간']},
+ {term: '펴다', source: '편다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '펴다', source: '폈습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '펴다', source: '폈어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '펴다', source: '폈어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '펴다', source: '폈다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '펴다', source: '펴겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '펴다', source: '펴겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '펴다', source: '펴겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '펴다', source: '펴겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '펴다', source: '폅니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '펴다', source: '펴냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '펴다', source: '폈습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '펴다', source: '폈냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '펴다', source: '펴겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '펴다', source: '펴겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '펴다', source: '펴네', rule: 'v', reasons: ['-네']},
+ {term: '펴다', source: '펴는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '펴다', source: '폄', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '펴다', source: '편', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '펴다', source: '펴게', rule: 'v', reasons: ['-게']},
+ {term: '펴다', source: '펴고', rule: 'v', reasons: ['-고']},
+ {term: '펴다', source: '펴면', rule: 'v', reasons: ['-(으)면']},
+ {term: '펴다', source: '펴니', rule: 'v', reasons: ['-(으)니']},
+ {term: '펴다', source: '펴십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '펴다', source: '펴세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '펴다', source: '펴라', rule: 'v', reasons: ['-아/어라']},
+ {term: '펴다', source: '폅시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '펴다', source: '펴자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㅏ + consonant + 다',
+ valid: true,
+ tests: [
+ {term: '받다', source: '받다', rule: 'v', reasons: []},
+ {term: '받다', source: '받습니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '받다', source: '받아요', rule: 'v', reasons: ['-아/어요']},
+ {term: '받다', source: '받아', rule: 'v', reasons: ['-아/어']},
+ {term: '받다', source: '받는다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '받다', source: '받았습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '받다', source: '받았어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '받다', source: '받았어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '받다', source: '받았다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '받다', source: '받겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '받다', source: '받겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '받다', source: '받겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '받다', source: '받겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '받다', source: '받습니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '받다', source: '받냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '받다', source: '받았습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '받다', source: '받았냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '받다', source: '받겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '받다', source: '받겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '받다', source: '받네', rule: 'v', reasons: ['-네']},
+ {term: '받다', source: '받는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '받다', source: '받음', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '받다', source: '받은', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '받다', source: '받게', rule: 'v', reasons: ['-게']},
+ {term: '받다', source: '받고', rule: 'v', reasons: ['-고']},
+ {term: '받다', source: '받으면', rule: 'v', reasons: ['-(으)면']},
+ {term: '받다', source: '받으니', rule: 'v', reasons: ['-(으)니']},
+ {term: '받다', source: '받으십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '받다', source: '받으세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '받다', source: '받아라', rule: 'v', reasons: ['-아/어라']},
+ {term: '받다', source: '받읍시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '받다', source: '받자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㅗ + consonant + 다',
+ valid: true,
+ tests: [
+ {term: '좋다', source: '좋다', rule: 'adj', reasons: []},
+ {term: '좋다', source: '좋습니다', rule: 'adj', reasons: ['-(스)ㅂ니다']},
+ {term: '좋다', source: '좋아요', rule: 'adj', reasons: ['-아/어요']},
+ {term: '좋다', source: '좋아', rule: 'adj', reasons: ['-아/어']},
+ {term: '좋다', source: '좋았습니다', rule: 'adj', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '좋다', source: '좋았어요', rule: 'adj', reasons: ['-았/었', '-아/어요']},
+ {term: '좋다', source: '좋았어', rule: 'adj', reasons: ['-았/었', '-아/어']},
+ {term: '좋다', source: '좋았다', rule: 'adj', reasons: ['-았/었', '-다']},
+ {term: '좋다', source: '좋겠습니다', rule: 'adj', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '좋다', source: '좋겠어요', rule: 'adj', reasons: ['-겠', '-아/어요']},
+ {term: '좋다', source: '좋겠어', rule: 'adj', reasons: ['-겠', '-아/어']},
+ {term: '좋다', source: '좋겠다', rule: 'adj', reasons: ['-겠', '-다']},
+ {term: '좋다', source: '좋습니까', rule: 'adj', reasons: ['-(스)ㅂ니까']},
+ {term: '좋다', source: '좋냐', rule: 'adj', reasons: ['-(으)냐']},
+ {term: '좋다', source: '좋았습니까', rule: 'adj', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '좋다', source: '좋았을까', rule: 'adj', reasons: ['-았/었', '-(으)ㄹ까']},
+ {term: '좋다', source: '좋았냐', rule: 'adj', reasons: ['-았/었', '-(으)냐']},
+ {term: '좋다', source: '좋겠습니까', rule: 'adj', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '좋다', source: '좋겠냐', rule: 'adj', reasons: ['-겠', '-(으)냐']},
+ {term: '좋다', source: '좋네', rule: 'adj', reasons: ['-네']},
+ {term: '좋다', source: '좋구나', rule: 'adj', reasons: ['-구나']},
+ {term: '좋다', source: '좋음', rule: 'adj', reasons: ['-(으)ㅁ']},
+ {term: '좋다', source: '좋은', rule: 'adj', reasons: ['-(으)ㄴ']},
+ {term: '좋다', source: '좋게', rule: 'adj', reasons: ['-게']},
+ {term: '좋다', source: '좋고', rule: 'adj', reasons: ['-고']},
+ {term: '좋다', source: '좋으면', rule: 'adj', reasons: ['-(으)면']},
+ {term: '좋다', source: '좋으니', rule: 'adj', reasons: ['-(으)니']},
+ ],
+ },
+ {
+ category: 'other vowel + consonant + 다',
+ valid: true,
+ tests: [
+ {term: '먹다', source: '먹다', rule: 'v', reasons: []},
+ {term: '먹다', source: '먹습니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '먹다', source: '먹어요', rule: 'v', reasons: ['-아/어요']},
+ {term: '먹다', source: '먹어', rule: 'v', reasons: ['-아/어']},
+ {term: '먹다', source: '먹는다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '먹다', source: '먹었습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '먹다', source: '먹었어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '먹다', source: '먹었어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '먹다', source: '먹었다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '먹다', source: '먹겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '먹다', source: '먹겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '먹다', source: '먹겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '먹다', source: '먹겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '먹다', source: '먹습니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '먹다', source: '먹냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '먹다', source: '먹었습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '먹다', source: '먹었냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '먹다', source: '먹겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '먹다', source: '먹겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '먹다', source: '먹네', rule: 'v', reasons: ['-네']},
+ {term: '먹다', source: '먹는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '먹다', source: '먹음', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '먹다', source: '먹은', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '먹다', source: '먹게', rule: 'v', reasons: ['-게']},
+ {term: '먹다', source: '먹고', rule: 'v', reasons: ['-고']},
+ {term: '먹다', source: '먹으면', rule: 'v', reasons: ['-(으)면']},
+ {term: '먹다', source: '먹으니', rule: 'v', reasons: ['-(으)니']},
+ {term: '먹다', source: '먹으십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '먹다', source: '먹으세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '먹다', source: '먹어라', rule: 'v', reasons: ['-아/어라']},
+ {term: '먹다', source: '먹읍시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '먹다', source: '먹자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: '하다',
+ valid: true,
+ tests: [
+ {term: '하다', source: '하다', rule: 'v', reasons: []},
+ {term: '하다', source: '합니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '하다', source: '해요', rule: 'v', reasons: ['-아/어요']},
+ {term: '하다', source: '해', rule: 'v', reasons: ['-아/어']},
+ {term: '하다', source: '한다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '하다', source: '했습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '하다', source: '했어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '하다', source: '했어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '하다', source: '했다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '하다', source: '하겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '하다', source: '하겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '하다', source: '하겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '하다', source: '하겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '하다', source: '합니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '하다', source: '하냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '하다', source: '했습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '하다', source: '했냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '하다', source: '하겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '하다', source: '하겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '하다', source: '하네', rule: 'v', reasons: ['-네']},
+ {term: '하다', source: '하는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '하다', source: '함', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '하다', source: '한', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '하다', source: '하게', rule: 'v', reasons: ['-게']},
+ {term: '하다', source: '하고', rule: 'v', reasons: ['-고']},
+ {term: '하다', source: '하면', rule: 'v', reasons: ['-(으)면']},
+ {term: '하다', source: '하니', rule: 'v', reasons: ['-(으)니']},
+ {term: '하다', source: '하십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '하다', source: '하세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '하다', source: '해라', rule: 'v', reasons: ['-아/어라']},
+ {term: '하다', source: '합시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '하다', source: '하자', rule: 'v', reasons: ['-자']},
+
+ {term: '공부하다', source: '공부하다', rule: 'v', reasons: []},
+ {term: '공부하다', source: '공부합니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '공부하다', source: '공부해요', rule: 'v', reasons: ['-아/어요']},
+ {term: '공부하다', source: '공부해', rule: 'v', reasons: ['-아/어']},
+ {term: '공부하다', source: '공부한다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '공부하다', source: '공부했습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '공부하다', source: '공부했어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '공부하다', source: '공부했어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '공부하다', source: '공부했다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '공부하다', source: '공부하겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '공부하다', source: '공부하겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '공부하다', source: '공부하겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '공부하다', source: '공부하겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '공부하다', source: '공부합니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '공부하다', source: '공부하냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '공부하다', source: '공부했습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '공부하다', source: '공부했냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '공부하다', source: '공부하겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '공부하다', source: '공부하겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '공부하다', source: '공부하네', rule: 'v', reasons: ['-네']},
+ {term: '공부하다', source: '공부하는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '공부하다', source: '공부함', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '공부하다', source: '공부한', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '공부하다', source: '공부하게', rule: 'v', reasons: ['-게']},
+ {term: '공부하다', source: '공부하고', rule: 'v', reasons: ['-고']},
+ {term: '공부하다', source: '공부하면', rule: 'v', reasons: ['-(으)면']},
+ {term: '공부하다', source: '공부하니', rule: 'v', reasons: ['-(으)니']},
+ {term: '공부하다', source: '공부하십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '공부하다', source: '공부하세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '공부하다', source: '공부해라', rule: 'v', reasons: ['-아/어라']},
+ {term: '공부하다', source: '공부합시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '공부하다', source: '공부하자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㅅ다 irregular',
+ valid: true,
+ tests: [
+ {term: '짓다', source: '짓다', rule: 'v', reasons: []},
+ {term: '짓다', source: '짓습니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '짓다', source: '지어요', rule: 'v', reasons: ['-아/어요']},
+ {term: '짓다', source: '지어', rule: 'v', reasons: ['-아/어']},
+ {term: '짓다', source: '짓는다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '짓다', source: '지었습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '짓다', source: '지었어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '짓다', source: '지었어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '짓다', source: '지었다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '짓다', source: '짓겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '짓다', source: '짓겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '짓다', source: '짓겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '짓다', source: '짓겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '짓다', source: '짓습니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '짓다', source: '짓냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '짓다', source: '지었습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '짓다', source: '지었냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '짓다', source: '짓겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '짓다', source: '짓겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '짓다', source: '짓네', rule: 'v', reasons: ['-네']},
+ {term: '짓다', source: '짓는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '짓다', source: '지음', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '짓다', source: '지은', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '짓다', source: '짓게', rule: 'v', reasons: ['-게']},
+ {term: '짓다', source: '짓고', rule: 'v', reasons: ['-고']},
+ {term: '짓다', source: '지으면', rule: 'v', reasons: ['-(으)면']},
+ {term: '짓다', source: '지으니', rule: 'v', reasons: ['-(으)니']},
+ {term: '짓다', source: '지으십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '짓다', source: '지으세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '짓다', source: '지어라', rule: 'v', reasons: ['-아/어라']},
+ {term: '짓다', source: '지읍시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '짓다', source: '짓자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+ {
+ category: 'ㄷ다 irregular',
+ valid: true,
+ tests: [
+ {term: '걷다', source: '걷다', rule: 'v', reasons: []},
+ {term: '걷다', source: '걷습니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '걷다', source: '걸어', rule: 'v', reasons: ['-아/어']},
+ {term: '걷다', source: '걸어요', rule: 'v', reasons: ['-아/어요']},
+ {term: '걷다', source: '걷는다', rule: 'v', reasons: ['-(느)ㄴ다']},
+ {term: '걷다', source: '걸었다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '걷다', source: '걸었습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '걷다', source: '걸었어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '걷다', source: '걸었어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '걷다', source: '걷겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '걷다', source: '걷겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '걷다', source: '걷겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '걷다', source: '걷겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '걷다', source: '걷겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '걷다', source: '걷습니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '걷다', source: '걷냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '걷다', source: '걸었냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '걷다', source: '걸었습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '걷다', source: '걷겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '걷다', source: '걷겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '걷다', source: '걷네', rule: 'v', reasons: ['-네']},
+ {term: '걷다', source: '걷는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '걷다', source: '걸음', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '걷다', source: '걸은', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '걷다', source: '걷게', rule: 'v', reasons: ['-게']},
+ {term: '걷다', source: '걷고', rule: 'v', reasons: ['-고']},
+ {term: '걷다', source: '걸으니', rule: 'v', reasons: ['-(으)니']},
+ {term: '걷다', source: '걸으면', rule: 'v', reasons: ['-(으)면']},
+ {term: '걷다', source: '걸으세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '걷다', source: '걸어라', rule: 'v', reasons: ['-아/어라']},
+ {term: '걷다', source: '걸으십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '걷다', source: '걷자', rule: 'v', reasons: ['-자']},
+ {term: '걷다', source: '걸읍시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ ],
+ },
+ {
+ category: 'ㅂ다 irregular',
+ valid: true,
+ tests: [
+ {term: '아름답다', source: '아름답다', rule: 'adj', reasons: []},
+ {term: '아름답다', source: '아름답습니다', rule: 'adj', reasons: ['-(스)ㅂ니다']},
+ {term: '아름답다', source: '아름다워요', rule: 'adj', reasons: ['-아/어요']},
+ {term: '아름답다', source: '아름다워', rule: 'adj', reasons: ['-아/어']},
+ {term: '아름답다', source: '아름다웠습니다', rule: 'adj', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '아름답다', source: '아름다웠어요', rule: 'adj', reasons: ['-았/었', '-아/어요']},
+ {term: '아름답다', source: '아름다웠어', rule: 'adj', reasons: ['-았/었', '-아/어']},
+ {term: '아름답다', source: '아름다웠다', rule: 'adj', reasons: ['-았/었', '-다']},
+ {term: '아름답다', source: '아름답겠습니다', rule: 'adj', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '아름답다', source: '아름답겠어요', rule: 'adj', reasons: ['-겠', '-아/어요']},
+ {term: '아름답다', source: '아름답겠어', rule: 'adj', reasons: ['-겠', '-아/어']},
+ {term: '아름답다', source: '아름답겠다', rule: 'adj', reasons: ['-겠', '-다']},
+ {term: '아름답다', source: '아름답습니까', rule: 'adj', reasons: ['-(스)ㅂ니까']},
+ {term: '아름답다', source: '아름답냐', rule: 'adj', reasons: ['-(으)냐']},
+ {term: '아름답다', source: '아름다웠습니까', rule: 'adj', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '아름답다', source: '아름다웠을까', rule: 'adj', reasons: ['-았/었', '-(으)ㄹ까']},
+ {term: '아름답다', source: '아름다웠냐', rule: 'adj', reasons: ['-았/었', '-(으)냐']},
+ {term: '아름답다', source: '아름답겠습니까', rule: 'adj', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '아름답다', source: '아름답겠냐', rule: 'adj', reasons: ['-겠', '-(으)냐']},
+ {term: '아름답다', source: '아름답네', rule: 'adj', reasons: ['-네']},
+ {term: '아름답다', source: '아름답구나', rule: 'adj', reasons: ['-구나']},
+ {term: '아름답다', source: '아름다움', rule: 'adj', reasons: ['-(으)ㅁ']},
+ {term: '아름답다', source: '아름다운', rule: 'adj', reasons: ['-(으)ㄴ']},
+ {term: '아름답다', source: '아름답게', rule: 'adj', reasons: ['-게']},
+ {term: '아름답다', source: '아름답고', rule: 'adj', reasons: ['-고']},
+ {term: '아름답다', source: '아름다우면', rule: 'adj', reasons: ['-(으)면']},
+ {term: '아름답다', source: '아름다우니', rule: 'adj', reasons: ['-(으)니']},
+
+ {term: '돕다', source: '돕다', rule: 'v', reasons: []},
+ {term: '돕다', source: '돕습니다', rule: 'v', reasons: ['-(스)ㅂ니다']},
+ {term: '돕다', source: '도와요', rule: 'v', reasons: ['-아/어요']},
+ {term: '돕다', source: '도와', rule: 'v', reasons: ['-아/어']},
+ {term: '돕다', source: '도왔습니다', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니다']},
+ {term: '돕다', source: '도왔어요', rule: 'v', reasons: ['-았/었', '-아/어요']},
+ {term: '돕다', source: '도왔어', rule: 'v', reasons: ['-았/었', '-아/어']},
+ {term: '돕다', source: '도왔다', rule: 'v', reasons: ['-았/었', '-다']},
+ {term: '돕다', source: '돕겠습니다', rule: 'v', reasons: ['-겠', '-(스)ㅂ니다']},
+ {term: '돕다', source: '돕겠어요', rule: 'v', reasons: ['-겠', '-아/어요']},
+ {term: '돕다', source: '돕겠어', rule: 'v', reasons: ['-겠', '-아/어']},
+ {term: '돕다', source: '돕겠다', rule: 'v', reasons: ['-겠', '-다']},
+ {term: '돕다', source: '돕습니까', rule: 'v', reasons: ['-(스)ㅂ니까']},
+ {term: '돕다', source: '돕냐', rule: 'v', reasons: ['-(으)냐']},
+ {term: '돕다', source: '도왔습니까', rule: 'v', reasons: ['-았/었', '-(스)ㅂ니까']},
+ {term: '돕다', source: '도왔냐', rule: 'v', reasons: ['-았/었', '-(으)냐']},
+ {term: '돕다', source: '돕겠습니까', rule: 'v', reasons: ['-겠', '-(스)ㅂ니까']},
+ {term: '돕다', source: '돕겠냐', rule: 'v', reasons: ['-겠', '-(으)냐']},
+ {term: '돕다', source: '돕네', rule: 'v', reasons: ['-네']},
+ {term: '돕다', source: '돕는구나', rule: 'v', reasons: ['-는구나']},
+ {term: '돕다', source: '도움', rule: 'v', reasons: ['-(으)ㅁ']},
+ {term: '돕다', source: '도운', rule: 'v', reasons: ['-(으)ㄴ']},
+ {term: '돕다', source: '돕게', rule: 'v', reasons: ['-게']},
+ {term: '돕다', source: '돕고', rule: 'v', reasons: ['-고']},
+ {term: '돕다', source: '도우면', rule: 'v', reasons: ['-(으)면']},
+ {term: '돕다', source: '도우니', rule: 'v', reasons: ['-(으)니']},
+ {term: '돕다', source: '도우십시오', rule: 'v', reasons: ['-(으)십시오']},
+ {term: '돕다', source: '도우세요', rule: 'v', reasons: ['-(으)세요']},
+ {term: '돕다', source: '도와라', rule: 'v', reasons: ['-아/어라']},
+ {term: '돕다', source: '도웁시다', rule: 'v', reasons: ['-(으)ㅂ시다 1']},
+ {term: '돕다', source: '돕자', rule: 'v', reasons: ['-자']},
+ ],
+ },
+];
+/* eslint-enable @stylistic/no-multi-spaces */
+
+// Preprocessing
+/**
+ * @param {string} str
+ * @returns {string}
+ */
+function disassemble(str) {
+ return Hangul.disassemble(str, false).join('');
+}
+
+const languageTransformer = new LanguageTransformer();
+languageTransformer.addDescriptor(koreanTransforms);
+testLanguageTransformer(languageTransformer, tests, disassemble);