LCOV - code coverage report
Current view: top level - tests - catch_ordinal_indicator.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 487 487 100.0 %
Date: 2021-10-14 20:12:47 Functions: 12 12 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2006-2021  Made to Order Software Corp.  All Rights Reserved
       2             : //
       3             : // https://snapwebsites.org/project/snaplogger
       4             : // contact@m2osw.com
       5             : //
       6             : // This program is free software; you can redistribute it and/or modify
       7             : // it under the terms of the GNU General Public License as published by
       8             : // the Free Software Foundation; either version 2 of the License, or
       9             : // (at your option) any later version.
      10             : //
      11             : // This program is distributed in the hope that it will be useful,
      12             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             : // GNU General Public License for more details.
      15             : //
      16             : // You should have received a copy of the GNU General Public License along
      17             : // with this program; if not, write to the Free Software Foundation, Inc.,
      18             : // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      19             : 
      20             : // self
      21             : //
      22             : #include    "catch_main.h"
      23             : 
      24             : 
      25             : // snaplogger lib
      26             : //
      27             : #include    <snaplogger/ordinal_indicator.h>
      28             : 
      29             : 
      30             : // C lib
      31             : //
      32             : #include    <unistd.h>
      33             : 
      34             : 
      35             : 
      36           4 : CATCH_TEST_CASE("ordinal_indicator_common", "[ordinal_indicator]")
      37             : {
      38           4 :     CATCH_START_SECTION("ordinal indicator: default settings")
      39             :     {
      40           1 :         snaplogger::ordinal_indicator ind;
      41             : 
      42           1 :         CATCH_REQUIRE(ind.language() == snaplogger::language_t::LANGUAGE_DEFAULT);
      43           1 :         CATCH_REQUIRE(ind.gender() == snaplogger::gender_t::GENDER_MASCULINE);
      44           1 :         CATCH_REQUIRE(ind.number() == snaplogger::number_t::NUMBER_SINGULAR);
      45           1 :         CATCH_REQUIRE(ind.secondary_form() == snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
      46             :     }
      47             :     CATCH_END_SECTION()
      48             : 
      49           4 :     CATCH_START_SECTION("ordinal indicator: test all possible parameters")
      50             :     {
      51           1 :         snaplogger::ordinal_indicator ind;
      52             : 
      53          30 :         for(snaplogger::language_t language(snaplogger::language_t::LANGUAGE_FIRST);
      54          30 :             language <= snaplogger::language_t::LANGUAGE_LAST;
      55          29 :             language = static_cast<snaplogger::language_t>(static_cast<int>(language) + 1))
      56             :         {
      57         116 :             for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE);
      58         116 :                 gender <= snaplogger::gender_t::GENDER_NEUTRAL;
      59          87 :                 gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1))
      60             :             {
      61         261 :                 for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR);
      62         261 :                     number <= snaplogger::number_t::NUMBER_PLURAL;
      63         174 :                     number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1))
      64             :                 {
      65         696 :                     for(snaplogger::secondary_form_t form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
      66         696 :                         form <= snaplogger::secondary_form_t::SECONDARY_FORM_THREE;
      67         522 :                         form = static_cast<snaplogger::secondary_form_t>(static_cast<int>(form) + 1))
      68             :                     {
      69         522 :                         ind.language(language);
      70         522 :                         ind.gender(gender);
      71         522 :                         ind.number(number);
      72         522 :                         ind.secondary_form(form);
      73             : 
      74         522 :                         CATCH_REQUIRE(ind.language() == language);
      75         522 :                         CATCH_REQUIRE(ind.gender() == gender);
      76         522 :                         CATCH_REQUIRE(ind.number() == number);
      77         522 :                         CATCH_REQUIRE(ind.secondary_form() == form);
      78             :                     }
      79             :                 }
      80             :             }
      81             :         }
      82             :     }
      83             :     CATCH_END_SECTION()
      84           2 : }
      85             : 
      86             : 
      87           6 : CATCH_TEST_CASE("ordinal_indicator_english", "[ordinal_indicator]")
      88             : {
      89           8 :     CATCH_START_SECTION("ordinal indicator: 1st 2nd 3rd 4th ... 20th")
      90             :     {
      91           1 :         snaplogger::ordinal_indicator ind;
      92             : 
      93           1 :         ind.language(snaplogger::language_t::LANGUAGE_ENGLISH);
      94             : 
      95           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("st"));
      96           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
      97           1 :         CATCH_REQUIRE(ind.indicator(3) == std::string("rd"));
      98          18 :         for(int n(4); n <= 20; ++n)
      99             :         {
     100          17 :             CATCH_REQUIRE(ind.indicator(n) == std::string("th"));
     101             :         }
     102             :     }
     103             :     CATCH_END_SECTION()
     104             : 
     105           8 :     CATCH_START_SECTION("ordinal indicator: larger numbers")
     106             :     {
     107           1 :         snaplogger::ordinal_indicator ind;
     108             : 
     109           1 :         ind.language(snaplogger::language_t::LANGUAGE_ENGLISH);
     110             : 
     111           1 :         CATCH_REQUIRE(ind.indicator(11) == std::string("th"));
     112           1 :         CATCH_REQUIRE(ind.indicator(111) == std::string("th"));
     113           1 :         CATCH_REQUIRE(ind.indicator(37'511) == std::string("th"));
     114             : 
     115           1 :         CATCH_REQUIRE(ind.indicator(12) == std::string("th"));
     116           1 :         CATCH_REQUIRE(ind.indicator(112) == std::string("th"));
     117             : 
     118           1 :         CATCH_REQUIRE(ind.indicator(13) == std::string("th"));
     119           1 :         CATCH_REQUIRE(ind.indicator(513) == std::string("th"));
     120           1 :         CATCH_REQUIRE(ind.indicator(915'113) == std::string("th"));
     121             :     }
     122             :     CATCH_END_SECTION()
     123             : 
     124           8 :     CATCH_START_SECTION("ordinal indicator: 1st 2nd 3rd 4th with any gender & number")
     125             :     {
     126           4 :         for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE);
     127           4 :             gender <= snaplogger::gender_t::GENDER_NEUTRAL;
     128           3 :             gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1))
     129             :         {
     130           9 :             for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR);
     131           9 :                 number <= snaplogger::number_t::NUMBER_PLURAL;
     132           6 :                 number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1))
     133             :             {
     134             : //std::cerr << "test with " << static_cast<int>(gender) << " & " << static_cast<int>(number) << "\n";
     135           6 :                 snaplogger::ordinal_indicator ind;
     136           6 :                 ind.language(snaplogger::language_t::LANGUAGE_ENGLISH);
     137           6 :                 ind.gender(gender);
     138           6 :                 ind.number(number);
     139             : 
     140           6 :                 CATCH_REQUIRE(ind.indicator(1) == std::string("st"));
     141           6 :                 CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
     142           6 :                 CATCH_REQUIRE(ind.indicator(3) == std::string("rd"));
     143         108 :                 for(int n(4); n <= 20; ++n)
     144             :                 {
     145         102 :                     CATCH_REQUIRE(ind.indicator(n) == std::string("th"));
     146             :                 }
     147             : 
     148             :                 // and a few of the special cases
     149             :                 //
     150           6 :                 CATCH_REQUIRE(ind.indicator(11) == std::string("th"));
     151           6 :                 CATCH_REQUIRE(ind.indicator(112) == std::string("th"));
     152           6 :                 CATCH_REQUIRE(ind.indicator(915'113) == std::string("th"));
     153             :             }
     154             :         }
     155             :     }
     156             :     CATCH_END_SECTION()
     157             : 
     158           8 :     CATCH_START_SECTION("ordinal indicator: no other forms")
     159             :     {
     160           1 :         snaplogger::ordinal_indicator ind;
     161             : 
     162           1 :         ind.language(snaplogger::language_t::LANGUAGE_ENGLISH);
     163             : 
     164           4 :         for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE);
     165           4 :             gender <= snaplogger::gender_t::GENDER_NEUTRAL;
     166           3 :             gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1))
     167             :         {
     168           9 :             for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR);
     169           9 :                 number <= snaplogger::number_t::NUMBER_PLURAL;
     170           6 :                 number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1))
     171             :             {
     172          24 :                 for(snaplogger::secondary_form_t form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     173          24 :                     form <= snaplogger::secondary_form_t::SECONDARY_FORM_THREE;
     174          18 :                     form = static_cast<snaplogger::secondary_form_t>(static_cast<int>(form) + 1))
     175             :                 {
     176             : //std::cerr << "test with " << static_cast<int>(gender) << " & " << static_cast<int>(number) << "\n";
     177          18 :                     ind.gender(gender);
     178          18 :                     ind.number(number);
     179          18 :                     ind.secondary_form(form);
     180             : 
     181          18 :                     CATCH_REQUIRE(ind.indicator(1) == std::string());
     182          18 :                     if(form == snaplogger::secondary_form_t::SECONDARY_FORM_ONE)
     183             :                     {
     184           6 :                         CATCH_REQUIRE(ind.indicator(2) == std::string("d"));
     185           6 :                         CATCH_REQUIRE(ind.indicator(3) == std::string("d"));
     186             :                     }
     187             :                     else
     188             :                     {
     189          12 :                         CATCH_REQUIRE(ind.indicator(2) == std::string());
     190          12 :                         CATCH_REQUIRE(ind.indicator(3) == std::string());
     191             :                     }
     192         324 :                     for(int n(4); n <= 20; ++n)
     193             :                     {
     194         306 :                         CATCH_REQUIRE(ind.indicator(n) == std::string());
     195             :                     }
     196             : 
     197             :                     // and a few of the special cases
     198             :                     //
     199          18 :                     CATCH_REQUIRE(ind.indicator(11) == std::string());
     200          18 :                     CATCH_REQUIRE(ind.indicator(112) == std::string());
     201          18 :                     CATCH_REQUIRE(ind.indicator(915'113) == std::string());
     202             :                 }
     203             :             }
     204             :         }
     205             :     }
     206             :     CATCH_END_SECTION()
     207           4 : }
     208             : 
     209             : 
     210             : 
     211           5 : CATCH_TEST_CASE("ordinal_indicator_french", "[ordinal_indicator]")
     212             : {
     213           6 :     CATCH_START_SECTION("ordinal indicator: 1re 1res 1er 1ers (first)")
     214             :     {
     215           1 :         snaplogger::ordinal_indicator ind;
     216             : 
     217           1 :         ind.language(snaplogger::language_t::LANGUAGE_FRENCH);
     218             : 
     219           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     220           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     221           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     222           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("er"));
     223             : 
     224           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     225           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     226           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     227           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("ers"));
     228             : 
     229           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     230           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     231           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     232           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("re"));
     233             : 
     234           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     235           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     236           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     237           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("res"));
     238             :     }
     239             :     CATCH_END_SECTION()
     240             : 
     241           6 :     CATCH_START_SECTION("ordinal indicator: 2e 2es 2d 2ds 2de 2des 2nd 2nds 2nde 2ndes 2eme 2emes (second)")
     242             :     {
     243           1 :         snaplogger::ordinal_indicator ind;
     244             : 
     245           1 :         ind.language(snaplogger::language_t::LANGUAGE_FRENCH);
     246             : 
     247           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     248           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     249           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     250           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("e"));
     251             : 
     252           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     253           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     254           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     255           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("es"));
     256             : 
     257           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     258           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     259           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     260           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("e"));
     261             : 
     262           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     263           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     264           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     265           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("es"));
     266             : 
     267           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     268           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     269           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     270           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA8me"));
     271             : 
     272           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     273           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     274           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     275           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA8mes"));
     276             : 
     277           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     278           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     279           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     280           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA8me"));
     281             : 
     282           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     283           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     284           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     285           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA8mes"));
     286             : 
     287           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     288           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     289           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO);
     290           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("i\xC3\xA8me"));
     291             : 
     292           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     293           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     294           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO);
     295           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("i\xC3\xA8mes"));
     296             : 
     297           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     298           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     299           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO);
     300           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("i\xC3\xA8me"));
     301             : 
     302           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     303           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     304           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO);
     305           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("i\xC3\xA8mes"));
     306             : 
     307           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     308           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     309           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_THREE);
     310           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("d"));
     311             : 
     312           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     313           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     314           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_THREE);
     315           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("ds"));
     316             : 
     317           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     318           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     319           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_THREE);
     320           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("de"));
     321             : 
     322           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     323           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     324           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_THREE);
     325           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("des"));
     326             : 
     327           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     328           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     329           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FOUR);
     330           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
     331             : 
     332           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     333           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     334           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FOUR);
     335           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nds"));
     336             : 
     337           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     338           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     339           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FOUR);
     340           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nde"));
     341             : 
     342           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     343           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     344           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FOUR);
     345           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("ndes"));
     346             :     }
     347             :     CATCH_END_SECTION()
     348             : 
     349           6 :     CATCH_START_SECTION("ordinal indicator: Ne Nes Neme Nemes Nieme Niemes (second)")
     350             :     {
     351           1 :         snaplogger::ordinal_indicator ind;
     352             : 
     353           1 :         ind.language(snaplogger::language_t::LANGUAGE_FRENCH);
     354             : 
     355         998 :         for(int n(3); n < 1'000; ++n)
     356             :         {
     357         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     358         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     359         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     360         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("e"));
     361             : 
     362         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     363         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     364         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     365         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("es"));
     366             : 
     367         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     368         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     369         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     370         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("e"));
     371             : 
     372         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     373         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     374         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     375         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("es"));
     376             : 
     377         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     378         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     379         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     380         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA8me"));
     381             : 
     382         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     383         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     384         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     385         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA8mes"));
     386             : 
     387         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     388         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     389         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     390         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA8me"));
     391             : 
     392         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     393         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     394         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     395         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA8mes"));
     396             : 
     397         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     398         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     399         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO);
     400         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("i\xC3\xA8me"));
     401             : 
     402         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     403         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     404         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO);
     405         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("i\xC3\xA8mes"));
     406             : 
     407         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     408         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     409         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO);
     410         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("i\xC3\xA8me"));
     411             : 
     412         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     413         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     414         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_TWO);
     415         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("i\xC3\xA8mes"));
     416             :         }
     417             :     }
     418             :     CATCH_END_SECTION()
     419           3 : }
     420             : 
     421             : 
     422             : 
     423           5 : CATCH_TEST_CASE("ordinal_indicator_provincial", "[ordinal_indicator]")
     424             : {
     425           6 :     CATCH_START_SECTION("ordinal indicator: 1r 1re")
     426             :     {
     427           1 :         snaplogger::ordinal_indicator ind;
     428             : 
     429           1 :         ind.language(snaplogger::language_t::LANGUAGE_FRANCOPROVENCAL);
     430             : 
     431           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     432           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     433           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     434           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA9r"));
     435             : 
     436           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     437           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     438           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     439           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA9r"));
     440             : 
     441           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     442           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     443           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     444           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA9re"));
     445             : 
     446           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     447           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     448           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     449           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA9re"));
     450             :     }
     451             :     CATCH_END_SECTION()
     452             : 
     453           6 :     CATCH_START_SECTION("ordinal indicator: 2nd 2nda 2emo 2ema (second)")
     454             :     {
     455           1 :         snaplogger::ordinal_indicator ind;
     456             : 
     457           1 :         ind.language(snaplogger::language_t::LANGUAGE_FRANCOPROVENCAL);
     458             : 
     459           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     460           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     461           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     462           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA9mo"));
     463             : 
     464           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     465           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     466           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     467           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA9mo"));
     468             : 
     469           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     470           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     471           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     472           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA9ma"));
     473             : 
     474           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     475           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     476           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     477           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("\xC3\xA9ma"));
     478             : 
     479           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     480           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     481           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     482           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
     483             : 
     484           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     485           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     486           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     487           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
     488             : 
     489           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     490           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     491           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     492           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nda"));
     493             : 
     494           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     495           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     496           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     497           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nda"));
     498             :     }
     499             :     CATCH_END_SECTION()
     500             : 
     501           6 :     CATCH_START_SECTION("ordinal indicator: Nemo Nema")
     502             :     {
     503           1 :         snaplogger::ordinal_indicator ind;
     504             : 
     505           1 :         ind.language(snaplogger::language_t::LANGUAGE_FRANCOPROVENCAL);
     506             : 
     507         998 :         for(int n(3); n < 1'000; ++n)
     508             :         {
     509         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     510         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     511         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     512         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA9mo"));
     513             : 
     514         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     515         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     516         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     517         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA9mo"));
     518             : 
     519         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     520         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     521         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     522         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA9ma"));
     523             : 
     524         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     525         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     526         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     527         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("\xC3\xA9ma"));
     528             :         }
     529             :     }
     530             :     CATCH_END_SECTION()
     531           3 : }
     532             : 
     533             : 
     534             : 
     535           3 : CATCH_TEST_CASE("ordinal_indicator_breton", "[ordinal_indicator]")
     536             : {
     537           2 :     CATCH_START_SECTION("ordinal indicator: 1an 2l 3de 4re 5vet")
     538             :     {
     539           1 :         snaplogger::ordinal_indicator ind;
     540             : 
     541           1 :         ind.language(snaplogger::language_t::LANGUAGE_BRETON);
     542             : 
     543           4 :         for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE);
     544           4 :             gender <= snaplogger::gender_t::GENDER_NEUTRAL;
     545           3 :             gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1))
     546             :         {
     547           9 :             for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR);
     548           9 :                 number <= snaplogger::number_t::NUMBER_PLURAL;
     549           6 :                 number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1))
     550             :             {
     551           6 :                 ind.gender(gender);
     552           6 :                 ind.number(number);
     553             : 
     554           6 :                 CATCH_REQUIRE(ind.indicator(1) == std::string("a\xC3\xB1"));
     555           6 :                 CATCH_REQUIRE(ind.indicator(2) == std::string("l"));
     556           6 :                 CATCH_REQUIRE(ind.indicator(3) == std::string("de"));
     557           6 :                 CATCH_REQUIRE(ind.indicator(4) == std::string("re"));
     558             : 
     559        5976 :                 for(int n(5); n < 1'000; ++n)
     560             :                 {
     561        5970 :                     CATCH_REQUIRE(ind.indicator(n) == std::string("vet"));
     562             :                 }
     563             :             }
     564             :         }
     565             :     }
     566             :     CATCH_END_SECTION()
     567           1 : }
     568             : 
     569             : 
     570           5 : CATCH_TEST_CASE("ordinal_indicator_occitan", "[ordinal_indicator]")
     571             : {
     572           6 :     CATCH_START_SECTION("ordinal indicator: occitan: 1er 1era (first)")
     573             :     {
     574           1 :         snaplogger::ordinal_indicator ind;
     575             : 
     576           1 :         ind.language(snaplogger::language_t::LANGUAGE_OCCITAN);
     577             : 
     578           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     579           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     580           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     581           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA8r"));
     582             : 
     583           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     584           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     585           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     586           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA8r"));
     587             : 
     588           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     589           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     590           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     591           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA8ra"));
     592             : 
     593           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     594           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     595           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     596           1 :         CATCH_REQUIRE(ind.indicator(1) == std::string("\xC3\xA8ra"));
     597             :     }
     598             :     CATCH_END_SECTION()
     599             : 
     600           6 :     CATCH_START_SECTION("ordinal indicator: occitan: 2nd 2nda (second)")
     601             :     {
     602           1 :         snaplogger::ordinal_indicator ind;
     603             : 
     604           1 :         ind.language(snaplogger::language_t::LANGUAGE_OCCITAN);
     605             : 
     606           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     607           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     608           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     609           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
     610             : 
     611           1 :         ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     612           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     613           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     614           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nd"));
     615             : 
     616           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     617           1 :         ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     618           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     619           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nda"));
     620             : 
     621           1 :         ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     622           1 :         ind.number(snaplogger::number_t::NUMBER_PLURAL);
     623           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     624           1 :         CATCH_REQUIRE(ind.indicator(2) == std::string("nda"));
     625             :     }
     626             :     CATCH_END_SECTION()
     627             : 
     628           6 :     CATCH_START_SECTION("ordinal indicator: Nen Nena")
     629             :     {
     630           1 :         snaplogger::ordinal_indicator ind;
     631             : 
     632           1 :         ind.language(snaplogger::language_t::LANGUAGE_OCCITAN);
     633             : 
     634         998 :         for(int n(3); n < 1'000; ++n)
     635             :         {
     636         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     637         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     638         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     639         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("en"));
     640             : 
     641         997 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     642         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     643         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     644         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("en"));
     645             : 
     646         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     647         997 :             ind.number(snaplogger::number_t::NUMBER_SINGULAR);
     648         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     649         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("ena"));
     650             : 
     651         997 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     652         997 :             ind.number(snaplogger::number_t::NUMBER_PLURAL);
     653         997 :             ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_FORMAL);
     654         997 :             CATCH_REQUIRE(ind.indicator(n) == std::string("ena"));
     655             :         }
     656             :     }
     657             :     CATCH_END_SECTION()
     658           3 : }
     659             : 
     660             : 
     661             : 
     662           3 : CATCH_TEST_CASE("ordinal_indicator_russian", "[ordinal_indicator]")
     663             : {
     664           2 :     CATCH_START_SECTION("ordinal indicator: singular plural neutral in russian")
     665             :     {
     666           1 :         snaplogger::ordinal_indicator ind;
     667             : 
     668           1 :         ind.language(snaplogger::language_t::LANGUAGE_RUSSIAN);
     669             : 
     670           3 :         for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR);
     671           3 :             number <= snaplogger::number_t::NUMBER_PLURAL;
     672           2 :             number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1))
     673             :         {
     674           2 :             ind.number(number);
     675             : 
     676           2 :             ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     677          22 :             for(int n(1); n <= 10; ++n)
     678             :             {
     679          20 :                 CATCH_REQUIRE(ind.indicator(n) == std::string("-\xD0\xB9"));
     680             :             }
     681             : 
     682           2 :             ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     683          22 :             for(int n(1); n <= 10; ++n)
     684             :             {
     685          20 :                 CATCH_REQUIRE(ind.indicator(n) == std::string("-\xD1\x8F"));
     686             :             }
     687             : 
     688           2 :             ind.gender(snaplogger::gender_t::GENDER_NEUTRAL);
     689          22 :             for(int n(1); n <= 10; ++n)
     690             :             {
     691          20 :                 CATCH_REQUIRE(ind.indicator(n) == std::string("-\xD0\xB5"));
     692             :             }
     693             :         }
     694             :     }
     695             :     CATCH_END_SECTION()
     696           1 : }
     697             : 
     698             : 
     699           3 : CATCH_TEST_CASE("ordinal_indicator_period", "[ordinal_indicator]")
     700             : {
     701           2 :     CATCH_START_SECTION("ordinal indicator: languages using a period")
     702             :     {
     703           1 :         snaplogger::ordinal_indicator ind;
     704             : 
     705           1 :         snaplogger::language_t lang[] = {
     706             :             snaplogger::language_t::LANGUAGE_BASQUE,
     707             :             snaplogger::language_t::LANGUAGE_BOSNIAN,
     708             :             snaplogger::language_t::LANGUAGE_CROATIAN,
     709             :             snaplogger::language_t::LANGUAGE_CZECH,
     710             :             snaplogger::language_t::LANGUAGE_FAROESE,
     711             :             snaplogger::language_t::LANGUAGE_FINNISH,
     712             :             snaplogger::language_t::LANGUAGE_GERMAN,
     713             :             snaplogger::language_t::LANGUAGE_ICELANDIC,
     714             :             snaplogger::language_t::LANGUAGE_LATVIAN,
     715             :             snaplogger::language_t::LANGUAGE_MONTENEGRIN,
     716             :             snaplogger::language_t::LANGUAGE_NORWEGIAN,
     717             :             snaplogger::language_t::LANGUAGE_SERBIAN,
     718             :             snaplogger::language_t::LANGUAGE_SLOVAK,
     719             :             snaplogger::language_t::LANGUAGE_SLOVENE,
     720             :             snaplogger::language_t::LANGUAGE_TURKISH,
     721             :         };
     722             : 
     723          16 :         for(auto l : lang)
     724             :         {
     725          15 :             ind.language(l);
     726             : 
     727          45 :             for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR);
     728          45 :                 number <= snaplogger::number_t::NUMBER_PLURAL;
     729          30 :                 number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1))
     730             :             {
     731         120 :                 for(snaplogger::gender_t gender(snaplogger::gender_t::GENDER_MASCULINE);
     732         120 :                     gender <= snaplogger::gender_t::GENDER_NEUTRAL;
     733          90 :                     gender = static_cast<snaplogger::gender_t>(static_cast<int>(gender) + 1))
     734             :                 {
     735          90 :                     ind.number(number);
     736          90 :                     ind.gender(gender);
     737             : 
     738       90090 :                     for(int n(1); n <= 1'000; ++n)
     739             :                     {
     740       90000 :                         CATCH_REQUIRE(ind.indicator(n) == std::string("."));
     741             :                     }
     742             :                 }
     743             :             }
     744             :         }
     745             :     }
     746             :     CATCH_END_SECTION()
     747           1 : }
     748             : 
     749             : 
     750           4 : CATCH_TEST_CASE("ordinal_indicator_other_latin", "[ordinal_indicator]")
     751             : {
     752           4 :     CATCH_START_SECTION("ordinal indicator: other latin languages")
     753             :     {
     754           1 :         snaplogger::ordinal_indicator ind;
     755             : 
     756           1 :         snaplogger::language_t lang[] = {
     757             :             snaplogger::language_t::LANGUAGE_SPANISH,
     758             :             snaplogger::language_t::LANGUAGE_PORTUGUESE,
     759             :             snaplogger::language_t::LANGUAGE_ITALIAN,
     760             :             snaplogger::language_t::LANGUAGE_GALICIAN,
     761             :         };
     762             : 
     763           5 :         for(auto l : lang)
     764             :         {
     765           4 :             ind.language(l);
     766             : 
     767          12 :             for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR);
     768          12 :                 number <= snaplogger::number_t::NUMBER_PLURAL;
     769           8 :                 number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1))
     770             :             {
     771           8 :                 ind.number(number);
     772             : 
     773           8 :                 ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     774          88 :                 for(int n(1); n <= 10; ++n)
     775             :                 {
     776          80 :                     CATCH_REQUIRE(ind.indicator(n) == std::string("\xC2\xBA"));
     777             :                 }
     778             : 
     779           8 :                 ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     780          88 :                 for(int n(1); n <= 10; ++n)
     781             :                 {
     782          80 :                     CATCH_REQUIRE(ind.indicator(n) == std::string("\xC2\xAA"));
     783             :                 }
     784             : 
     785           8 :                 ind.gender(snaplogger::gender_t::GENDER_NEUTRAL);
     786          88 :                 for(int n(1); n <= 10; ++n)
     787             :                 {
     788          80 :                     CATCH_REQUIRE(ind.indicator(n) == std::string());
     789             :                 }
     790             :             }
     791             :         }
     792             :     }
     793             :     CATCH_END_SECTION()
     794             : 
     795           4 :     CATCH_START_SECTION("ordinal indicator: spanish/portuguese secondary")
     796             :     {
     797           1 :         snaplogger::ordinal_indicator ind;
     798             : 
     799           1 :         ind.secondary_form(snaplogger::secondary_form_t::SECONDARY_FORM_ONE);
     800             : 
     801           1 :         snaplogger::language_t lang[] = {
     802             :             snaplogger::language_t::LANGUAGE_SPANISH,
     803             :             snaplogger::language_t::LANGUAGE_PORTUGUESE,
     804             :         };
     805             : 
     806           3 :         for(auto l : lang)
     807             :         {
     808           2 :             ind.language(l);
     809             : 
     810           6 :             for(snaplogger::number_t number(snaplogger::number_t::NUMBER_SINGULAR);
     811           6 :                 number <= snaplogger::number_t::NUMBER_PLURAL;
     812           4 :                 number = static_cast<snaplogger::number_t>(static_cast<int>(number) + 1))
     813             :             {
     814           4 :                 ind.number(number);
     815             : 
     816           4 :                 ind.gender(snaplogger::gender_t::GENDER_MASCULINE);
     817          44 :                 for(int n(1); n <= 10; ++n)
     818             :                 {
     819          40 :                     CATCH_REQUIRE(ind.indicator(n) == std::string(".\xC2\xBA"));
     820             :                 }
     821             : 
     822           4 :                 ind.gender(snaplogger::gender_t::GENDER_FEMININE);
     823          44 :                 for(int n(1); n <= 10; ++n)
     824             :                 {
     825          40 :                     CATCH_REQUIRE(ind.indicator(n) == std::string(".\xC2\xAA"));
     826             :                 }
     827             : 
     828           4 :                 ind.gender(snaplogger::gender_t::GENDER_NEUTRAL);
     829          44 :                 for(int n(1); n <= 10; ++n)
     830             :                 {
     831          40 :                     CATCH_REQUIRE(ind.indicator(n) == std::string());
     832             :                 }
     833             :             }
     834             :         }
     835             :     }
     836             :     CATCH_END_SECTION()
     837           2 : }
     838             : 
     839             : 
     840           3 : CATCH_TEST_CASE("ordinal_indicator_error", "[ordinal_indicator][error]")
     841             : {
     842           2 :     CATCH_START_SECTION("ordinal indicator: ")
     843             :     {
     844           1 :         snaplogger::ordinal_indicator ind;
     845             : 
     846        1002 :         for(int n(-1'000); n <= 0; ++n)
     847             :         {
     848        1001 :             CATCH_REQUIRE(ind.indicator(n) == std::string());
     849             :         }
     850             :     }
     851             :     CATCH_END_SECTION()
     852           7 : }
     853             : 
     854             : 
     855             : 
     856             : 
     857             : // vim: ts=4 sw=4 et

Generated by: LCOV version 1.13