kakasi/tests/tests.rs
2022-11-28 14:46:33 +01:00

115 lines
6.7 KiB
Rust
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use proptest::prelude::*;
use rstest::rstest;
const RUST_ARTICLE: &str = include_str!("../tests/rust_article.txt");
const RUST_ARTICLE_HIRAGANA: &str = include_str!("../tests/rust_article_hiragana.txt");
const RUST_ARTICLE_ROMAJI: &str = include_str!("../tests/rust_article_romaji.txt");
#[rstest]
#[case("", "", "")]
#[case("構成", "こうせい", "kousei")]
#[case("好き", "すき", "suki")]
#[case("大きい", "おおきい", "ookii")]
#[case("かんたん", "かんたん", "kantan")]
#[case("にゃ", "にゃ", "nya")]
#[case("っき", "っき", "kki")]
#[case("っふぁ", "っふぁ", "ffa")]
#[case("キャ", "きゃ", "kya")]
#[case("キュ", "きゅ", "kyu")]
#[case("キョ", "きょ", "kyo")]
#[case("", "", ".")]
#[case(
"漢字とひらがな交じり文",
"かんじとひらがなまじりぶん",
"kanji tohiragana majiri bun"
)]
#[case(
"Alphabet 123 and 漢字",
"Alphabet 123 and かんじ",
"Alphabet 123 and kanji"
)]
#[case("日経新聞", "にっけいしんぶん", "nikkei shinbun")]
#[case("日本国民は、", "にほんこくみんは、", "nihonkokumin ha,")]
#[case(
"私がこの子を助けなきゃいけないってことだよね",
"わたしがこのこをたすけなきゃいけないってことだよね",
"watashi gakono ko wo tasuke nakyaikenaittekotodayone"
)]
#[case("やったー", "やったー", "yattaa")]
#[case("でっでー", "でっでー", "deddee")]
#[case("てんさーふろー", "てんさーふろー", "tensaafuroo")]
#[case("オレンジ色", "おれんじいろ", "orenji iro")]
#[case("檸檬は、レモン色", "れもんは、れもんいろ", "remon ha, remon iro")]
#[case("血液1μL", "けつえき1μL", "ketsueki 1μL")]
#[case("「和風」", "「わふう」", "\"wafuu\"")]
#[case("て「わ", "て「わ", "te \"wa")]
#[case("号・雅", "ごう・まさ", "gou masa")]
#[case("ビーバーが", "びーばーが", "biibaa ga")]
#[case("ブッシュッー", "ぶっしゅっー", "busshutsuu")]
#[case("ユーベルヹーク大", "ゆーべるゔぇーくだい", "yuuberuveeku dai")]
#[case("ヸーヂャニー品", "ゔぃーぢゃにーひん", "viijanii hin")]
#[case("アヷーリヤ品", "あゔぁーりやひん", "avaariya hin")]
#[case(
"安藤 和風(あんどう はるかぜ、慶応2年1月12日1866年2月26日 - 昭和11年1936年12月26日は、日本のジャーナリスト、マスメディア経営者、俳人、郷土史研究家。通名および俳号は「和風」をそのまま音読みして「わふう」。秋田県の地方紙「秋田魁新報」の事業拡大に貢献し、秋田魁新報社三大柱石の一人と称された。「魁の安藤か、安藤の魁か」と言われるほど、新聞記者としての名声を全国にとどろかせた[4]。",
"あんどう わふう(あんどう はるかぜ、けいおう2ねん1がつ12にち1866ねん2がつ26にち - しょうわ11ねん1936ねん12がつ26にちは、にほんのじゃーなりすと、ますめでぃあけいえいしゃ、はいじん、きょうどしけんきゅうか。とおりめいおよびはいごうは「わふう」をそのままおんよみして「わふう」。あきたけんのちほうし「あきたかいしんぽう」のじぎょうかくだいにこうけんし、あきたかいしんぽうしゃさんだいちゅうせきのひとりとしょうされた。「かいのあんどうか、あんどうのかいか」といわれるほど、しんぶんきしゃとしてのめいせいをぜんこくにとどろかせた[4]。",
"Andou wafuu (andou harukaze, keiou 2 nen 1 gatsu 12 nichi (1866 nen 2 gatsu 26 nichi) - shouwa 11 nen (1936 nen) 12 gatsu 26 nichi) ha, nihon no jaanarisuto, masumedia keieisha, haijin, kyoudoshi kenkyuuka. Toori mei oyobi hai gou ha \"wafuu\" wosonomama onyomi shite \"wafuu\". Akitaken no chihoushi \"akita kai shinpou\" no jigyou kakudai ni kouken shi, akita kai shinpou sha sandai chuuseki no hitori to shousa reta. \"Kai no andou ka, andou no kai ka\" to iwa reruhodo, shinbunkisha toshiteno meisei wo zenkoku nitodorokaseta [4].",
)]
#[case(
"『ザ・トラベルナース』",
"『ざ・とらべるなーす』",
"\"za toraberunaasu\""
)]
#[case(
"緑黄色社会『ミチヲユケ』Official Video -「ファーストペンギン!」主題歌",
"みどりきいろしゃかい『みちをゆけ』Official Video -「ふぁーすとぺんぎん!」しゅだいか",
"midori kiiro shakai \"michiwoyuke\" Official Video - \"faasutopengin!\" shudaika"
)]
#[case(
"MONKEY MAJIK - Running In The Dark【Lyric Video】日本語字幕付",
"MONKEY MAJIK - Running In The Dark【Lyric Video】にほんごじまくつき",
"MONKEY MAJIK - Running In The Dark [Lyric Video] (nihongo jimaku tsuki)"
)]
#[case(
"取締役第二制作技術部々長",
"とりしまりやくだいにせいさくぎじゅつぶぶちょう",
"torishimariyaku daini seisaku gijutsubu buchou"
)]
#[case(
"最初の安定版である1.0版がリリ",
"さいしょのあんていはんである1.0はんがりり",
"saisho no antei han dearu 1.0 han ga riri"
)]
#[case("にゃ$にゃ", "にゃ$にゃ", "nya $ nya")]
#[case(
"安定版となるRust 1.0がリリースされた[84]。1.0版の後、安定版およびベータ版が6週間おきに定期リリースされている[85]。",
"あんていはんとなるRust 1.0がりりーすされた[84]。1.0はんののち、あんていはんおよびべーたはんが6しゅうかんおきにていきりりーすされている[85]。",
"Antei han tonaru Rust 1.0 ga ririisu sareta [84]. 1.0 han no nochi, antei han oyobi beeta han ga 6 shuukan okini teiki ririisu sareteiru [85]."
)]
#[case(
"prelude文にTryIntoやTryFrom",
"preludeぶんにTryIntoやTryFrom",
"prelude bun ni TryInto ya TryFrom"
)]
#[case("要所々々", "ようしょようしょ", "yousho yousho")]
#[case("Hello World. abcd.", "Hello World. abcd.", "Hello World. abcd.")]
#[case(
"INNOCENCE(Live at 渋谷公会堂)",
"INNOCENCE(Live at しぶやこうかいどう)",
"INNOCENCE(Live at shibuya koukaidou)"
)]
#[case::rust_article(RUST_ARTICLE, RUST_ARTICLE_HIRAGANA, RUST_ARTICLE_ROMAJI)]
fn romanize(#[case] text: &str, #[case] hiragana: &str, #[case] romaji: &str) {
let res = kakasi::convert(text);
assert_eq!(res.hiragana, hiragana);
assert_eq!(res.romaji, romaji);
}
proptest! {
/// Romanizing ASCII strings should return them unchanged
#[test]
fn romanize_ascii(s in r#"\p{ASCII}+"#) {
let res = kakasi::convert(&s);
assert_eq!(res.hiragana, s);
assert_eq!(res.romaji, s);
}
}