diff options
author | Cashew <52880648+cashewnuttynuts@users.noreply.github.com> | 2024-06-28 23:06:27 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-28 16:06:27 +0000 |
commit | b4e885d1f1f467152295c2a830d87704b36f4ff6 (patch) | |
tree | 87219b4477b9f86fc6791a3a36394625f8d81635 | |
parent | 79dc26b6a83e4ef1643d0795d569429086ac1024 (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.js | 6 | ||||
-rw-r--r-- | test/language/korean-transforms.test.js | 707 |
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); |