/// Tests for rules shared between various speech styles: /// * modified var use crate::common::*; #[test] fn modified_vars() { let expr = " a ` b ~ c ̆ b ̌ c ` + x . y ˙ z ¨ u v + x ^ + t "; test("fi", "SimpleSpeak", expr, "a gravis, b tilde, c lyhyysmerkki, b hattu, c gravis; plus; x piste, y piste, z piste piste, u kolmoispiste, v nelinkertainen piste; plus x hattu, plus vektori t"); } #[test] fn limit() { let expr = " lim x 0 sin x x "; test("fi", "SimpleSpeak", expr, "raja-arvo kun x lähestyy 0; arvolla, murtoluku, sini arvolla x, per x, loppu murtoluku;"); } #[test] fn limit_from_below() { let expr = " lim x 0 sin x "; test("fi", "SimpleSpeak", expr, "raja-arvo kun x lähestyy alhaalta 0; arvolla sini arvolla x"); } #[test] fn binomial_mmultiscripts() { let expr = "Cmn"; test("fi", "SimpleSpeak", expr, "n yli m"); } #[test] fn permutation_mmultiscripts() { let expr = "Pkn"; test("fi", "SimpleSpeak", expr, "k permutaatio n"); } #[test] fn permutation_mmultiscripts_sup() { let expr = "Pkn"; test("fi", "SimpleSpeak", expr, "k permutaatio n"); } #[test] fn permutation_msubsup() { let expr = "Pkn"; test("fi", "SimpleSpeak", expr, "k permutaatio n"); } #[test] fn tensor_mmultiscripts() { let expr = " R i j k l "; test_prefs("fi", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "iso r jolla on 4 jälkikirjoitusta, alaindeksi i yläindeksi j alaindeksi k alaindeksi l"); test_prefs("fi", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "iso r jolla on 4 jälkikirjoitusta, ala i ylä j ala k ala l"); } #[test] fn huge_num_mmultiscripts() { let expr = " R i j k l m I J K L "; test_prefs("fi", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "iso r 4 etumäärettä, etualaindeksi iso i, etuyläindeksi iso j ja vaihtelevat etumääreet iso k none iso l none loppu etumääreet ja jolla on 5 jälkikirjoitusta, alaindeksi i yläindeksi j alaindeksi k alaindeksi l ja vaihtelevia määreitä m none loppu määreet"); } #[test] fn prime() { let expr = " x "; test("fi", "SimpleSpeak", expr, "x pilkku,"); } #[test] fn given() { let expr = "P(A|B)"; test("fi", "SimpleSpeak", expr, "iso p; auki sulku, iso a pystysuora viiva iso b; kiinni sulku"); test("fi", "ClearSpeak", expr, "iso p, auki sulku, iso a jakaa iso b, kiinni sulku"); // not good, but follows the spec } #[test] fn simple_msubsup() { let expr = " x k i "; test("fi", "ClearSpeak", expr, "x ala k, potenssiin i"); } #[test] fn non_simple_msubsup() { let expr = "ij2k"; test("fi", "SimpleSpeak", expr, "i ala j miinus 2 loppu ala, potenssiin k"); test("fi", "ClearSpeak", expr, "i ala j miinus 2 loppu ala, potenssiin k"); } #[test] fn presentation_mathml_in_semantics() { let expr = " {\\displaystyle x_k^i} x k i "; test("fi", "ClearSpeak", expr, "x ala k, potenssiin i"); } #[test] fn ignore_period() { // from https://en.wikipedia.org/wiki/Probability let expr = " {\\displaystyle x_k^i} P ( A  and  B ) = P ( A B ) = P ( A ) P ( B ) . "; test("fi", "SimpleSpeak", expr, "iso p; auki sulku, iso a and iso b; kiinni sulku; on yhtä suuri kuin; iso p, auki sulku, iso a leikkaus iso b, kiinni sulku; on yhtä suuri kuin; iso p arvolla iso a; iso p arvolla iso b"); } #[test] fn ignore_mtext_period() { let expr = "{2}."; test("fi", "SimpleSpeak", expr, "joukko 2"); } #[test] fn ignore_comma() { // from https://en.wikipedia.org/wiki/Probability let expr = " ϕ ( x ) = c e h 2 x 2 , "; test("fi", "SimpleSpeak", expr, "suora fii arvolla x, on yhtä suuri kuin; c, e potenssiin negatiivinen h toiseen, x toiseen"); } #[test] #[ignore] // issue #14 fn ignore_period_and_space() { // from https://en.wikipedia.org/wiki/Probability let expr = " P ( A B ) = P ( A B ) P ( B ) . "; test("fi", "ClearSpeak", expr, "phi of x is equal to; c, e raised to the negative h squared x squared power"); } #[test] fn mn_with_space() { let expr = "1 234 567"; test("fi", "SimpleSpeak", expr, "1234567"); } /// Tests for expressions that appear in the Finnish matriculation exams (FinME) #[test] fn FinME_difference_quotinent() { let expr = " D f ( a ) = f ( a ) = lim x a f ( x ) f ( a ) x a = lim h 0 f ( a + h ) f ( a ) h "; test("fi", "ClearSpeak", expr, "iso d f arvolla a; on yhtä suuri kuin, f pilkku, arvolla a, on yhtä suuri kuin; murtoluku osoittaja; f arvolla x, miinus f arvolla a; ja nimittäjä x miinus a; on yhtä suuri kuin; raja-arvo kun h lähestyy 0; arvolla; murtoluku osoittaja; f arvolla, auki sulku a plus h, kiinni sulku; miinus f arvolla a; ja nimittäjä h;"); test("fi", "SimpleSpeak", expr, "iso d f arvolla a; on yhtä suuri kuin, f pilkku, arvolla a, on yhtä suuri kuin; raja-arvo kun x lähestyy a; arvolla; murtoluku, f arvolla x, miinus f arvolla a, per, x miinus a, loppu murtoluku; on yhtä suuri kuin; raja-arvo kun h lähestyy 0; arvolla; murtoluku, f arvolla, auki sulku a plus h, kiinni sulku; miinus f arvolla a, per h, loppu murtoluku;"); } #[test] fn FinME_Quadratic_equation() { let expr =" x = b ± b 2 4 a b 2 a "; test("fi", "ClearSpeak", expr ,"x on yhtä suuri kuin; murtoluku osoittaja; negatiivinen b plus-miinus; neliöjuuri b toiseen miinus 4 a b; ja nimittäjä 2 a;"); test("fi", "SimpleSpeak", expr, "x on yhtä suuri kuin; murtoluku, negatiivinen b plus-miinus; neliöjuuri b toiseen miinus 4 a b loppu juuri; per, 2 a, loppu murtoluku;") } #[test] fn FinME_normal_distribution_e() { let expr = " e 1 2 ( x μ σ ) 2 "; test("fi", "ClearSpeak", expr, "e potenssiin, negatiivinen 1 kahdesosa, kertaa; auki sulku; murtoluku osoittaja; x miinus myy; ja nimittäjä sigma; kiinni sulku toiseen, loppu potenssi"); test("fi", "SimpleSpeak", expr, "e potenssiin negatiivinen 1 kahdesosa, kertaa; auki sulku; murtoluku, x miinus myy, per sigma, loppu murtoluku; kiinni sulku toiseen"); } #[test] fn FinME_triangle_inequality() { let expr = " | | a | - | b | | | a + b | | a | + | b | "; test("fi", "ClearSpeak", expr, "itseisarvo itseisarvo a, miinus itseisarvo b; on pienempi tai yhtä suuri kuin; itseisarvo a plus b; on pienempi tai yhtä suuri kuin; itseisarvo a, plus itseisarvo b,"); test("fi", "SimpleSpeak", expr, "itseisarvo itseisarvo a, miinus itseisarvo b; loppu itseisarvo; on pienempi tai yhtä suuri kuin; itseisarvo a plus b, loppu itseisarvo; on pienempi tai yhtä suuri kuin; itseisarvo a, plus itseisarvo b,"); } #[test] fn FinME_arithmetic_sum() { let expr=" a 1 + a 2 + + a n = n a 1 + a 2 2 "; test("fi", "ClearSpeak", expr, "a ala 1 plus a ala 2 plus piste piste piste plus a ala n; on yhtä suuri kuin; n; murtoluku osoittaja; a ala 1 plus a ala 2; ja nimittäjä 2;"); test("fi", "SimpleSpeak", expr, "a ala 1 plus a ala 2 plus piste piste piste plus a ala n; on yhtä suuri kuin; n; murtoluku, a ala 1 plus a ala 2, per 2, loppu murtoluku;") } #[test] fn FinME_geometric_sum() { let expr =" S n = a 1 + a 1 q + a 1 q 2 + + a 1 q n 1 = a 1 1 q n 1 q "; test("fi", "ClearSpeak", expr, "iso s ala n on yhtä suuri kuin; a ala 1 plus a ala 1 q plus a ala 1 q toiseen, plus piste piste piste plus, a ala 1 q potenssiin n miinus 1; on yhtä suuri kuin; a ala 1 kertaa; murtoluku osoittaja; 1 miinus q potenssiin n; ja nimittäjä 1 miinus q;"); test("fi", "SimpleSpeak", expr, "iso s ala n on yhtä suuri kuin; a ala 1 plus a ala 1 q plus a ala 1 q toiseen, plus piste piste piste plus, a ala 1 q potenssiin n miinus 1; on yhtä suuri kuin; a ala 1 kertaa; murtoluku, 1 miinus q potenssiin n, per, 1 miinus q, loppu murtoluku;") } #[test] fn FinME_absolute_value_defition() { let expr =" | a | = { a jos a 0 a jos  a<0 "; test("fi", "ClearSpeak", expr, "itseisarvo a; on yhtä suuri kuin; 2 tapausta, tapaus 1; a jos a; on suurempi tai yhtä suuri kuin 0; tapaus 2; negatiivinen a jos a; on pienempi kuin 0;"); test("fi", "SimpleSpeak", expr, "itseisarvo a; on yhtä suuri kuin; 2 tapausta, tapaus 1; a jos a; on suurempi tai yhtä suuri kuin 0; tapaus 2; negatiivinen a jos a; on pienempi kuin 0;") } #[test] fn FinME_mroot_msup_rule() { let expr = " a m n = a m n = ( a n ) m "; test("fi", "ClearSpeak", expr, "a potenssiin m per n, on yhtä suuri kuin, nnes juuri a potenssiin m; on yhtä suuri kuin; auki sulku nnes juuri a; kiinni sulku potenssiin m"); test("fi", "SimpleSpeak", expr, "a potenssiin m per n; on yhtä suuri kuin, nnes juuri a potenssiin m loppu juuri; on yhtä suuri kuin; auki sulku nnes juuri a; kiinni sulku potenssiin m") } #[test] fn FinME_newton_binomial() { let expr = " ( a + b ) n = k = 0 n ( n k ) a n k b k = k = 0 n n ! k ! ( n k ) ! a n k b k "; test("fi", "ClearSpeak", expr, "auki sulku a plus b, kiinni sulku potenssiin n; on yhtä suuri kuin; summa käy, luvusta k on yhtä suuri kuin 0, lukuun n; n yli k a potenssiin n miinus k, b potenssiin k; on yhtä suuri kuin; summa käy, luvusta k on yhtä suuri kuin 0, lukuun n; murtoluku osoittaja; n kertoma; ja nimittäjä k kertoma, auki sulku n miinus k, kiinni sulku; kertoma;, a potenssiin n miinus k, b potenssiin k"); test("fi", "SimpleSpeak", expr, "auki sulku a plus b, kiinni sulku potenssiin n; on yhtä suuri kuin; summa käy, luvusta k on yhtä suuri kuin 0, lukuun n; n yli k a potenssiin n miinus k, b potenssiin k; on yhtä suuri kuin; summa käy, luvusta k on yhtä suuri kuin 0, lukuun n; murtoluku, n kertoma, per, k kertoma, auki sulku n miinus k, kiinni sulku; kertoma, loppu murtoluku;, a potenssiin n miinus k, b potenssiin k") } #[test] fn FinME_secant_algorithm() { let expr =" x n + 1 = x n x n x n 1 f ( x n ) f ( x n 1 ) f ( x n ) "; test("fi", "ClearSpeak", expr, "x ala n plus 1 loppu ala; on yhtä suuri kuin; x ala n miinus; murtoluku osoittaja; x ala n miinus, x ala n miinus 1 loppu ala; ja nimittäjä f arvolla, auki sulku x ala n kiinni sulku; miinus; f arvolla; auki sulku, x ala n miinus 1 loppu ala; kiinni sulku; f arvolla, auki sulku x ala n kiinni sulku"); test("fi", "SimpleSpeak", expr, "x ala n plus 1 loppu ala; on yhtä suuri kuin; x ala n miinus; murtoluku, x ala n miinus, x ala n miinus 1 loppu ala; per, f arvolla, auki sulku x ala n kiinni sulku; miinus; f arvolla; auki sulku, x ala n miinus 1 loppu ala; kiinni sulku, loppu murtoluku; f arvolla, auki sulku x ala n kiinni sulku"); } #[test] fn Fin_ME_law_of_sines() { let expr = " a sin α = b sin β = c sin γ "; test("fi", "ClearSpeak", expr, "murtoluku osoittaja a; ja nimittäjä sini arvolla alfa; on yhtä suuri kuin; murtoluku osoittaja b; ja nimittäjä sini arvolla beeta; on yhtä suuri kuin; murtoluku osoittaja c; ja nimittäjä sini arvolla gamma;"); test("fi", "SimpleSpeak", expr, "murtoluku, a per, sini arvolla alfa, loppu murtoluku; on yhtä suuri kuin; murtoluku, b per, sini arvolla beeta, loppu murtoluku; on yhtä suuri kuin; murtoluku, c per, sini arvolla gamma, loppu murtoluku;"); } #[test] fn FinME_vectors() { let expr = " v = x 1 i + y 1 j "; test("fi", "ClearSpeak", expr, "vektori v on yhtä suuri kuin; x ala 1 vektori i, plus; y ala 1 vektori j"); test("fi", "SimpleSpeak", expr, "vektori v on yhtä suuri kuin; x ala 1 vektori i, plus; y ala 1 vektori j"); } #[test] fn FinME_compound_derivate_rule() { let expr = " D ( g f ) = D g ( f ( x ) ) = g ( f ( x ) ) f ( x ) "; test("fi", "ClearSpeak", expr, "iso d, auki sulku g yhdistetty f, kiinni sulku; on yhtä suuri kuin; iso d, g arvolla f arvolla x; on yhtä suuri kuin; g pilkku, arvolla f arvolla x; f pilkku, arvolla x"); test("fi", "SimpleSpeak", expr, "iso d, auki sulku g yhdistetty f, kiinni sulku; on yhtä suuri kuin; iso d, g arvolla f arvolla x; on yhtä suuri kuin; g pilkku, arvolla f arvolla x; f pilkku, arvolla x"); } #[test] fn FinME_integration_in_parts() { let expr = " f ( x ) g ( x ) d x = f ( x ) g ( x ) g ( x ) f ( x ) d x "; test("fi", "ClearSpeak", expr, "integraali f pilkku, arvolla x, g arvolla x, d x; on yhtä suuri kuin; f arvolla x, g arvolla x; miinus; integraali g pilkku, arvolla x, f arvolla x, d x"); test("fi", "SimpleSpeak", expr, "integraali f pilkku, arvolla x, g arvolla x, d x; on yhtä suuri kuin; f arvolla x, g arvolla x; miinus; integraali g pilkku, arvolla x, f arvolla x, d x"); } #[test] fn FinME_simpsons_rule() { let expr = " a b f ( x ) d x h 3 ( f ( x 0 ) + 4 f ( x 1 ) + 2 f ( x 2 ) + 4 f ( x 3 ) + + 4 f ( x n 1 ) + f ( x n ) ) "; test("fi", "ClearSpeak", expr, "integraali, alaraja a, yläraja b; f arvolla x, d x; on likimäärin yhtä suuri kuin; h per 3 kertaa; auki sulku; f arvolla, auki sulku x ala 0 kiinni sulku; plus, 4, f arvolla, auki sulku x ala 1 kiinni sulku; plus, 2, f arvolla, auki sulku x ala 2 kiinni sulku; plus, 4, f arvolla, auki sulku x ala 3 kiinni sulku; plus piste piste piste plus; 4; f arvolla; auki sulku, x ala n miinus 1 loppu ala; kiinni sulku; plus, f arvolla, auki sulku x ala n kiinni sulku; kiinni sulku"); test("fi", "SimpleSpeak", expr, "integraali, alaraja a, yläraja b; f arvolla x, d x; on likimäärin yhtä suuri kuin; h per 3, kertaa; auki sulku; f arvolla, auki sulku x ala 0 kiinni sulku; plus, 4, f arvolla, auki sulku x ala 1 kiinni sulku; plus, 2, f arvolla, auki sulku x ala 2 kiinni sulku; plus, 4, f arvolla, auki sulku x ala 3 kiinni sulku; plus piste piste piste plus; 4; f arvolla; auki sulku, x ala n miinus 1 loppu ala; kiinni sulku; plus, f arvolla, auki sulku x ala n kiinni sulku; kiinni sulku"); } #[test] fn FinME_binomials_cumulative_function() { let expr = " P ( X k ) = i = 0 | k | ( n i ) p i ( 1 p ) n i "; test("fi", "ClearSpeak", expr, "iso p arvolla; auki sulku, iso x on pienempi tai yhtä suuri kuin k; kiinni sulku; on yhtä suuri kuin; summa käy, luvusta i on yhtä suuri kuin 0, lukuun itseisarvo k,; n yli i p potenssiin i kertaa; auki sulku 1 miinus p, kiinni sulku potenssiin n miinus i"); test("fi", "SimpleSpeak", expr, "iso p arvolla; auki sulku, iso x on pienempi tai yhtä suuri kuin k; kiinni sulku; on yhtä suuri kuin; summa käy, luvusta i on yhtä suuri kuin 0, lukuun itseisarvo k,; n yli i p potenssiin i kertaa; auki sulku 1 miinus p, kiinni sulku potenssiin n miinus i"); } #[test] fn FinME_standard_normal_disributon_cumul() { let expr = " Φ ( x ) = 1 2 π x e t 2 2 d x "; test("fi", "ClearSpeak", expr, "iso fii arvolla x, on yhtä suuri kuin; murtoluku osoittaja 1; ja nimittäjä neliöjuuri 2 pii; integraali, alaraja negatiivinen ääretön, yläraja x; e potenssiin negatiivinen murtoluku osoittaja; t toiseen; ja nimittäjä 2; d x"); test("fi", "SimpleSpeak", expr, "iso fii arvolla x, on yhtä suuri kuin; murtoluku, 1 per, neliöjuuri 2 pii loppu juuri; loppu murtoluku; integraali, alaraja negatiivinen ääretön, yläraja x; e potenssiin negatiivinen murtoluku, t toiseen, per 2, loppu murtoluku; d x"); }