@@ -474,4 +474,370 @@ fn test_mtext_inference() {
474474 <mo>]</mo></math>"# ;
475475 test_prefs ( "nb" , "SimpleSpeak" , vec ! [ ( "DecimalSeparators" , "," ) , ( "BlockSeparators" , "." ) ] , expr,
476476 "start hakeparentes; 1 tonn, komma; 2 peta-ampere, komma, 3 pascal, komma; 4,5 milli-tesla; slutt hakeparentes" ) ;
477+ }
478+
479+ /// Tests for fractions followed by units
480+
481+ #[ test]
482+ fn one_neuter_unit ( ) {
483+ let expr = r#"<math>
484+ <mn>1</mn><mi mathvariant="normal" intent=":unit">min</mi>
485+ </math>"# ;
486+ test ( "nb" , "SimpleSpeak" , expr, "ett minutt" ) ;
487+ test ( "nb" , "ClearSpeak" , expr, "ett minutt" ) ;
488+ }
489+
490+
491+ #[ test]
492+ fn one_masculine_feminine_unit ( ) {
493+ let expr = r#"<math>
494+ <mn>1</mn><mi mathvariant="normal" intent=":unit">hr</mi>
495+ </math>"# ;
496+ test ( "nb" , "SimpleSpeak" , expr, "én time" ) ;
497+ test ( "nb" , "ClearSpeak" , expr, "én time" ) ;
498+ }
499+
500+
501+ #[ test]
502+ fn half_neuter_unit ( ) {
503+ let expr = r#"<math>
504+ <mfrac>
505+ <mn>1</mn><mn>2</mn>
506+ </mfrac>
507+ <mi mathvariant="normal" intent=":unit">sek</mi>
508+ </math>"# ;
509+ test ( "nb" , "SimpleSpeak" , expr, "ett halvt sekund" ) ;
510+ test ( "nb" , "ClearSpeak" , expr, "ett halvt sekund" ) ;
511+ }
512+
513+
514+ #[ test]
515+ fn half_masculine_feminine_unit ( ) {
516+ let expr = r#"<math>
517+ <mfrac>
518+ <mn>1</mn><mn>2</mn>
519+ </mfrac>
520+ <mi mathvariant="normal" intent=":unit">l</mi>
521+ </math>"# ;
522+ test ( "nb" , "SimpleSpeak" , expr, "én halv liter" ) ;
523+ test ( "nb" , "ClearSpeak" , expr, "én halv liter" ) ;
524+ }
525+
526+
527+ #[ test]
528+ fn one_third_neuter_unit ( ) {
529+ let expr = r#"<math>
530+ <mfrac>
531+ <mn>1</mn><mn>3</mn>
532+ </mfrac>
533+ <mi mathvariant="normal" intent=":unit">as</mi>
534+ </math>"# ;
535+ test ( "nb" , "SimpleSpeak" , expr, "ett tredjedels buesekund" ) ;
536+ test ( "nb" , "ClearSpeak" , expr, "ett tredjedels buesekund" ) ;
537+ }
538+
539+
540+ #[ test]
541+ fn one_third_masculine_feminine_unit ( ) {
542+ let expr = r#"<math>
543+ <mfrac>
544+ <mn>1</mn><mn>3</mn>
545+ </mfrac>
546+ <mi mathvariant="normal" intent=":unit">m</mi>
547+ </math>"# ;
548+ test ( "nb" , "SimpleSpeak" , expr, "én tredjedels meter" ) ;
549+ test ( "nb" , "ClearSpeak" , expr, "én tredjedels meter" ) ;
550+ }
551+
552+
553+ #[ test]
554+ fn five_thirds_unit ( ) {
555+ let expr = r#"<math>
556+ <mfrac>
557+ <mn>5</mn><mn>3</mn>
558+ </mfrac>
559+ <mi mathvariant="normal" intent=":unit">hr</mi>
560+ </math>"# ;
561+ test ( "nb" , "SimpleSpeak" , expr, "5 tredjedels time" ) ;
562+ test ( "nb" , "ClearSpeak" , expr, "5 tredjedels time" ) ;
563+ }
564+
565+
566+ #[ test]
567+ fn four_eighths_unit ( ) {
568+ let expr = r#"<math>
569+ <mfrac>
570+ <mn>4</mn><mn>8</mn>
571+ </mfrac>
572+ <mi mathvariant="normal" intent=":unit">g</mi>
573+ </math>"# ;
574+ test ( "nb" , "SimpleSpeak" , expr, "4 åttedels gram" ) ;
575+ test ( "nb" , "ClearSpeak" , expr, "4 åttedels gram" ) ;
576+ }
577+
578+
579+ #[ test]
580+ fn six_ninths_unit ( ) {
581+ let expr = r#"<math>
582+ <mfrac>
583+ <mn>6</mn><mn>9</mn>
584+ </mfrac>
585+ <mi mathvariant="normal" intent=":unit">hr</mi>
586+ </math>"# ;
587+ test ( "nb" , "SimpleSpeak" , expr, "6 nidels time" ) ;
588+ test ( "nb" , "ClearSpeak" , expr, "6 nidels time" ) ;
589+ }
590+
591+
592+ #[ test]
593+ fn mixed_fraction__half_neuter_unit ( ) {
594+ let expr = r#"<math>
595+ <mn>3</mn>
596+ <mfrac>
597+ <mn>1</mn><mn>2</mn>
598+ </mfrac>
599+ <mi mathvariant="normal" intent=":unit">min</mi>
600+ </math>"# ;
601+ test ( "nb" , "SimpleSpeak" , expr, "3 og et halvt minutt" ) ;
602+ test ( "nb" , "ClearSpeak" , expr, "3 og et halvt minutt" ) ;
603+ }
604+
605+
606+ #[ test]
607+ fn mixed_fraction__half_masculine_feminine_unit ( ) {
608+ let expr = r#"<math>
609+ <mn>3</mn>
610+ <mfrac>
611+ <mn>1</mn><mn>2</mn>
612+ </mfrac>
613+ <mi mathvariant="normal" intent=":unit">hr</mi>
614+ </math>"# ;
615+ test ( "nb" , "SimpleSpeak" , expr, "3 og én halv time" ) ;
616+ test ( "nb" , "ClearSpeak" , expr, "3 og én halv time" ) ;
617+ }
618+
619+
620+ #[ test]
621+ fn mixed_fractions_third_neuter_unit ( ) {
622+ let expr = r#"<math>
623+ <mn>1</mn>
624+ <mfrac>
625+ <mn>1</mn><mn>3</mn>
626+ </mfrac>
627+ <mi mathvariant="normal" intent=":unit">min</mi>
628+ </math>"# ;
629+ test ( "nb" , "SimpleSpeak" , expr, "ett og ett tredjedels minutt" ) ;
630+ test ( "nb" , "ClearSpeak" , expr, "ett og ett tredjedels minutt" ) ;
631+ }
632+
633+
634+ #[ test]
635+ fn mixed_fractions_third_masculine_feminine_unit ( ) {
636+ let expr = r#"<math>
637+ <mn>1</mn>
638+ <mfrac>
639+ <mn>1</mn><mn>3</mn>
640+ </mfrac>
641+ <mi mathvariant="normal" intent=":unit">hr</mi>
642+ </math>"# ;
643+ test ( "nb" , "SimpleSpeak" , expr, "én og én tredjedels time" ) ;
644+ test ( "nb" , "ClearSpeak" , expr, "én og én tredjedels time" ) ;
645+ }
646+
647+ #[ test]
648+ fn mixed_fractions_two_and_two_thirds_unit ( ) {
649+ let expr = r#"<math>
650+ <mn>2</mn>
651+ <mfrac>
652+ <mn>2</mn><mn>3</mn>
653+ </mfrac>
654+ <mi mathvariant="normal" intent=":unit">hr</mi>
655+ </math>"# ;
656+ test ( "nb" , "SimpleSpeak" , expr, "2 og 2 tredjedels time" ) ;
657+ test ( "nb" , "ClearSpeak" , expr, "2 og 2 tredjedels time" ) ;
658+ }
659+
660+ #[ test]
661+ fn mixed_fractions_four_and_five_sevenths_unit ( ) {
662+ let expr = r#"<math>
663+ <mn>4</mn>
664+ <mfrac>
665+ <mn>5</mn><mn>7</mn>
666+ </mfrac>
667+ <mi mathvariant="normal" intent=":unit">min</mi>
668+ </math>"# ;
669+ test ( "nb" , "SimpleSpeak" , expr, "4 og 5 sjudels minutt" ) ;
670+ test ( "nb" , "ClearSpeak" , expr, "4 og 5 sjudels minutt" ) ;
671+ }
672+
673+
674+ #[ test]
675+ fn fraction_with_units_neuter_unit ( ) {
676+ let expr = r#"<math>
677+ <mfrac><mn>1</mn><mn>2</mn></mfrac>
678+ <mfrac><mi mathvariant="normal" intent=":unit">g</mi><mi mathvariant="normal" intent=":unit">hr</mi></mfrac>
679+ </math>"# ;
680+ test ( "nb" , "SimpleSpeak" , expr, "ett halvt gram per time" ) ;
681+ test ( "nb" , "ClearSpeak" , expr, "ett halvt gram per time" ) ;
682+ }
683+
684+
685+ #[ test]
686+ fn fraction_with_units_masculine_feminine_unit ( ) {
687+ let expr = r#"<math>
688+ <mfrac><mn>1</mn><mn>2</mn></mfrac>
689+ <mfrac><mi mathvariant="normal" intent=":unit">m</mi><mi mathvariant="normal" intent=":unit">sek</mi></mfrac>
690+ </math>"# ;
691+ test ( "nb" , "SimpleSpeak" , expr, "én halv meter per sekund" ) ;
692+ test ( "nb" , "ClearSpeak" , expr, "én halv meter per sekund" ) ;
693+ }
694+
695+ #[ test]
696+ fn fraction_with_units_2_neuter_unit ( ) {
697+ let expr = r#"<math>
698+ <mfrac>
699+ <mrow><mn>1</mn><mi mathvariant="normal" intent=":unit">g</mi></mrow>
700+ <mrow><mn>3</mn><mi mathvariant="normal" intent=":unit">hr</mi></mrow>
701+ </mfrac>
702+ </math>"# ;
703+ test ( "nb" , "SimpleSpeak" , expr, "brøk, ett gram, over, 3 timer, slutt brøk" ) ;
704+ test ( "nb" , "ClearSpeak" , expr, "brøken med teller ett gram; og nevner 3 timer" ) ;
705+ }
706+
707+
708+ #[ test]
709+ fn fraction_with_units_2_masculine_feminine_unit ( ) {
710+ let expr = r#"<math>
711+ <mfrac>
712+ <mrow><mn>1</mn><mi mathvariant="normal" intent=":unit">m</mi></mrow>
713+ <mrow><mn>3</mn><mi mathvariant="normal" intent=":unit">sek</mi></mrow>
714+ </mfrac>
715+ </math>"# ;
716+ test ( "nb" , "SimpleSpeak" , expr, "brøk, én meter, over, 3 sekunder, slutt brøk" ) ;
717+ test ( "nb" , "ClearSpeak" , expr, "brøken med teller én meter; og nevner 3 sekunder" ) ;
718+ }
719+
720+
721+ #[ test]
722+ fn fraction_not_ordinal_units_neuter ( ) {
723+ let expr = r#"<math>
724+ <mfrac><mn>3</mn><mn>11</mn></mfrac><mi mathvariant="normal" intent=":unit">min</mi>
725+ </math>"# ;
726+ test ( "nb" , "SimpleSpeak" , expr, "3 over 11, minutter" ) ;
727+ test ( "nb" , "ClearSpeak" , expr, "3 over 11 minutter" ) ;
728+ }
729+
730+
731+ #[ test]
732+ fn fraction_not_ordinal_units_masculine_feminine ( ) {
733+ let expr = r#"<math>
734+ <mfrac><mn>3</mn><mn>11</mn></mfrac><mi mathvariant="normal" intent=":unit">hr</mi>
735+ </math>"# ;
736+ test ( "nb" , "SimpleSpeak" , expr, "3 over 11, timer" ) ;
737+ test ( "nb" , "ClearSpeak" , expr, "3 over 11 timer" ) ;
738+ }
739+
740+ #[ test]
741+ fn fraction_not_ordinal_2_units_neuter ( ) {
742+ let expr = r#"<math>
743+ <mfrac><mn>7</mn><mn>21</mn></mfrac><mi mathvariant="normal" intent=":unit">min</mi>
744+ </math>"# ;
745+ test ( "nb" , "SimpleSpeak" , expr, "7 over 21, minutter" ) ;
746+ test ( "nb" , "ClearSpeak" , expr, "7 over 21 minutter" ) ;
747+ }
748+
749+
750+ #[ test]
751+ fn fraction_not_ordinal_2_units_masculine_feminine ( ) {
752+ let expr = r#"<math>
753+ <mfrac><mn>7</mn><mn>21</mn></mfrac><mi mathvariant="normal" intent=":unit">hr</mi>
754+ </math>"# ;
755+ test ( "nb" , "SimpleSpeak" , expr, "7 over 21, timer" ) ;
756+ test ( "nb" , "ClearSpeak" , expr, "7 over 21 timer" ) ;
757+ }
758+
759+ /// Fractions followed by units with prefix.
760+
761+ #[ test]
762+ fn one_neuter_unit_prefix ( ) {
763+ let expr = r#"<math>
764+ <mn>1</mn><mi mathvariant="normal" intent=":unit">mg</mi>
765+ </math>"# ;
766+ test ( "nb" , "SimpleSpeak" , expr, "ett milli-gram" ) ;
767+ test ( "nb" , "ClearSpeak" , expr, "ett milli-gram" ) ;
768+ }
769+
770+
771+ #[ test]
772+ fn one_masculine_feminine_unit_prefix ( ) {
773+ let expr = r#"<math>
774+ <mn>1</mn><mi mathvariant="normal" intent=":unit">µm</mi>
775+ </math>"# ;
776+ test ( "nb" , "SimpleSpeak" , expr, "én mikro-meter" ) ;
777+ test ( "nb" , "ClearSpeak" , expr, "én mikro-meter" ) ;
778+ }
779+
780+
781+ #[ test]
782+ fn half_neuter_unit_prefix ( ) {
783+ let expr = r#"<math>
784+ <mfrac>
785+ <mn>1</mn><mn>2</mn>
786+ </mfrac>
787+ <mi mathvariant="normal" intent=":unit">nsek</mi>
788+ </math>"# ;
789+ test ( "nb" , "SimpleSpeak" , expr, "ett halvt nano-sekund" ) ;
790+ test ( "nb" , "ClearSpeak" , expr, "ett halvt nano-sekund" ) ;
791+ }
792+
793+
794+ #[ test]
795+
796+ fn mixed_fractions_third_masculine_feminine_unit_prefix ( ) {
797+ let expr = r#"<math>
798+ <mn>1</mn>
799+ <mfrac>
800+ <mn>1</mn><mn>3</mn>
801+ </mfrac>
802+ <mi mathvariant="normal" intent=":unit">dN</mi>
803+ </math>"# ;
804+ test ( "nb" , "SimpleSpeak" , expr, "én og én tredjedels desi-newton" ) ;
805+ test ( "nb" , "ClearSpeak" , expr, "én og én tredjedels desi-newton" ) ;
806+ }
807+
808+
809+ #[ test]
810+
811+ fn mixed_fractions_four_and_five_sevenths_unit_prefix ( ) {
812+ let expr = r#"<math>
813+ <mn>4</mn>
814+ <mfrac>
815+ <mn>5</mn><mn>7</mn>
816+ </mfrac>
817+ <mi mathvariant="normal" intent=":unit">nas</mi>
818+ </math>"# ;
819+ test ( "nb" , "SimpleSpeak" , expr, "4 og 5 sjudels nano-buesekund" ) ;
820+ test ( "nb" , "ClearSpeak" , expr, "4 og 5 sjudels nano-buesekund" ) ;
821+ }
822+
823+
824+ #[ test]
825+
826+ fn fraction_not_ordinal_2_units_neuter_prefix ( ) {
827+ let expr = r#"<math>
828+ <mfrac><mn>7</mn><mn>21</mn></mfrac><mi mathvariant="normal" intent=":unit">nsek</mi>
829+ </math>"# ;
830+ test ( "nb" , "SimpleSpeak" , expr, "7 over 21, nano-sekunder" ) ;
831+ test ( "nb" , "ClearSpeak" , expr, "7 over 21 nano-sekunder" ) ;
832+ }
833+
834+
835+ #[ test]
836+
837+ fn fraction_not_ordinal_2_units_masculine_feminine_prefix ( ) {
838+ let expr = r#"<math>
839+ <mfrac><mn>7</mn><mn>21</mn></mfrac><mi mathvariant="normal" intent=":unit">ml</mi>
840+ </math>"# ;
841+ test ( "nb" , "SimpleSpeak" , expr, "7 over 21, milli-liter" ) ;
842+ test ( "nb" , "ClearSpeak" , expr, "7 over 21 milli-liter" ) ;
477843}
0 commit comments