diff --git a/Rules/Languages/de/ClearSpeak_Rules.yaml b/Rules/Languages/de/ClearSpeak_Rules.yaml index 4c8f1d277..8d23c3502 100644 --- a/Rules/Languages/de/ClearSpeak_Rules.yaml +++ b/Rules/Languages/de/ClearSpeak_Rules.yaml @@ -532,37 +532,46 @@ - x: "*[2]" - pause: short - test: - if: "not($is_intervals_start_infinity)" + if: "not($is_intervals_start_infinity) and starts-with(name(.), 'open')" + then: + - T: "nicht einschließlich" + - x: "*[1]" + - test: + if: "not($is_intervals_start_infinity) and not(starts-with(name(.), 'open'))" then: - - test: - if: "starts-with(name(.), 'open')" - then: [T: "no"] - T: "einschließlich" - x: "*[1]" - # logic to deal with [not] arg #1 - test: - if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" - then_test: - - if: "name(.)='open-interval'" - then: [T: "ohne"] - - else_if: "name(.)='closed-interval'" - then: [T: "mit"] - else: [T: "ohne"] - # some ugly logic dealing with connectives: or, but, but, and (cleaner to be part of next clause?) - - test: - if: not($is_intervals_end_infinity) + if: "not($is_intervals_start_infinity or $is_intervals_end_infinity) and name(.)='open-interval'" then: - - test: - # there is some asymmetry to the test because of the and/or/but logic above - if: not( name(.)='open-interval' or name(.)='closed-interval' ) or $is_intervals_start_infinity - then: - - test: - if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" - then: [T: "ohne"] - - T: "einschließlich" + - T: "und nicht einschließlich" + - x: "*[2]" + - test: + if: "not($is_intervals_start_infinity or $is_intervals_end_infinity) and name(.)='open-closed-interval'" + then: + - T: "aber einschließlich" + - x: "*[2]" + - test: + if: "not($is_intervals_start_infinity or $is_intervals_end_infinity) and name(.)='closed-open-interval'" + then: + - T: "aber nicht einschließlich" + - x: "*[2]" + - test: + if: "not($is_intervals_start_infinity or $is_intervals_end_infinity) and name(.)='closed-interval'" + then: + - T: "und" + - x: "*[2]" + - test: + if: "$is_intervals_start_infinity and not($is_intervals_end_infinity) and (name(.)='open-interval' or name(.)='closed-open-interval')" + then: + - T: "nicht einschließlich" + - x: "*[2]" + - test: + if: "$is_intervals_start_infinity and not($is_intervals_end_infinity) and (name(.)='open-closed-interval' or name(.)='closed-interval')" + then: + - T: "einschließlich" - x: "*[2]" - # onto the [not] [including]... part - name: binomial-frac-vector tag: matrix match: diff --git a/tests/Languages/de.rs b/tests/Languages/de.rs index 4d2be48ab..b2c36e61e 100644 --- a/tests/Languages/de.rs +++ b/tests/Languages/de.rs @@ -2,6 +2,7 @@ mod ClearSpeak { mod functions; + mod intervals; mod large_ops; mod menclose; mod mfrac; diff --git a/tests/Languages/de/ClearSpeak/intervals.rs b/tests/Languages/de/ClearSpeak/intervals.rs new file mode 100644 index 000000000..3bf359a55 --- /dev/null +++ b/tests/Languages/de/ClearSpeak/intervals.rs @@ -0,0 +1,149 @@ +//! Regression tests for German ClearSpeak interval endpoint wording. +//! Each endpoint combination should use one German connector and no untranslated words. + +use crate::common::*; +use anyhow::Result; + +#[test] +fn interval_open_open() -> Result<()> { + let expr = " + ( + c,d + ) + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall c bis d, nicht einschließlich c und nicht einschließlich d", + ) +} + +#[test] +fn interval_open_closed() -> Result<()> { + let expr = " + ( + c,d + ] + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall c bis d, nicht einschließlich c aber einschließlich d", + ) +} + +#[test] +fn interval_closed_open() -> Result<()> { + let expr = " + [ + c,d + ) + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall c bis d, einschließlich c aber nicht einschließlich d", + ) +} + +#[test] +fn interval_closed_closed() -> Result<()> { + let expr = " + [ + c,d + ] + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall c bis d, einschließlich c und d", + ) +} + +#[test] +fn interval_negative_infinity_to_open_endpoint() -> Result<()> { + let expr = " + ( + -∞,d + ) + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall negative unendlich bis d, nicht einschließlich d", + ) +} + +#[test] +fn interval_negative_infinity_to_closed_endpoint() -> Result<()> { + let expr = " + ( + -∞,d + ] + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall negative unendlich bis d, einschließlich d", + ) +} + +#[test] +fn interval_open_endpoint_to_infinity() -> Result<()> { + let expr = " + ( + c,∞ + ) + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall c bis unendlich, nicht einschließlich c", + ) +} + +#[test] +fn interval_closed_endpoint_to_infinity() -> Result<()> { + let expr = " + [ + c,∞ + ) + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall c bis unendlich, einschließlich c", + ) +} + +#[test] +fn interval_between_infinities_has_no_endpoint_qualifier() -> Result<()> { + let expr = " + ( + -∞,∞ + ) + "; + test_ClearSpeak( + "de", + "ClearSpeak_Paren", + "Interval", + expr, + "das Intervall negative unendlich bis unendlich", + ) +}