gd-tools/rdricpp/tests/test_cases.cpp
2024-02-04 14:24:04 -04:00

974 lines
92 KiB
C++

/*
* Rikaitan Deinflector Reference Implementation
*
* Copyright (C) 2023 Ajatt-Tools and contributors
*
* 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, visit the http://fsf.org website.
*/
#include "test_cases.h"
namespace ajt::rdricpp {
std::vector<TestGroup> test_groups()
{
return {
TestGroup{
.valid= true,
.tests= {
// Adjective
TestCase{ .term = "愛しい", .source = "愛しい", .rule = RuleType::adj_i, .reasons = {} },
TestCase{ .term = "愛しい", .source = "愛しそう", .rule = RuleType::adj_i, .reasons = { "-sou" } },
TestCase{ .term = "愛しい", .source = "愛しすぎる", .rule = RuleType::adj_i, .reasons = { "-sugiru" } },
TestCase{ .term = "愛しい", .source = "愛しかったら", .rule = RuleType::adj_i, .reasons = { "-tara" } },
TestCase{ .term = "愛しい", .source = "愛しかったり", .rule = RuleType::adj_i, .reasons = { "-tari" } },
TestCase{ .term = "愛しい", .source = "愛しくて", .rule = RuleType::adj_i, .reasons = { "-te" } },
TestCase{ .term = "愛しい", .source = "愛しく", .rule = RuleType::adj_i, .reasons = { "adv" } },
TestCase{ .term = "愛しい", .source = "愛しくない", .rule = RuleType::adj_i, .reasons = { "negative" } },
TestCase{ .term = "愛しい", .source = "愛しさ", .rule = RuleType::adj_i, .reasons = { "noun" } },
TestCase{ .term = "愛しい", .source = "愛しかった", .rule = RuleType::adj_i, .reasons = { "past" } },
TestCase{ .term = "愛しい", .source = "愛しくありません", .rule = RuleType::adj_i, .reasons = { "polite negative" } },
TestCase{ .term = "愛しい",
.source = "愛しくありませんでした",
.rule = RuleType::adj_i,
.reasons = { "polite past negative" } },
TestCase{ .term = "愛しい", .source = "愛しき", .rule = RuleType::adj_i, .reasons = { "-ki" } },
TestCase{ .term = "愛しい", .source = "愛しげ", .rule = RuleType::adj_i, .reasons = { "-ge" } },
// Common verbs
TestCase{ .term = "食べる", .source = "食べる", .rule = RuleType::v1, .reasons = {} },
TestCase{ .term = "食べる", .source = "食べます", .rule = RuleType::v1, .reasons = { "polite" } },
TestCase{ .term = "食べる", .source = "食べた", .rule = RuleType::v1, .reasons = { "past" } },
TestCase{ .term = "食べる", .source = "食べました", .rule = RuleType::v1, .reasons = { "polite past" } },
TestCase{ .term = "食べる", .source = "食べて", .rule = RuleType::v1, .reasons = { "-te" } },
TestCase{ .term = "食べる", .source = "食べられる", .rule = RuleType::v1, .reasons = { "potential or passive" } },
TestCase{ .term = "食べる", .source = "食べられる", .rule = RuleType::v1, .reasons = { "potential or passive" } },
TestCase{ .term = "食べる", .source = "食べさせる", .rule = RuleType::v1, .reasons = { "causative" } },
TestCase{ .term = "食べる",
.source = "食べさせられる",
.rule = RuleType::v1,
.reasons = { "causative", "potential or passive" } },
TestCase{ .term = "食べる", .source = "食べろ", .rule = RuleType::v1, .reasons = { "imperative" } },
TestCase{ .term = "食べる", .source = "食べない", .rule = RuleType::v1, .reasons = { "negative" } },
TestCase{ .term = "食べる", .source = "食べません", .rule = RuleType::v1, .reasons = { "polite negative" } },
TestCase{ .term = "食べる", .source = "食べなかった", .rule = RuleType::v1, .reasons = { "negative", "past" } },
TestCase{ .term = "食べる", .source = "食べませんでした", .rule = RuleType::v1, .reasons = { "polite past negative" } },
TestCase{ .term = "食べる", .source = "食べなくて", .rule = RuleType::v1, .reasons = { "negative", "-te" } },
TestCase{ .term = "食べる", .source = "食べられない", .rule = RuleType::v1, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "食べる", .source = "食べられない", .rule = RuleType::v1, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "食べる", .source = "食べさせない", .rule = RuleType::v1, .reasons = { "causative", "negative" } },
TestCase{ .term = "食べる",
.source = "食べさせられない",
.rule = RuleType::v1,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "食べる", .source = "食べるな", .rule = RuleType::v1, .reasons = { "imperative negative" } },
TestCase{ .term = "食べる", .source = "食べれば", .rule = RuleType::v1, .reasons = { "-ba" } },
TestCase{ .term = "食べる", .source = "食べちゃう", .rule = RuleType::v1, .reasons = { "-chau" } },
TestCase{ .term = "食べる", .source = "食べちまう", .rule = RuleType::v1, .reasons = { "-chimau" } },
TestCase{ .term = "食べる", .source = "食べなさい", .rule = RuleType::v1, .reasons = { "-nasai" } },
TestCase{ .term = "食べる", .source = "食べそう", .rule = RuleType::v1, .reasons = { "-sou" } },
TestCase{ .term = "食べる", .source = "食べすぎる", .rule = RuleType::v1, .reasons = { "-sugiru" } },
TestCase{ .term = "食べる", .source = "食べたい", .rule = RuleType::v1, .reasons = { "-tai" } },
TestCase{ .term = "食べる", .source = "食べたら", .rule = RuleType::v1, .reasons = { "-tara" } },
TestCase{ .term = "食べる", .source = "食べたり", .rule = RuleType::v1, .reasons = { "-tari" } },
TestCase{ .term = "食べる", .source = "食べず", .rule = RuleType::v1, .reasons = { "-zu" } },
TestCase{ .term = "食べる", .source = "食べぬ", .rule = RuleType::v1, .reasons = { "-nu" } },
TestCase{ .term = "食べる", .source = "食べ", .rule = RuleType::v1, .reasons = { "masu stem" } },
TestCase{ .term = "食べる", .source = "食べましょう", .rule = RuleType::v1, .reasons = { "polite volitional" } },
TestCase{ .term = "食べる", .source = "食べよう", .rule = RuleType::v1, .reasons = { "volitional" } },
// {"causative passive"}
TestCase{ .term = "食べる", .source = "食べとく", .rule = RuleType::v1, .reasons = { "-toku" } },
TestCase{ .term = "食べる", .source = "食べている", .rule = RuleType::v1, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "食べる", .source = "食べておる", .rule = RuleType::v1, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "食べる", .source = "食べてる", .rule = RuleType::v1, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "食べる", .source = "食べとる", .rule = RuleType::v1, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "食べる", .source = "食べてしまう", .rule = RuleType::v1, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "買う", .source = "買う", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "買う", .source = "買います", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "買う", .source = "買った", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "買う", .source = "買いました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "買う", .source = "買って", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "買う", .source = "買える", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "買う", .source = "買われる", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "買う", .source = "買わせる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "買う", .source = "買わせられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "買う", .source = "買え", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "買う", .source = "買わない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "買う", .source = "買いません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "買う", .source = "買わなかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "買う", .source = "買いませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "買う", .source = "買わなくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "買う", .source = "買えない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "買う", .source = "買われない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "買う", .source = "買わせない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "買う",
.source = "買わせられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "買う", .source = "買うな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "買う", .source = "買えば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "買う", .source = "買っちゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "買う", .source = "買っちまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "買う", .source = "買いなさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "買う", .source = "買いそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "買う", .source = "買いすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "買う", .source = "買いたい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "買う", .source = "買ったら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "買う", .source = "買ったり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "買う", .source = "買わず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "買う", .source = "買わぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "買う", .source = "買い", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "買う", .source = "買いましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "買う", .source = "買おう", .rule = RuleType::v5, .reasons = { "volitional" } },
TestCase{ .term = "買う", .source = "買わされる", .rule = RuleType::v5, .reasons = { "causative passive" } },
TestCase{ .term = "買う", .source = "買っとく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "買う", .source = "買っている", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "買う", .source = "買っておる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "買う", .source = "買ってる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "買う", .source = "買っとる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "買う", .source = "買ってしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "行く", .source = "行く", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "行く", .source = "行きます", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "行く", .source = "行った", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "行く", .source = "行きました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "行く", .source = "行って", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "行く", .source = "行ける", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "行く", .source = "行かれる", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "行く", .source = "行かせる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "行く", .source = "行かせられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "行く", .source = "行け", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "行く", .source = "行かない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "行く", .source = "行きません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "行く", .source = "行かなかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "行く", .source = "行きませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "行く", .source = "行かなくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "行く", .source = "行けない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "行く", .source = "行かれない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "行く", .source = "行かせない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "行く",
.source = "行かせられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "行く", .source = "行くな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "行く", .source = "行けば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "行く", .source = "行っちゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "行く", .source = "行っちまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "行く", .source = "行きなさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "行く", .source = "行きそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "行く", .source = "行きすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "行く", .source = "行きたい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "行く", .source = "行いたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "行く", .source = "行いたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "行く", .source = "行かず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "行く", .source = "行かぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "行く", .source = "行き", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "行く", .source = "行きましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "行く", .source = "行こう", .rule = RuleType::v5, .reasons = { "volitional" } },
TestCase{ .term = "行く", .source = "行かされる", .rule = RuleType::v5, .reasons = { "causative passive" } },
TestCase{ .term = "行く", .source = "行いとく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "行く", .source = "行っている", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "行く", .source = "行っておる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "行く", .source = "行ってる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "行く", .source = "行っとる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "行く", .source = "行ってしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "泳ぐ", .source = "泳ぐ", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "泳ぐ", .source = "泳ぎます", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "泳ぐ", .source = "泳いだ", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "泳ぐ", .source = "泳いで", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "泳ぐ", .source = "泳げる", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "泳ぐ", .source = "泳がれる", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "泳ぐ", .source = "泳がせる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "泳ぐ", .source = "泳がせられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "泳ぐ", .source = "泳げ", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "泳ぐ", .source = "泳がない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "泳ぐ", .source = "泳がなかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "泳ぐ", .source = "泳がなくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "泳ぐ", .source = "泳げない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "泳ぐ", .source = "泳がれない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "泳ぐ", .source = "泳がせない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "泳ぐ",
.source = "泳がせられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "泳ぐ", .source = "泳ぐな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "泳ぐ", .source = "泳げば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "泳ぐ", .source = "泳いじゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "泳ぐ", .source = "泳いじまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎなさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎたい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "泳ぐ", .source = "泳いだら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "泳ぐ", .source = "泳いだり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "泳ぐ", .source = "泳がず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "泳ぐ", .source = "泳がぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎ", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "泳ぐ", .source = "泳ぎましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "泳ぐ", .source = "泳ごう", .rule = RuleType::v5, .reasons = { "volitional" } },
TestCase{ .term = "泳ぐ", .source = "泳がされる", .rule = RuleType::v5, .reasons = { "causative passive" } },
TestCase{ .term = "泳ぐ", .source = "泳いどく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "泳ぐ", .source = "泳いでいる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "泳ぐ", .source = "泳いでおる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "泳ぐ", .source = "泳いでる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "泳ぐ", .source = "泳いでしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "話す", .source = "話す", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "話す", .source = "話します", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "話す", .source = "話した", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "話す", .source = "話しました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "話す", .source = "話して", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "話す", .source = "話せる", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "話す", .source = "話される", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "話す", .source = "話させる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "話す", .source = "話させられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "話す", .source = "話せ", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "話す", .source = "話さない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "話す", .source = "話しません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "話す", .source = "話さなかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "話す", .source = "話しませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "話す", .source = "話さなくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "話す", .source = "話せない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "話す", .source = "話されない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "話す", .source = "話させない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "話す",
.source = "話させられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "話す", .source = "話すな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "話す", .source = "話せば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "話す", .source = "話しちゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "話す", .source = "話しちまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "話す", .source = "話しなさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "話す", .source = "話しそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "話す", .source = "話しすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "話す", .source = "話したい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "話す", .source = "話したら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "話す", .source = "話したり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "話す", .source = "話さず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "話す", .source = "話さぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "話す", .source = "話し", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "話す", .source = "話しましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "話す", .source = "話そう", .rule = RuleType::v5, .reasons = { "volitional" } },
// {"causative passive"}
TestCase{ .term = "話す", .source = "話しとく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "話す", .source = "話している", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "話す", .source = "話しておる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "話す", .source = "話してる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "話す", .source = "話しとる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "話す", .source = "話してしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "待つ", .source = "待つ", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "待つ", .source = "待ちます", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "待つ", .source = "待った", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "待つ", .source = "待ちました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "待つ", .source = "待って", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "待つ", .source = "待てる", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "待つ", .source = "待たれる", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "待つ", .source = "待たせる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "待つ", .source = "待たせられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "待つ", .source = "待て", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "待つ", .source = "待たない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "待つ", .source = "待ちません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "待つ", .source = "待たなかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "待つ", .source = "待ちませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "待つ", .source = "待たなくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "待つ", .source = "待てない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "待つ", .source = "待たれない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "待つ", .source = "待たせない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "待つ",
.source = "待たせられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "待つ", .source = "待つな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "待つ", .source = "待てば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "待つ", .source = "待っちゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "待つ", .source = "待っちまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "待つ", .source = "待ちなさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "待つ", .source = "待ちそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "待つ", .source = "待ちすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "待つ", .source = "待ちたい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "待つ", .source = "待ったら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "待つ", .source = "待ったり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "待つ", .source = "待たず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "待つ", .source = "待たぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "待つ", .source = "待ち", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "待つ", .source = "待ちましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "待つ", .source = "待とう", .rule = RuleType::v5, .reasons = { "volitional" } },
TestCase{ .term = "待つ", .source = "待たされる", .rule = RuleType::v5, .reasons = { "causative passive" } },
TestCase{ .term = "待つ", .source = "待っとく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "待つ", .source = "待っている", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "待つ", .source = "待っておる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "待つ", .source = "待ってる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "待つ", .source = "待っとる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "待つ", .source = "待ってしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "死ぬ", .source = "死ぬ", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "死ぬ", .source = "死にます", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "死ぬ", .source = "死んだ", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "死ぬ", .source = "死にました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "死ぬ", .source = "死んで", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "死ぬ", .source = "死ねる", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "死ぬ", .source = "死なれる", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "死ぬ", .source = "死なせる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "死ぬ", .source = "死なせられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "死ぬ", .source = "死ね", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "死ぬ", .source = "死なない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "死ぬ", .source = "死にません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "死ぬ", .source = "死ななかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "死ぬ", .source = "死にませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "死ぬ", .source = "死ななくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "死ぬ", .source = "死ねない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "死ぬ", .source = "死なれない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "死ぬ", .source = "死なせない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "死ぬ",
.source = "死なせられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "死ぬ", .source = "死ぬな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "死ぬ", .source = "死ねば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "死ぬ", .source = "死んじゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "死ぬ", .source = "死んじまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "死ぬ", .source = "死になさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "死ぬ", .source = "死にそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "死ぬ", .source = "死にすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "死ぬ", .source = "死にたい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "死ぬ", .source = "死んだら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "死ぬ", .source = "死んだり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "死ぬ", .source = "死なず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "死ぬ", .source = "死なぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "死ぬ", .source = "死に", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "死ぬ", .source = "死にましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "死ぬ", .source = "死のう", .rule = RuleType::v5, .reasons = { "volitional" } },
TestCase{ .term = "死ぬ", .source = "死なされる", .rule = RuleType::v5, .reasons = { "causative passive" } },
TestCase{ .term = "死ぬ", .source = "死んどく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "死ぬ", .source = "死んでいる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "死ぬ", .source = "死んでおる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "死ぬ", .source = "死んでる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "死ぬ", .source = "死んでしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "遊ぶ", .source = "遊ぶ", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "遊ぶ", .source = "遊びます", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "遊ぶ", .source = "遊んだ", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "遊ぶ", .source = "遊びました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "遊ぶ", .source = "遊んで", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "遊ぶ", .source = "遊べる", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "遊ぶ", .source = "遊ばれる", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "遊ぶ", .source = "遊ばせる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "遊ぶ", .source = "遊ばせられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "遊ぶ", .source = "遊べ", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "遊ぶ", .source = "遊ばない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "遊ぶ", .source = "遊びません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "遊ぶ", .source = "遊ばなかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "遊ぶ", .source = "遊びませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "遊ぶ", .source = "遊ばなくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "遊ぶ", .source = "遊べない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "遊ぶ", .source = "遊ばれない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "遊ぶ", .source = "遊ばせない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "遊ぶ",
.source = "遊ばせられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "遊ぶ", .source = "遊ぶな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "遊ぶ", .source = "遊べば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "遊ぶ", .source = "遊んじゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "遊ぶ", .source = "遊んじまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "遊ぶ", .source = "遊びなさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "遊ぶ", .source = "遊びそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "遊ぶ", .source = "遊びすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "遊ぶ", .source = "遊びたい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "遊ぶ", .source = "遊んだら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "遊ぶ", .source = "遊んだり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "遊ぶ", .source = "遊ばず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "遊ぶ", .source = "遊ばぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "遊ぶ", .source = "遊び", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "遊ぶ", .source = "遊びましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "遊ぶ", .source = "遊ぼう", .rule = RuleType::v5, .reasons = { "volitional" } },
TestCase{ .term = "遊ぶ", .source = "遊ばされる", .rule = RuleType::v5, .reasons = { "causative passive" } },
TestCase{ .term = "遊ぶ", .source = "遊んどく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "遊ぶ", .source = "遊んでいる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "遊ぶ", .source = "遊んでおる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "遊ぶ", .source = "遊んでる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "遊ぶ", .source = "遊んでしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "飲む", .source = "飲む", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "飲む", .source = "飲みます", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "飲む", .source = "飲んだ", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "飲む", .source = "飲みました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "飲む", .source = "飲んで", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "飲む", .source = "飲める", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "飲む", .source = "飲まれる", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "飲む", .source = "飲ませる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "飲む", .source = "飲ませられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "飲む", .source = "飲め", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "飲む", .source = "飲まない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "飲む", .source = "飲みません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "飲む", .source = "飲まなかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "飲む", .source = "飲みませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "飲む", .source = "飲まなくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "飲む", .source = "飲めない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "飲む", .source = "飲まれない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "飲む", .source = "飲ませない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "飲む",
.source = "飲ませられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "飲む", .source = "飲むな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "飲む", .source = "飲めば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "飲む", .source = "飲んじゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "飲む", .source = "飲んじまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "飲む", .source = "飲みなさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "飲む", .source = "飲みそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "飲む", .source = "飲みすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "飲む", .source = "飲みたい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "飲む", .source = "飲んだら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "飲む", .source = "飲んだり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "飲む", .source = "飲まず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "飲む", .source = "飲まぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "飲む", .source = "飲み", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "飲む", .source = "飲みましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "飲む", .source = "飲もう", .rule = RuleType::v5, .reasons = { "volitional" } },
TestCase{ .term = "飲む", .source = "飲まされる", .rule = RuleType::v5, .reasons = { "causative passive" } },
TestCase{ .term = "飲む", .source = "飲んどく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "飲む", .source = "飲んでいる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "飲む", .source = "飲んでおる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "飲む", .source = "飲んでる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "飲む", .source = "飲んでしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "作る", .source = "作る", .rule = RuleType::v5, .reasons = {} },
TestCase{ .term = "作る", .source = "作ります", .rule = RuleType::v5, .reasons = { "polite" } },
TestCase{ .term = "作る", .source = "作った", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "作る", .source = "作りました", .rule = RuleType::v5, .reasons = { "polite past" } },
TestCase{ .term = "作る", .source = "作って", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "作る", .source = "作れる", .rule = RuleType::v5, .reasons = { "potential" } },
TestCase{ .term = "作る", .source = "作られる", .rule = RuleType::v5, .reasons = { "passive" } },
TestCase{ .term = "作る", .source = "作らせる", .rule = RuleType::v5, .reasons = { "causative" } },
TestCase{ .term = "作る", .source = "作らせられる", .rule = RuleType::v5, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "作る", .source = "作れ", .rule = RuleType::v5, .reasons = { "imperative" } },
TestCase{ .term = "作る", .source = "作らない", .rule = RuleType::v5, .reasons = { "negative" } },
TestCase{ .term = "作る", .source = "作りません", .rule = RuleType::v5, .reasons = { "polite negative" } },
TestCase{ .term = "作る", .source = "作らなかった", .rule = RuleType::v5, .reasons = { "negative", "past" } },
TestCase{ .term = "作る", .source = "作りませんでした", .rule = RuleType::v5, .reasons = { "polite past negative" } },
TestCase{ .term = "作る", .source = "作らなくて", .rule = RuleType::v5, .reasons = { "negative", "-te" } },
TestCase{ .term = "作る", .source = "作れない", .rule = RuleType::v5, .reasons = { "potential", "negative" } },
TestCase{ .term = "作る", .source = "作られない", .rule = RuleType::v5, .reasons = { "passive", "negative" } },
TestCase{ .term = "作る", .source = "作らせない", .rule = RuleType::v5, .reasons = { "causative", "negative" } },
TestCase{ .term = "作る",
.source = "作らせられない",
.rule = RuleType::v5,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "作る", .source = "作るな", .rule = RuleType::v5, .reasons = { "imperative negative" } },
TestCase{ .term = "作る", .source = "作れば", .rule = RuleType::v5, .reasons = { "-ba" } },
TestCase{ .term = "作る", .source = "作っちゃう", .rule = RuleType::v5, .reasons = { "-chau" } },
TestCase{ .term = "作る", .source = "作っちまう", .rule = RuleType::v5, .reasons = { "-chimau" } },
TestCase{ .term = "作る", .source = "作りなさい", .rule = RuleType::v5, .reasons = { "-nasai" } },
TestCase{ .term = "作る", .source = "作りそう", .rule = RuleType::v5, .reasons = { "-sou" } },
TestCase{ .term = "作る", .source = "作りすぎる", .rule = RuleType::v5, .reasons = { "-sugiru" } },
TestCase{ .term = "作る", .source = "作りたい", .rule = RuleType::v5, .reasons = { "-tai" } },
TestCase{ .term = "作る", .source = "作ったら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "作る", .source = "作ったり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "作る", .source = "作らず", .rule = RuleType::v5, .reasons = { "-zu" } },
TestCase{ .term = "作る", .source = "作らぬ", .rule = RuleType::v5, .reasons = { "-nu" } },
TestCase{ .term = "作る", .source = "作り", .rule = RuleType::v5, .reasons = { "masu stem" } },
TestCase{ .term = "作る", .source = "作りましょう", .rule = RuleType::v5, .reasons = { "polite volitional" } },
TestCase{ .term = "作る", .source = "作ろう", .rule = RuleType::v5, .reasons = { "volitional" } },
TestCase{ .term = "作る", .source = "作らされる", .rule = RuleType::v5, .reasons = { "causative passive" } },
TestCase{ .term = "作る", .source = "作っとく", .rule = RuleType::v5, .reasons = { "-toku" } },
TestCase{ .term = "作る", .source = "作っている", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "作る", .source = "作っておる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "作る", .source = "作ってる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "作る", .source = "作っとる", .rule = RuleType::v5, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "作る", .source = "作ってしまう", .rule = RuleType::v5, .reasons = { "-te", "-shimau" } },
// Irregular verbs
TestCase{ .term = "為る", .source = "為る", .rule = RuleType::vs, .reasons = {} },
TestCase{ .term = "為る", .source = "為ます", .rule = RuleType::vs, .reasons = { "polite" } },
TestCase{ .term = "為る", .source = "為た", .rule = RuleType::vs, .reasons = { "past" } },
TestCase{ .term = "為る", .source = "為ました", .rule = RuleType::vs, .reasons = { "polite past" } },
TestCase{ .term = "為る", .source = "為て", .rule = RuleType::vs, .reasons = { "-te" } },
TestCase{ .term = "為る", .source = "為られる", .rule = RuleType::vs, .reasons = { "potential or passive" } },
TestCase{ .term = "為る", .source = "為れる", .rule = RuleType::vs, .reasons = { "passive" } },
TestCase{ .term = "為る", .source = "為せる", .rule = RuleType::vs, .reasons = { "causative" } },
TestCase{ .term = "為る", .source = "為させる", .rule = RuleType::vs, .reasons = { "causative" } },
TestCase{ .term = "為る", .source = "為せられる", .rule = RuleType::vs, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "為る", .source = "為させられる", .rule = RuleType::vs, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "為る", .source = "為ろ", .rule = RuleType::vs, .reasons = { "imperative" } },
TestCase{ .term = "為る", .source = "為ない", .rule = RuleType::vs, .reasons = { "negative" } },
TestCase{ .term = "為る", .source = "為ません", .rule = RuleType::vs, .reasons = { "polite negative" } },
TestCase{ .term = "為る", .source = "為なかった", .rule = RuleType::vs, .reasons = { "negative", "past" } },
TestCase{ .term = "為る", .source = "為ませんでした", .rule = RuleType::vs, .reasons = { "polite past negative" } },
TestCase{ .term = "為る", .source = "為なくて", .rule = RuleType::vs, .reasons = { "negative", "-te" } },
TestCase{ .term = "為る", .source = "為られない", .rule = RuleType::vs, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "為る", .source = "為れない", .rule = RuleType::vs, .reasons = { "passive", "negative" } },
TestCase{ .term = "為る", .source = "為せない", .rule = RuleType::vs, .reasons = { "causative", "negative" } },
TestCase{ .term = "為る", .source = "為させない", .rule = RuleType::vs, .reasons = { "causative", "negative" } },
TestCase{ .term = "為る",
.source = "為せられない",
.rule = RuleType::vs,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "為る",
.source = "為させられない",
.rule = RuleType::vs,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "為る", .source = "為るな", .rule = RuleType::vs, .reasons = { "imperative negative" } },
TestCase{ .term = "為る", .source = "為れば", .rule = RuleType::vs, .reasons = { "-ba" } },
TestCase{ .term = "為る", .source = "為ちゃう", .rule = RuleType::vs, .reasons = { "-chau" } },
TestCase{ .term = "為る", .source = "為ちまう", .rule = RuleType::vs, .reasons = { "-chimau" } },
TestCase{ .term = "為る", .source = "為なさい", .rule = RuleType::vs, .reasons = { "-nasai" } },
TestCase{ .term = "為る", .source = "為そう", .rule = RuleType::vs, .reasons = { "-sou" } },
TestCase{ .term = "為る", .source = "為すぎる", .rule = RuleType::vs, .reasons = { "-sugiru" } },
TestCase{ .term = "為る", .source = "為たい", .rule = RuleType::vs, .reasons = { "-tai" } },
TestCase{ .term = "為る", .source = "為たら", .rule = RuleType::vs, .reasons = { "-tara" } },
TestCase{ .term = "為る", .source = "為たり", .rule = RuleType::vs, .reasons = { "-tari" } },
TestCase{ .term = "為る", .source = "為ず", .rule = RuleType::vs, .reasons = { "-zu" } },
TestCase{ .term = "為る", .source = "為ぬ", .rule = RuleType::vs, .reasons = { "-nu" } },
// {"masu stem"}
TestCase{ .term = "為る", .source = "為ましょう", .rule = RuleType::vs, .reasons = { "polite volitional" } },
TestCase{ .term = "為る", .source = "為よう", .rule = RuleType::vs, .reasons = { "volitional" } },
// {"causative passive"}
TestCase{ .term = "為る", .source = "為とく", .rule = RuleType::vs, .reasons = { "-toku" } },
TestCase{ .term = "為る", .source = "為ている", .rule = RuleType::vs, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "為る", .source = "為ておる", .rule = RuleType::vs, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "為る", .source = "為てる", .rule = RuleType::vs, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "為る", .source = "為とる", .rule = RuleType::vs, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "為る", .source = "為てしまう", .rule = RuleType::vs, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "する", .source = "する", .rule = RuleType::vs, .reasons = {} },
TestCase{ .term = "する", .source = "します", .rule = RuleType::vs, .reasons = { "polite" } },
TestCase{ .term = "する", .source = "した", .rule = RuleType::vs, .reasons = { "past" } },
TestCase{ .term = "する", .source = "しました", .rule = RuleType::vs, .reasons = { "polite past" } },
TestCase{ .term = "する", .source = "して", .rule = RuleType::vs, .reasons = { "-te" } },
TestCase{ .term = "する", .source = "できる", .rule = RuleType::vs, .reasons = { "potential" } },
TestCase{ .term = "する", .source = "出来る", .rule = RuleType::vs, .reasons = { "potential" } },
TestCase{ .term = "する", .source = "せられる", .rule = RuleType::vs, .reasons = { "potential or passive" } },
TestCase{ .term = "する", .source = "される", .rule = RuleType::vs, .reasons = { "passive" } },
TestCase{ .term = "する", .source = "させる", .rule = RuleType::vs, .reasons = { "causative" } },
TestCase{ .term = "する", .source = "せさせる", .rule = RuleType::vs, .reasons = { "causative" } },
TestCase{ .term = "する", .source = "させられる", .rule = RuleType::vs, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "する", .source = "せさせられる", .rule = RuleType::vs, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "する", .source = "しろ", .rule = RuleType::vs, .reasons = { "imperative" } },
TestCase{ .term = "する", .source = "しない", .rule = RuleType::vs, .reasons = { "negative" } },
TestCase{ .term = "する", .source = "しません", .rule = RuleType::vs, .reasons = { "polite negative" } },
TestCase{ .term = "する", .source = "しなかった", .rule = RuleType::vs, .reasons = { "negative", "past" } },
TestCase{ .term = "する", .source = "しませんでした", .rule = RuleType::vs, .reasons = { "polite past negative" } },
TestCase{ .term = "する", .source = "しなくて", .rule = RuleType::vs, .reasons = { "negative", "-te" } },
TestCase{ .term = "する", .source = "せられない", .rule = RuleType::vs, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "する", .source = "されない", .rule = RuleType::vs, .reasons = { "passive", "negative" } },
TestCase{ .term = "する", .source = "させない", .rule = RuleType::vs, .reasons = { "causative", "negative" } },
TestCase{ .term = "する", .source = "せさせない", .rule = RuleType::vs, .reasons = { "causative", "negative" } },
TestCase{ .term = "する",
.source = "させられない",
.rule = RuleType::vs,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "する",
.source = "せさせられない",
.rule = RuleType::vs,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "する", .source = "するな", .rule = RuleType::vs, .reasons = { "imperative negative" } },
TestCase{ .term = "する", .source = "すれば", .rule = RuleType::vs, .reasons = { "-ba" } },
TestCase{ .term = "する", .source = "しちゃう", .rule = RuleType::vs, .reasons = { "-chau" } },
TestCase{ .term = "する", .source = "しちまう", .rule = RuleType::vs, .reasons = { "-chimau" } },
TestCase{ .term = "する", .source = "しなさい", .rule = RuleType::vs, .reasons = { "-nasai" } },
TestCase{ .term = "する", .source = "しそう", .rule = RuleType::vs, .reasons = { "-sou" } },
TestCase{ .term = "する", .source = "しすぎる", .rule = RuleType::vs, .reasons = { "-sugiru" } },
TestCase{ .term = "する", .source = "したい", .rule = RuleType::vs, .reasons = { "-tai" } },
TestCase{ .term = "する", .source = "したら", .rule = RuleType::vs, .reasons = { "-tara" } },
TestCase{ .term = "する", .source = "したり", .rule = RuleType::vs, .reasons = { "-tari" } },
TestCase{ .term = "する", .source = "せず", .rule = RuleType::vs, .reasons = { "-zu" } },
TestCase{ .term = "する", .source = "せぬ", .rule = RuleType::vs, .reasons = { "-nu" } },
// {"masu stem"}
TestCase{ .term = "する", .source = "しましょう", .rule = RuleType::vs, .reasons = { "polite volitional" } },
TestCase{ .term = "する", .source = "しよう", .rule = RuleType::vs, .reasons = { "volitional" } },
// {"causative passive"}
TestCase{ .term = "する", .source = "しとく", .rule = RuleType::vs, .reasons = { "-toku" } },
TestCase{ .term = "する", .source = "している", .rule = RuleType::vs, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "する", .source = "しておる", .rule = RuleType::vs, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "する", .source = "してる", .rule = RuleType::vs, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "する", .source = "しとる", .rule = RuleType::vs, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "する", .source = "してしまう", .rule = RuleType::vs, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "来る", .source = "来る", .rule = RuleType::vk, .reasons = {} },
TestCase{ .term = "来る", .source = "来ます", .rule = RuleType::vk, .reasons = { "polite" } },
TestCase{ .term = "来る", .source = "来た", .rule = RuleType::vk, .reasons = { "past" } },
TestCase{ .term = "来る", .source = "来ました", .rule = RuleType::vk, .reasons = { "polite past" } },
TestCase{ .term = "来る", .source = "来て", .rule = RuleType::vk, .reasons = { "-te" } },
TestCase{ .term = "来る", .source = "来られる", .rule = RuleType::vk, .reasons = { "potential or passive" } },
TestCase{ .term = "来る", .source = "来られる", .rule = RuleType::vk, .reasons = { "potential or passive" } },
TestCase{ .term = "来る", .source = "来させる", .rule = RuleType::vk, .reasons = { "causative" } },
TestCase{ .term = "来る", .source = "来させられる", .rule = RuleType::vk, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "来る", .source = "来い", .rule = RuleType::vk, .reasons = { "imperative" } },
TestCase{ .term = "来る", .source = "来ない", .rule = RuleType::vk, .reasons = { "negative" } },
TestCase{ .term = "来る", .source = "来ません", .rule = RuleType::vk, .reasons = { "polite negative" } },
TestCase{ .term = "来る", .source = "来なかった", .rule = RuleType::vk, .reasons = { "negative", "past" } },
TestCase{ .term = "来る", .source = "来ませんでした", .rule = RuleType::vk, .reasons = { "polite past negative" } },
TestCase{ .term = "来る", .source = "来なくて", .rule = RuleType::vk, .reasons = { "negative", "-te" } },
TestCase{ .term = "来る", .source = "来られない", .rule = RuleType::vk, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "来る", .source = "来られない", .rule = RuleType::vk, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "来る", .source = "来させない", .rule = RuleType::vk, .reasons = { "causative", "negative" } },
TestCase{ .term = "来る",
.source = "来させられない",
.rule = RuleType::vk,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "来る", .source = "来るな", .rule = RuleType::vk, .reasons = { "imperative negative" } },
TestCase{ .term = "来る", .source = "来れば", .rule = RuleType::vk, .reasons = { "-ba" } },
TestCase{ .term = "来る", .source = "来ちゃう", .rule = RuleType::vk, .reasons = { "-chau" } },
TestCase{ .term = "来る", .source = "来ちまう", .rule = RuleType::vk, .reasons = { "-chimau" } },
TestCase{ .term = "来る", .source = "来なさい", .rule = RuleType::vk, .reasons = { "-nasai" } },
TestCase{ .term = "来る", .source = "来そう", .rule = RuleType::vk, .reasons = { "-sou" } },
TestCase{ .term = "来る", .source = "来すぎる", .rule = RuleType::vk, .reasons = { "-sugiru" } },
TestCase{ .term = "来る", .source = "来たい", .rule = RuleType::vk, .reasons = { "-tai" } },
TestCase{ .term = "来る", .source = "来たら", .rule = RuleType::vk, .reasons = { "-tara" } },
TestCase{ .term = "来る", .source = "来たり", .rule = RuleType::vk, .reasons = { "-tari" } },
TestCase{ .term = "来る", .source = "来ず", .rule = RuleType::vk, .reasons = { "-zu" } },
TestCase{ .term = "来る", .source = "来ぬ", .rule = RuleType::vk, .reasons = { "-nu" } },
TestCase{ .term = "来る", .source = "", .rule = RuleType::vk, .reasons = { "masu stem" } },
TestCase{ .term = "来る", .source = "来ましょう", .rule = RuleType::vk, .reasons = { "polite volitional" } },
TestCase{ .term = "来る", .source = "来よう", .rule = RuleType::vk, .reasons = { "volitional" } },
// {"causative passive"}
TestCase{ .term = "来る", .source = "来とく", .rule = RuleType::vk, .reasons = { "-toku" } },
TestCase{ .term = "来る", .source = "来ている", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "来る", .source = "来ておる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "来る", .source = "来てる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "来る", .source = "来とる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "来る", .source = "来てしまう", .rule = RuleType::vk, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "來る", .source = "來る", .rule = RuleType::vk, .reasons = {} },
TestCase{ .term = "來る", .source = "來ます", .rule = RuleType::vk, .reasons = { "polite" } },
TestCase{ .term = "來る", .source = "來た", .rule = RuleType::vk, .reasons = { "past" } },
TestCase{ .term = "來る", .source = "來ました", .rule = RuleType::vk, .reasons = { "polite past" } },
TestCase{ .term = "來る", .source = "來て", .rule = RuleType::vk, .reasons = { "-te" } },
TestCase{ .term = "來る", .source = "來られる", .rule = RuleType::vk, .reasons = { "potential or passive" } },
TestCase{ .term = "來る", .source = "來られる", .rule = RuleType::vk, .reasons = { "potential or passive" } },
TestCase{ .term = "來る", .source = "來させる", .rule = RuleType::vk, .reasons = { "causative" } },
TestCase{ .term = "來る", .source = "來させられる", .rule = RuleType::vk, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "來る", .source = "來い", .rule = RuleType::vk, .reasons = { "imperative" } },
TestCase{ .term = "來る", .source = "來ない", .rule = RuleType::vk, .reasons = { "negative" } },
TestCase{ .term = "來る", .source = "來ません", .rule = RuleType::vk, .reasons = { "polite negative" } },
TestCase{ .term = "來る", .source = "來なかった", .rule = RuleType::vk, .reasons = { "negative", "past" } },
TestCase{ .term = "來る", .source = "來ませんでした", .rule = RuleType::vk, .reasons = { "polite past negative" } },
TestCase{ .term = "來る", .source = "來なくて", .rule = RuleType::vk, .reasons = { "negative", "-te" } },
TestCase{ .term = "來る", .source = "來られない", .rule = RuleType::vk, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "來る", .source = "來られない", .rule = RuleType::vk, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "來る", .source = "來させない", .rule = RuleType::vk, .reasons = { "causative", "negative" } },
TestCase{ .term = "來る",
.source = "來させられない",
.rule = RuleType::vk,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "來る", .source = "來るな", .rule = RuleType::vk, .reasons = { "imperative negative" } },
TestCase{ .term = "來る", .source = "來れば", .rule = RuleType::vk, .reasons = { "-ba" } },
TestCase{ .term = "來る", .source = "來ちゃう", .rule = RuleType::vk, .reasons = { "-chau" } },
TestCase{ .term = "來る", .source = "來ちまう", .rule = RuleType::vk, .reasons = { "-chimau" } },
TestCase{ .term = "來る", .source = "來なさい", .rule = RuleType::vk, .reasons = { "-nasai" } },
TestCase{ .term = "來る", .source = "來そう", .rule = RuleType::vk, .reasons = { "-sou" } },
TestCase{ .term = "來る", .source = "來すぎる", .rule = RuleType::vk, .reasons = { "-sugiru" } },
TestCase{ .term = "來る", .source = "來たい", .rule = RuleType::vk, .reasons = { "-tai" } },
TestCase{ .term = "來る", .source = "來たら", .rule = RuleType::vk, .reasons = { "-tara" } },
TestCase{ .term = "來る", .source = "來たり", .rule = RuleType::vk, .reasons = { "-tari" } },
TestCase{ .term = "來る", .source = "來ず", .rule = RuleType::vk, .reasons = { "-zu" } },
TestCase{ .term = "來る", .source = "來ぬ", .rule = RuleType::vk, .reasons = { "-nu" } },
TestCase{ .term = "來る", .source = "", .rule = RuleType::vk, .reasons = { "masu stem" } },
TestCase{ .term = "來る", .source = "來ましょう", .rule = RuleType::vk, .reasons = { "polite volitional" } },
TestCase{ .term = "來る", .source = "來よう", .rule = RuleType::vk, .reasons = { "volitional" } },
// {"causative passive"}
TestCase{ .term = "來る", .source = "來とく", .rule = RuleType::vk, .reasons = { "-toku" } },
TestCase{ .term = "來る", .source = "來ている", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "來る", .source = "來ておる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "來る", .source = "來てる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "來る", .source = "來とる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "來る", .source = "來てしまう", .rule = RuleType::vk, .reasons = { "-te", "-shimau" } },
TestCase{ .term = "くる", .source = "くる", .rule = RuleType::vk, .reasons = {} },
TestCase{ .term = "くる", .source = "きます", .rule = RuleType::vk, .reasons = { "polite" } },
TestCase{ .term = "くる", .source = "きた", .rule = RuleType::vk, .reasons = { "past" } },
TestCase{ .term = "くる", .source = "きました", .rule = RuleType::vk, .reasons = { "polite past" } },
TestCase{ .term = "くる", .source = "きて", .rule = RuleType::vk, .reasons = { "-te" } },
TestCase{ .term = "くる", .source = "こられる", .rule = RuleType::vk, .reasons = { "potential or passive" } },
TestCase{ .term = "くる", .source = "こられる", .rule = RuleType::vk, .reasons = { "potential or passive" } },
TestCase{ .term = "くる", .source = "こさせる", .rule = RuleType::vk, .reasons = { "causative" } },
TestCase{ .term = "くる", .source = "こさせられる", .rule = RuleType::vk, .reasons = { "causative", "potential or passive" } },
TestCase{ .term = "くる", .source = "こい", .rule = RuleType::vk, .reasons = { "imperative" } },
TestCase{ .term = "くる", .source = "こない", .rule = RuleType::vk, .reasons = { "negative" } },
TestCase{ .term = "くる", .source = "きません", .rule = RuleType::vk, .reasons = { "polite negative" } },
TestCase{ .term = "くる", .source = "こなかった", .rule = RuleType::vk, .reasons = { "negative", "past" } },
TestCase{ .term = "くる", .source = "きませんでした", .rule = RuleType::vk, .reasons = { "polite past negative" } },
TestCase{ .term = "くる", .source = "こなくて", .rule = RuleType::vk, .reasons = { "negative", "-te" } },
TestCase{ .term = "くる", .source = "こられない", .rule = RuleType::vk, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "くる", .source = "こられない", .rule = RuleType::vk, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "くる", .source = "こさせない", .rule = RuleType::vk, .reasons = { "causative", "negative" } },
TestCase{ .term = "くる",
.source = "こさせられない",
.rule = RuleType::vk,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "くる", .source = "くるな", .rule = RuleType::vk, .reasons = { "imperative negative" } },
TestCase{ .term = "くる", .source = "くれば", .rule = RuleType::vk, .reasons = { "-ba" } },
TestCase{ .term = "くる", .source = "きちゃう", .rule = RuleType::vk, .reasons = { "-chau" } },
TestCase{ .term = "くる", .source = "きちまう", .rule = RuleType::vk, .reasons = { "-chimau" } },
TestCase{ .term = "くる", .source = "きなさい", .rule = RuleType::vk, .reasons = { "-nasai" } },
TestCase{ .term = "くる", .source = "きそう", .rule = RuleType::vk, .reasons = { "-sou" } },
TestCase{ .term = "くる", .source = "きすぎる", .rule = RuleType::vk, .reasons = { "-sugiru" } },
TestCase{ .term = "くる", .source = "きたい", .rule = RuleType::vk, .reasons = { "-tai" } },
TestCase{ .term = "くる", .source = "きたら", .rule = RuleType::vk, .reasons = { "-tara" } },
TestCase{ .term = "くる", .source = "きたり", .rule = RuleType::vk, .reasons = { "-tari" } },
TestCase{ .term = "くる", .source = "こず", .rule = RuleType::vk, .reasons = { "-zu" } },
TestCase{ .term = "くる", .source = "こぬ", .rule = RuleType::vk, .reasons = { "-nu" } },
TestCase{ .term = "くる", .source = "", .rule = RuleType::vk, .reasons = { "masu stem" } },
TestCase{ .term = "くる", .source = "きましょう", .rule = RuleType::vk, .reasons = { "polite volitional" } },
TestCase{ .term = "くる", .source = "こよう", .rule = RuleType::vk, .reasons = { "volitional" } },
// {"causative passive"}
TestCase{ .term = "くる", .source = "きとく", .rule = RuleType::vk, .reasons = { "-toku" } },
TestCase{ .term = "くる", .source = "きている", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "くる", .source = "きておる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "くる", .source = "きてる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "くる", .source = "きとる", .rule = RuleType::vk, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "くる", .source = "きてしまう", .rule = RuleType::vk, .reasons = { "-te", "-shimau" } },
// Zuru verbs
TestCase{ .term = "論ずる", .source = "論ずる", .rule = RuleType::vz, .reasons = {} },
TestCase{ .term = "論ずる", .source = "論じます", .rule = RuleType::vz, .reasons = { "polite" } },
TestCase{ .term = "論ずる", .source = "論じた", .rule = RuleType::vz, .reasons = { "past" } },
TestCase{ .term = "論ずる", .source = "論じました", .rule = RuleType::vz, .reasons = { "polite past" } },
TestCase{ .term = "論ずる", .source = "論じて", .rule = RuleType::vz, .reasons = { "-te" } },
TestCase{ .term = "論ずる", .source = "論ぜられる", .rule = RuleType::vz, .reasons = { "potential or passive" } },
TestCase{ .term = "論ずる", .source = "論ざれる", .rule = RuleType::vz, .reasons = { "potential or passive" } },
TestCase{ .term = "論ずる", .source = "論じされる", .rule = RuleType::vz, .reasons = { "passive" } },
TestCase{ .term = "論ずる", .source = "論ぜされる", .rule = RuleType::vz, .reasons = { "passive" } },
TestCase{ .term = "論ずる", .source = "論じさせる", .rule = RuleType::vz, .reasons = { "causative" } },
TestCase{ .term = "論ずる", .source = "論ぜさせる", .rule = RuleType::vz, .reasons = { "causative" } },
TestCase{ .term = "論ずる",
.source = "論じさせられる",
.rule = RuleType::vz,
.reasons = { "causative", "potential or passive" } },
TestCase{ .term = "論ずる",
.source = "論ぜさせられる",
.rule = RuleType::vz,
.reasons = { "causative", "potential or passive" } },
TestCase{ .term = "論ずる", .source = "論じろ", .rule = RuleType::vz, .reasons = { "imperative" } },
TestCase{ .term = "論ずる", .source = "論じない", .rule = RuleType::vz, .reasons = { "negative" } },
TestCase{ .term = "論ずる", .source = "論じません", .rule = RuleType::vz, .reasons = { "polite negative" } },
TestCase{ .term = "論ずる", .source = "論じなかった", .rule = RuleType::vz, .reasons = { "negative", "past" } },
TestCase{ .term = "論ずる", .source = "論じませんでした", .rule = RuleType::vz, .reasons = { "polite past negative" } },
TestCase{ .term = "論ずる", .source = "論じなくて", .rule = RuleType::vz, .reasons = { "negative", "-te" } },
TestCase{ .term = "論ずる", .source = "論ぜられない", .rule = RuleType::vz, .reasons = { "potential or passive", "negative" } },
TestCase{ .term = "論ずる", .source = "論じされない", .rule = RuleType::vz, .reasons = { "passive", "negative" } },
TestCase{ .term = "論ずる", .source = "論ぜされない", .rule = RuleType::vz, .reasons = { "passive", "negative" } },
TestCase{ .term = "論ずる", .source = "論じさせない", .rule = RuleType::vz, .reasons = { "causative", "negative" } },
TestCase{ .term = "論ずる", .source = "論ぜさせない", .rule = RuleType::vz, .reasons = { "causative", "negative" } },
TestCase{ .term = "論ずる",
.source = "論じさせられない",
.rule = RuleType::vz,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "論ずる",
.source = "論ぜさせられない",
.rule = RuleType::vz,
.reasons = { "causative", "potential or passive", "negative" } },
TestCase{ .term = "論ずる", .source = "論ずるな", .rule = RuleType::vz, .reasons = { "imperative negative" } },
TestCase{ .term = "論ずる", .source = "論ずれば", .rule = RuleType::vz, .reasons = { "-ba" } },
TestCase{ .term = "論ずる", .source = "論じちゃう", .rule = RuleType::vz, .reasons = { "-chau" } },
TestCase{ .term = "論ずる", .source = "論じちまう", .rule = RuleType::vz, .reasons = { "-chimau" } },
TestCase{ .term = "論ずる", .source = "論じなさい", .rule = RuleType::vz, .reasons = { "-nasai" } },
TestCase{ .term = "論ずる", .source = "論じそう", .rule = RuleType::vz, .reasons = { "-sou" } },
TestCase{ .term = "論ずる", .source = "論じすぎる", .rule = RuleType::vz, .reasons = { "-sugiru" } },
TestCase{ .term = "論ずる", .source = "論じたい", .rule = RuleType::vz, .reasons = { "-tai" } },
TestCase{ .term = "論ずる", .source = "論じたら", .rule = RuleType::vz, .reasons = { "-tara" } },
TestCase{ .term = "論ずる", .source = "論じたり", .rule = RuleType::vz, .reasons = { "-tari" } },
TestCase{ .term = "論ずる", .source = "論ぜず", .rule = RuleType::vz, .reasons = { "-zu" } },
TestCase{ .term = "論ずる", .source = "論ぜぬ", .rule = RuleType::vz, .reasons = { "-nu" } },
// {"masu stem"}
TestCase{ .term = "論ずる", .source = "論じましょう", .rule = RuleType::vz, .reasons = { "polite volitional" } },
TestCase{ .term = "論ずる", .source = "論じよう", .rule = RuleType::vz, .reasons = { "volitional" } },
// {"causative passive"}
TestCase{ .term = "論ずる", .source = "論じとく", .rule = RuleType::vz, .reasons = { "-toku" } },
TestCase{ .term = "論ずる", .source = "論じている", .rule = RuleType::vz, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "論ずる", .source = "論じておる", .rule = RuleType::vz, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "論ずる", .source = "論じてる", .rule = RuleType::vz, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "論ずる", .source = "論じとる", .rule = RuleType::vz, .reasons = { "-te", "progressive or perfect" } },
TestCase{ .term = "論ずる", .source = "論じてしまう", .rule = RuleType::vz, .reasons = { "-te", "-shimau" } },
// Uncommon irregular verbs
TestCase{ .term = "のたまう", .source = "のたもうて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "のたまう", .source = "のたもうた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "のたまう", .source = "のたもうたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "のたまう", .source = "のたもうたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "おう", .source = "おうて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "こう", .source = "こうて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "そう", .source = "そうて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "とう", .source = "とうて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "請う", .source = "請うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "乞う", .source = "乞うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "恋う", .source = "恋うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "問う", .source = "問うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "負う", .source = "負うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "沿う", .source = "沿うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "添う", .source = "添うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "副う", .source = "副うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "厭う", .source = "厭うて", .rule = RuleType::v5, .reasons = { "-te" } },
TestCase{ .term = "おう", .source = "おうた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "こう", .source = "こうた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "そう", .source = "そうた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "とう", .source = "とうた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "請う", .source = "請うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "乞う", .source = "乞うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "恋う", .source = "恋うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "問う", .source = "問うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "負う", .source = "負うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "沿う", .source = "沿うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "添う", .source = "添うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "副う", .source = "副うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "厭う", .source = "厭うた", .rule = RuleType::v5, .reasons = { "past" } },
TestCase{ .term = "おう", .source = "おうたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "こう", .source = "こうたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "そう", .source = "そうたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "とう", .source = "とうたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "請う", .source = "請うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "乞う", .source = "乞うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "恋う", .source = "恋うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "問う", .source = "問うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "負う", .source = "負うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "沿う", .source = "沿うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "添う", .source = "添うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "副う", .source = "副うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "厭う", .source = "厭うたら", .rule = RuleType::v5, .reasons = { "-tara" } },
TestCase{ .term = "おう", .source = "おうたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "こう", .source = "こうたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "そう", .source = "そうたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "とう", .source = "とうたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "請う", .source = "請うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "乞う", .source = "乞うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "恋う", .source = "恋うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "問う", .source = "問うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "負う", .source = "負うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "沿う", .source = "沿うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "添う", .source = "添うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "副う", .source = "副うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
TestCase{ .term = "厭う", .source = "厭うたり", .rule = RuleType::v5, .reasons = { "-tari" } },
// Combinations
TestCase{ .term = "抱き抱える",
.source = "抱き抱えていなければ",
.rule = RuleType::v1,
.reasons = { "-te", "progressive or perfect", "negative", "-ba" } },
TestCase{ .term = "抱きかかえる",
.source = "抱きかかえていなければ",
.rule = RuleType::v1,
.reasons = { "-te", "progressive or perfect", "negative", "-ba" } },
TestCase{ .term = "打ち込む",
.source = "打ち込んでいませんでした",
.rule = RuleType::v5,
.reasons = { "-te", "progressive or perfect", "polite past negative" } },
TestCase{ .term = "食べる",
.source = "食べさせられたくなかった",
.rule = RuleType::v1,
.reasons = { "causative", "potential or passive", "-tai", "negative", "past" } } }
},
TestGroup{
.valid= false,
.tests= { { .term = "する", .source = "すます", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すた", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すました", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すて", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すれる", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すせる", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すせられる", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すろ", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すない", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すません", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すなかった", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すませんでした", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すなくて", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すれない", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すせない", .rule = RuleType::vs },
TestCase{ .term = "する", .source = "すせられない", .rule = RuleType::vs },
TestCase{ .term = "くる", .source = "くます", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くた", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くました", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くて", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くられる", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くられる", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くさせる", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くさせられる", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くい", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くない", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くません", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くなかった", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くませんでした", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くなくて", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くられない", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くられない", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くさせない", .rule = RuleType::vk },
TestCase{ .term = "くる", .source = "くさせられない", .rule = RuleType::vk },
TestCase{ .term = "かわいい", .source = "かわいげ", .rule = RuleType::adj_i, .reasons = { "-ge" } },
TestCase{ .term = "可愛い", .source = "かわいげ", .rule = RuleType::adj_i, .reasons = { "-ge" } } }
},
TestGroup{
.valid= true,
.tests= { // -e
TestCase{ .term = "すごい", .source = "すげえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "やばい", .source = "やべえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "うるさい", .source = "うるせえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "ひどい", .source = "ひでえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "ない", .source = "ねえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "できる", .source = "できねえ", .rule = RuleType::v1, .reasons = { "negative", "-e" } },
TestCase{ .term = "しんじる", .source = "しんじねえ", .rule = RuleType::v1, .reasons = { "negative", "-e" } },
TestCase{ .term = "さむい", .source = "さめえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "さむい", .source = "さみい", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "あつい", .source = "あちぇえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "あつい", .source = "あちい", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "やすい", .source = "やせえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "たかい", .source = "たけえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "かわいい", .source = "かわええ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "つよい", .source = "ついぇえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "こわい", .source = "こうぇえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "みじかい", .source = "みじけえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "ながい", .source = "なげえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "くさい", .source = "くせえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "うまい", .source = "うめえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "でかい", .source = "でけえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "まずい", .source = "まっぜえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "ちっちゃい", .source = "ちっちぇえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "あかい", .source = "あけえ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "こわい", .source = "こええ", .rule = RuleType::adj_i, .reasons = { "-e" } },
TestCase{ .term = "つよい", .source = "つええ", .rule = RuleType::adj_i, .reasons = { "-e" } } }
}
};
}
} // namespace ajt::rdricpp