summaryrefslogtreecommitdiff
path: root/test/language/korean-transforms.test.js
blob: c91c1756bff643c4d144ef7e1109c69b3fa8068f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
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);