From 10e15b91340f297212bd24de5b15f60d30b439ad Mon Sep 17 00:00:00 2001 From: cm-ayf Date: Mon, 15 Jan 2024 15:31:41 +0900 Subject: [PATCH] add serializer --- src/fixture.rs | 547 +++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 4 + src/parser/mod.rs | 2 +- src/parser/test.rs | 547 +---------------------------------------- src/serializer/mod.rs | 318 ++++++++++++++++++++++++ src/serializer/test.rs | 9 + 6 files changed, 882 insertions(+), 545 deletions(-) create mode 100644 src/fixture.rs create mode 100644 src/serializer/mod.rs create mode 100644 src/serializer/test.rs diff --git a/src/fixture.rs b/src/fixture.rs new file mode 100644 index 0000000..630d383 --- /dev/null +++ b/src/fixture.rs @@ -0,0 +1,547 @@ +use crate::fullcontext_label::{ + AccentPhraseCurrent, AccentPhrasePrevNext, BreathGroupCurrent, BreathGroupPrevNext, Label, + Mora, Phoneme, Utterance, Word, +}; + +pub fn fixtures() -> [(&'static str, Label); 11] { + [ + ( + "xx^xx-sil+k=o/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:5_5%0_xx_xx/H:xx_xx/I:xx-xx@xx+xx&xx-xx|xx+xx/J:1_5/K:1+1-5", + Label { + phoneme: Phoneme { + p2: None, + p1: None, + c: Some("sil".to_string()), + n1: Some("k".to_string()), + n2: Some("o".to_string()), + }, + mora: None, + word_prev: None, + word_curr: None, + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: None, + accent_phrase_next: Some(AccentPhrasePrevNext { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + is_pause_insertion: None + }), + breath_group_prev: None, + breath_group_curr: None, + breath_group_next: Some(BreathGroupPrevNext { + accent_phrase_count: 1, + mora_count: 5, + }), + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "xx^sil-k+o=N/A:-4+1+5/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: None, + p1: Some("sil".to_string()), + c: Some("k".to_string()), + n1: Some("o".to_string()), + n2: Some("N".to_string()), + }, + mora: Some(Mora { + relative_accent_position: -4, + position_forward: 1, + position_backward: 5, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "sil^k-o+N=n/A:-4+1+5/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("sil".to_string()), + p1: Some("k".to_string()), + c: Some("o".to_string()), + n1: Some("N".to_string()), + n2: Some("n".to_string()), + }, + mora: Some(Mora { + relative_accent_position: -4, + position_forward: 1, + position_backward: 5, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "k^o-N+n=i/A:-3+2+4/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("k".to_string()), + p1: Some("o".to_string()), + c: Some("N".to_string()), + n1: Some("n".to_string()), + n2: Some("i".to_string()), + }, + mora: Some(Mora { + relative_accent_position: -3, + position_forward: 2, + position_backward: 4, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "o^N-n+i=ch/A:-2+3+3/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("o".to_string()), + p1: Some("N".to_string()), + c: Some("n".to_string()), + n1: Some("i".to_string()), + n2: Some("ch".to_string()), + }, + mora: Some(Mora { + relative_accent_position: -2, + position_forward: 3, + position_backward: 3, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "N^n-i+ch=i/A:-2+3+3/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("N".to_string()), + p1: Some("n".to_string()), + c: Some("i".to_string()), + n1: Some("ch".to_string()), + n2: Some("i".to_string()), + }, + mora: Some(Mora { + relative_accent_position: -2, + position_forward: 3, + position_backward: 3, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "n^i-ch+i=w/A:-1+4+2/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("n".to_string()), + p1: Some("i".to_string()), + c: Some("ch".to_string()), + n1: Some("i".to_string()), + n2: Some("w".to_string()), + }, + mora: Some(Mora { + relative_accent_position: -1, + position_forward: 4, + position_backward: 2, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "i^ch-i+w=a/A:-1+4+2/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("i".to_string()), + p1: Some("ch".to_string()), + c: Some("i".to_string()), + n1: Some("w".to_string()), + n2: Some("a".to_string()), + }, + mora: Some(Mora { + relative_accent_position: -1, + position_forward: 4, + position_backward: 2, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "ch^i-w+a=sil/A:0+5+1/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("ch".to_string()), + p1: Some("i".to_string()), + c: Some("w".to_string()), + n1: Some("a".to_string()), + n2: Some("sil".to_string()), + }, + mora: Some(Mora { + relative_accent_position: 0, + position_forward: 5, + position_backward: 1, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "i^w-a+sil=xx/A:0+5+1/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("i".to_string()), + p1: Some("w".to_string()), + c: Some("a".to_string()), + n1: Some("sil".to_string()), + n2: None, + }, + mora: Some(Mora { + relative_accent_position: 0, + position_forward: 5, + position_backward: 1, + }), + word_prev: None, + word_curr: Some(Word { + pos: Some(9), + ctype: None, + cform: None, + }), + word_next: None, + accent_phrase_prev: None, + accent_phrase_curr: Some(AccentPhraseCurrent { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + accent_phrase_next: None, + breath_group_prev: None, + breath_group_curr: Some(BreathGroupCurrent { + accent_phrase_count: 1, + mora_count: 5, + breath_group_position_forward: 1, + breath_group_position_backward: 1, + accent_phrase_position_forward: 1, + accent_phrase_position_backward: 1, + mora_position_forward: 1, + mora_position_backward: 5, + }), + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ( + "w^a-sil+xx=xx/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:5_5!0_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:xx_xx%xx_xx_xx/H:1_5/I:xx-xx@xx+xx&xx-xx|xx+xx/J:xx_xx/K:1+1-5", + Label { + phoneme: Phoneme { + p2: Some("w".to_string()), + p1: Some("a".to_string()), + c: Some("sil".to_string()), + n1: None, + n2: None, + }, + mora: None, + word_prev: None, + word_curr: None, + word_next: None, + accent_phrase_prev: Some(AccentPhrasePrevNext { + mora_count: 5, + accent_position: 5, + is_interrogative: false, + is_pause_insertion: None, + }), + accent_phrase_curr: None, + accent_phrase_next: None, + breath_group_prev: Some(BreathGroupPrevNext { + accent_phrase_count: 1, + mora_count: 5, + }), + breath_group_curr: None, + breath_group_next: None, + utterance: Utterance { + breath_group_count: 1, + accent_phrase_count: 1, + mora_count: 5, + }, + }, + ), + ] +} diff --git a/src/lib.rs b/src/lib.rs index 50f101a..9e097aa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,6 @@ mod fullcontext_label; mod parser; +mod serializer; + +#[cfg(test)] +mod fixture; diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 57f5e04..46339a5 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -176,7 +176,7 @@ impl<'a> LabelTokenizer<'a> { } } - /// `/F:f1_f2#_f3_f4@_f5_f6|f7_f8` + /// `/F:f1_f2#f3_f4@f5_f6|f7_f8` fn f(&mut self) -> Result, ParseError> { let f1 = Self::parse_or_xx(self.until("_")?)?; let f2 = Self::parse_or_xx(self.until("#")?)?; diff --git a/src/parser/test.rs b/src/parser/test.rs index 160970d..70b945c 100644 --- a/src/parser/test.rs +++ b/src/parser/test.rs @@ -1,550 +1,9 @@ -use super::*; +use crate::{fixture::fixtures, fullcontext_label::Label}; #[test] fn test_parse() { - let tests = [ - ( - "xx^xx-sil+k=o/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:5_5%0_xx_xx/H:xx_xx/I:xx-xx@xx+xx&xx-xx|xx+xx/J:1_5/K:1+1-5", - Label { - phoneme: Phoneme { - p2: None, - p1: None, - c: Some("sil".to_string()), - n1: Some("k".to_string()), - n2: Some("o".to_string()), - }, - mora: None, - word_prev: None, - word_curr: None, - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: None, - accent_phrase_next: Some(AccentPhrasePrevNext { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - is_pause_insertion: None - }), - breath_group_prev: None, - breath_group_curr: None, - breath_group_next: Some(BreathGroupPrevNext { - accent_phrase_count: 1, - mora_count: 5, - }), - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "xx^sil-k+o=N/A:-4+1+5/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: None, - p1: Some("sil".to_string()), - c: Some("k".to_string()), - n1: Some("o".to_string()), - n2: Some("N".to_string()), - }, - mora: Some(Mora { - relative_accent_position: -4, - position_forward: 1, - position_backward: 5, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "sil^k-o+N=n/A:-4+1+5/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("sil".to_string()), - p1: Some("k".to_string()), - c: Some("o".to_string()), - n1: Some("N".to_string()), - n2: Some("n".to_string()), - }, - mora: Some(Mora { - relative_accent_position: -4, - position_forward: 1, - position_backward: 5, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "k^o-N+n=i/A:-3+2+4/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("k".to_string()), - p1: Some("o".to_string()), - c: Some("N".to_string()), - n1: Some("n".to_string()), - n2: Some("i".to_string()), - }, - mora: Some(Mora { - relative_accent_position: -3, - position_forward: 2, - position_backward: 4, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "o^N-n+i=ch/A:-2+3+3/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("o".to_string()), - p1: Some("N".to_string()), - c: Some("n".to_string()), - n1: Some("i".to_string()), - n2: Some("ch".to_string()), - }, - mora: Some(Mora { - relative_accent_position: -2, - position_forward: 3, - position_backward: 3, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "N^n-i+ch=i/A:-2+3+3/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("N".to_string()), - p1: Some("n".to_string()), - c: Some("i".to_string()), - n1: Some("ch".to_string()), - n2: Some("i".to_string()), - }, - mora: Some(Mora { - relative_accent_position: -2, - position_forward: 3, - position_backward: 3, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "n^i-ch+i=w/A:-1+4+2/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("n".to_string()), - p1: Some("i".to_string()), - c: Some("ch".to_string()), - n1: Some("i".to_string()), - n2: Some("w".to_string()), - }, - mora: Some(Mora { - relative_accent_position: -1, - position_forward: 4, - position_backward: 2, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "i^ch-i+w=a/A:-1+4+2/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("i".to_string()), - p1: Some("ch".to_string()), - c: Some("i".to_string()), - n1: Some("w".to_string()), - n2: Some("a".to_string()), - }, - mora: Some(Mora { - relative_accent_position: -1, - position_forward: 4, - position_backward: 2, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "ch^i-w+a=sil/A:0+5+1/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("ch".to_string()), - p1: Some("i".to_string()), - c: Some("w".to_string()), - n1: Some("a".to_string()), - n2: Some("sil".to_string()), - }, - mora: Some(Mora { - relative_accent_position: 0, - position_forward: 5, - position_backward: 1, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "i^w-a+sil=xx/A:0+5+1/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("i".to_string()), - p1: Some("w".to_string()), - c: Some("a".to_string()), - n1: Some("sil".to_string()), - n2: None, - }, - mora: Some(Mora { - relative_accent_position: 0, - position_forward: 5, - position_backward: 1, - }), - word_prev: None, - word_curr: Some(Word { - pos: Some(9), - ctype: None, - cform: None, - }), - word_next: None, - accent_phrase_prev: None, - accent_phrase_curr: Some(AccentPhraseCurrent { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - accent_phrase_next: None, - breath_group_prev: None, - breath_group_curr: Some(BreathGroupCurrent { - accent_phrase_count: 1, - mora_count: 5, - breath_group_position_forward: 1, - breath_group_position_backward: 1, - accent_phrase_position_forward: 1, - accent_phrase_position_backward: 1, - mora_position_forward: 1, - mora_position_backward: 5, - }), - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ( - "w^a-sil+xx=xx/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:5_5!0_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:xx_xx%xx_xx_xx/H:1_5/I:xx-xx@xx+xx&xx-xx|xx+xx/J:xx_xx/K:1+1-5", - Label { - phoneme: Phoneme { - p2: Some("w".to_string()), - p1: Some("a".to_string()), - c: Some("sil".to_string()), - n1: None, - n2: None, - }, - mora: None, - word_prev: None, - word_curr: None, - word_next: None, - accent_phrase_prev: Some(AccentPhrasePrevNext { - mora_count: 5, - accent_position: 5, - is_interrogative: false, - is_pause_insertion: None, - }), - accent_phrase_curr: None, - accent_phrase_next: None, - breath_group_prev: Some(BreathGroupPrevNext { - accent_phrase_count: 1, - mora_count: 5, - }), - breath_group_curr: None, - breath_group_next: None, - utterance: Utterance { - breath_group_count: 1, - accent_phrase_count: 1, - mora_count: 5, - }, - }, - ), - ]; - - for (input, expected) in tests.iter() { + for (input, expected) in fixtures() { let actual = input.parse::