LCOV - code coverage report
Current view: top level - buildbot/coverage/build/test/unit/util - rational_white.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 297 297 100.0 %
Date: 2026-07-20 10:34:45 Functions: 52 52 100.0 %
Branches: 354 712 49.7 %

           Branch data     Line data    Source code
       1                 :            : /******************************************************************************
       2                 :            :  * This file is part of the cvc5 project.
       3                 :            :  *
       4                 :            :  * Copyright (c) 2009-2026 by the authors listed in the file AUTHORS
       5                 :            :  * in the top-level source directory and their institutional affiliations.
       6                 :            :  * All rights reserved.  See the file COPYING in the top-level source
       7                 :            :  * directory for licensing information.
       8                 :            :  * ****************************************************************************
       9                 :            :  *
      10                 :            :  * White box testing of cvc5::Rational.
      11                 :            :  */
      12                 :            : 
      13                 :            : #include <sstream>
      14                 :            : 
      15                 :            : #include "test.h"
      16                 :            : #include "util/rational.h"
      17                 :            : 
      18                 :            : namespace cvc5::internal {
      19                 :            : namespace test {
      20                 :            : 
      21                 :            : class TestUtilWhiteRational : public TestInternal
      22                 :            : {
      23                 :            :  protected:
      24                 :            :   static const char* s_can_reduce;
      25                 :            : };
      26                 :            : 
      27                 :            : const char* TestUtilWhiteRational::s_can_reduce =
      28                 :            :     "4547897890548754897897897897890789078907890/54878902347890234";
      29                 :            : 
      30                 :          4 : TEST_F(TestUtilWhiteRational, constructors)
      31                 :            : {
      32                 :          1 :   Rational zero;  // Default constructor
      33 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(0L, zero.getNumerator().getLong());
      34 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(1L, zero.getDenominator().getLong());
      35                 :            : 
      36                 :          1 :   Rational reduced_cstring_base_10(s_can_reduce);
      37                 :          1 :   Integer tmp0("2273948945274377448948948948945394539453945");
      38                 :          1 :   Integer tmp1("27439451173945117");
      39 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduced_cstring_base_10.getNumerator(), tmp0);
      40 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduced_cstring_base_10.getDenominator(), tmp1);
      41                 :            : 
      42                 :          1 :   Rational reduced_cstring_base_16(s_can_reduce, 16);
      43                 :          1 :   Integer tmp2("405008068100961292527303019616635131091442462891556", 10);
      44                 :          1 :   Integer tmp3("24363950654420566157", 10);
      45 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(tmp2, reduced_cstring_base_16.getNumerator());
      46 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(tmp3, reduced_cstring_base_16.getDenominator());
      47                 :            : 
      48                 :          1 :   std::string stringCanReduce(s_can_reduce);
      49                 :          1 :   Rational reduced_cppstring_base_10(stringCanReduce);
      50 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduced_cppstring_base_10.getNumerator(), tmp0);
      51 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduced_cppstring_base_10.getDenominator(), tmp1);
      52                 :          1 :   Rational reduced_cppstring_base_16(stringCanReduce, 16);
      53 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(tmp2, reduced_cppstring_base_16.getNumerator());
      54 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(tmp3, reduced_cppstring_base_16.getDenominator());
      55                 :            : 
      56                 :          1 :   Rational cpy_cnstr(zero);
      57 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(0L, cpy_cnstr.getNumerator().getLong());
      58 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(1L, cpy_cnstr.getDenominator().getLong());
      59                 :            :   // Check that zero is unaffected
      60 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(0L, zero.getNumerator().getLong());
      61 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(1L, zero.getDenominator().getLong());
      62                 :            : 
      63                 :          1 :   signed int nsi = -5478, dsi = 34783;
      64                 :          1 :   unsigned int nui = 5478u, dui = 347589u;
      65                 :          1 :   signed long int nsli = 1489054690l, dsli = -347576678l;
      66                 :          1 :   unsigned long int nuli = 2434689476ul, duli = 323447523ul;
      67                 :            : 
      68                 :          1 :   Rational qsi(nsi, dsi);
      69                 :          1 :   Rational qui(nui, dui);
      70                 :          1 :   Rational qsli(nsli, dsli);
      71                 :          1 :   Rational quli(nuli, duli);
      72                 :            : 
      73 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(nsi, qsi.getNumerator().getLong());
      74 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(dsi, qsi.getDenominator().getLong());
      75                 :            : 
      76 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(nui / 33, qui.getNumerator().getUnsignedLong());
      77 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(dui / 33, qui.getDenominator().getUnsignedLong());
      78                 :            : 
      79 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(-nsli / 2, qsli.getNumerator().getLong());
      80 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(-dsli / 2, qsli.getDenominator().getLong());
      81                 :            : 
      82 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(nuli, quli.getNumerator().getUnsignedLong());
      83 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(duli, quli.getDenominator().getUnsignedLong());
      84                 :            : 
      85                 :          1 :   Integer nz("942358903458908903485");
      86                 :          1 :   Integer dz("547890579034790793457934807");
      87                 :          1 :   Rational qz(nz, dz);
      88 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(nz, qz.getNumerator());
      89 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(dz, qz.getDenominator());
      90                 :            : 
      91                 :            :   // Not sure how to catch this...
      92                 :            :   // ASSERT_THROW(Rational div_0(0,0),__gmp_exception );
      93         [ +  - ]:          1 : }
      94                 :            : 
      95                 :          4 : TEST_F(TestUtilWhiteRational, destructor)
      96                 :            : {
      97                 :          1 :   Rational* q = new Rational(s_can_reduce);
      98 [ +  - ][ +  - ]:          1 :   ASSERT_NO_THROW(delete q);
         [ +  - ][ +  - ]
                 [ -  - ]
      99                 :            : }
     100                 :            : 
     101                 :          4 : TEST_F(TestUtilWhiteRational, compare_against_zero)
     102                 :            : {
     103                 :          1 :   Rational q(0);
     104 [ +  - ][ +  - ]:          1 :   ASSERT_NO_THROW(q == 0;);
         [ +  - ][ -  - ]
     105 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(q, 0);
     106         [ +  - ]:          1 : }
     107                 :            : 
     108                 :          4 : TEST_F(TestUtilWhiteRational, operator_assign)
     109                 :            : {
     110                 :          1 :   Rational x(0, 1);
     111                 :          1 :   Rational y(78, 6);
     112                 :          1 :   Rational z(45789, 1);
     113                 :            : 
     114 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(x.getNumerator().getUnsignedLong(), 0ul);
     115 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(y.getNumerator().getUnsignedLong(), 13ul);
     116 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(z.getNumerator().getUnsignedLong(), 45789ul);
     117                 :            : 
     118                 :          1 :   x = y = z;
     119                 :            : 
     120 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(x.getNumerator().getUnsignedLong(), 45789ul);
     121 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(y.getNumerator().getUnsignedLong(), 45789ul);
     122 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(z.getNumerator().getUnsignedLong(), 45789ul);
     123                 :            : 
     124                 :          1 :   Rational a(78, 91);
     125                 :            : 
     126                 :          1 :   y = a;
     127                 :            : 
     128 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(a.getNumerator().getUnsignedLong(), 6ul);
     129 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(a.getDenominator().getUnsignedLong(), 7ul);
     130 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(y.getNumerator().getUnsignedLong(), 6ul);
     131 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(y.getDenominator().getUnsignedLong(), 7ul);
     132 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(x.getNumerator().getUnsignedLong(), 45789ul);
     133 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(z.getNumerator().getUnsignedLong(), 45789ul);
     134 [ +  - ][ +  - ]:          1 : }
                 [ +  - ]
     135                 :            : 
     136                 :          4 : TEST_F(TestUtilWhiteRational, toString)
     137                 :            : {
     138                 :          1 :   std::stringstream ss;
     139                 :          1 :   Rational large(s_can_reduce);
     140                 :          1 :   ss << large;
     141                 :          1 :   std::string res = ss.str();
     142                 :            : 
     143 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(res, large.toString());
     144 [ +  - ][ +  - ]:          1 : }
                 [ +  - ]
     145                 :            : 
     146                 :          4 : TEST_F(TestUtilWhiteRational, operator_equals)
     147                 :            : {
     148                 :          1 :   Rational a;
     149                 :          1 :   Rational b(s_can_reduce);
     150                 :          1 :   Rational c("2273948945274377448948948948945394539453945/27439451173945117");
     151                 :          1 :   Rational d(0, -237489);
     152                 :            : 
     153 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(a == a);
     154 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(a == b);
     155 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(a == c);
     156 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(a == d);
     157                 :            : 
     158 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(b == a);
     159 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(b == b);
     160 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(b == c);
     161 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(b == d);
     162                 :            : 
     163 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(c == a);
     164 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(c == b);
     165 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(c == c);
     166 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(c == d);
     167                 :            : 
     168 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(d == a);
     169 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(d == b);
     170 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(d == c);
     171 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(d == d);
     172 [ +  - ][ +  - ]:          1 : }
         [ +  - ][ +  - ]
     173                 :            : 
     174                 :          4 : TEST_F(TestUtilWhiteRational, operator_not_equals)
     175                 :            : {
     176                 :          1 :   Rational a;
     177                 :          1 :   Rational b(s_can_reduce);
     178                 :          1 :   Rational c("2273948945274377448948948948945394539453945/27439451173945117");
     179                 :          1 :   Rational d(0, -237489);
     180                 :            : 
     181 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(a != a);
     182 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(a != b);
     183 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(a != c);
     184 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(a != d);
     185                 :            : 
     186 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(b != a);
     187 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(b != b);
     188 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(b != c);
     189 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(b != d);
     190                 :            : 
     191 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(c != a);
     192 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(c != b);
     193 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(c != c);
     194 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(c != d);
     195                 :            : 
     196 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(d != a);
     197 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(d != b);
     198 [ -  + ][ +  - ]:          1 :   ASSERT_TRUE(d != c);
     199 [ -  + ][ +  - ]:          1 :   ASSERT_FALSE(d != d);
     200 [ +  - ][ +  - ]:          1 : }
         [ +  - ][ +  - ]
     201                 :            : 
     202                 :          4 : TEST_F(TestUtilWhiteRational, operator_subtract)
     203                 :            : {
     204                 :          1 :   Rational x(3, 2);
     205                 :          1 :   Rational y(7, 8);
     206                 :          1 :   Rational z(-3, 33);
     207                 :            : 
     208                 :          1 :   Rational act0 = x - x;
     209                 :          1 :   Rational act1 = x - y;
     210                 :          1 :   Rational act2 = x - z;
     211                 :          1 :   Rational exp0(0, 1);
     212                 :          1 :   Rational exp1(5, 8);
     213                 :          1 :   Rational exp2(35, 22);
     214                 :            : 
     215                 :          1 :   Rational act3 = y - x;
     216                 :          1 :   Rational act4 = y - y;
     217                 :          1 :   Rational act5 = y - z;
     218                 :          1 :   Rational exp3(-5, 8);
     219                 :          1 :   Rational exp4(0, 1);
     220                 :          1 :   Rational exp5(85, 88);
     221                 :            : 
     222                 :          1 :   Rational act6 = z - x;
     223                 :          1 :   Rational act7 = z - y;
     224                 :          1 :   Rational act8 = z - z;
     225                 :          1 :   Rational exp6(-35, 22);
     226                 :          1 :   Rational exp7(-85, 88);
     227                 :          1 :   Rational exp8(0, 1);
     228                 :            : 
     229 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act0, exp0);
     230 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act1, exp1);
     231 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act2, exp2);
     232 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act3, exp3);
     233 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act4, exp4);
     234 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act5, exp5);
     235 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act6, exp6);
     236 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act7, exp7);
     237 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act8, exp8);
     238 [ +  - ][ +  - ]:          1 : }
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     239                 :            : 
     240                 :          4 : TEST_F(TestUtilWhiteRational, operator_add)
     241                 :            : {
     242                 :          1 :   Rational x(3, 2);
     243                 :          1 :   Rational y(7, 8);
     244                 :          1 :   Rational z(-3, 33);
     245                 :            : 
     246                 :          1 :   Rational act0 = x + x;
     247                 :          1 :   Rational act1 = x + y;
     248                 :          1 :   Rational act2 = x + z;
     249                 :          1 :   Rational exp0(3, 1);
     250                 :          1 :   Rational exp1(19, 8);
     251                 :          1 :   Rational exp2(31, 22);
     252                 :            : 
     253                 :          1 :   Rational act3 = y + x;
     254                 :          1 :   Rational act4 = y + y;
     255                 :          1 :   Rational act5 = y + z;
     256                 :          1 :   Rational exp3(19, 8);
     257                 :          1 :   Rational exp4(7, 4);
     258                 :          1 :   Rational exp5(69, 88);
     259                 :            : 
     260                 :          1 :   Rational act6 = z + x;
     261                 :          1 :   Rational act7 = z + y;
     262                 :          1 :   Rational act8 = z + z;
     263                 :          1 :   Rational exp6(31, 22);
     264                 :          1 :   Rational exp7(69, 88);
     265                 :          1 :   Rational exp8(-2, 11);
     266                 :            : 
     267 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act0, exp0);
     268 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act1, exp1);
     269 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act2, exp2);
     270 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act3, exp3);
     271 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act4, exp4);
     272 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act5, exp5);
     273 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act6, exp6);
     274 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act7, exp7);
     275 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act8, exp8);
     276 [ +  - ][ +  - ]:          1 : }
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     277                 :            : 
     278                 :          4 : TEST_F(TestUtilWhiteRational, operator_mult)
     279                 :            : {
     280                 :          1 :   Rational x(3, 2);
     281                 :          1 :   Rational y(7, 8);
     282                 :          1 :   Rational z(-3, 33);
     283                 :            : 
     284                 :          1 :   Rational act0 = x * x;
     285                 :          1 :   Rational act1 = x * y;
     286                 :          1 :   Rational act2 = x * z;
     287                 :          1 :   Rational exp0(9, 4);
     288                 :          1 :   Rational exp1(21, 16);
     289                 :          1 :   Rational exp2(-3, 22);
     290                 :            : 
     291                 :          1 :   Rational act3 = y * x;
     292                 :          1 :   Rational act4 = y * y;
     293                 :          1 :   Rational act5 = y * z;
     294                 :          1 :   Rational exp3(21, 16);
     295                 :          1 :   Rational exp4(49, 64);
     296                 :          1 :   Rational exp5(-7, 88);
     297                 :            : 
     298                 :          1 :   Rational act6 = z * x;
     299                 :          1 :   Rational act7 = z * y;
     300                 :          1 :   Rational act8 = z * z;
     301                 :          1 :   Rational exp6(-3, 22);
     302                 :          1 :   Rational exp7(-7, 88);
     303                 :          1 :   Rational exp8(1, 121);
     304                 :            : 
     305 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act0, exp0);
     306 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act1, exp1);
     307 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act2, exp2);
     308 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act3, exp3);
     309 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act4, exp4);
     310 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act5, exp5);
     311 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act6, exp6);
     312 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act7, exp7);
     313 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act8, exp8);
     314 [ +  - ][ +  - ]:          1 : }
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     315                 :            : 
     316                 :          4 : TEST_F(TestUtilWhiteRational, operator_div)
     317                 :            : {
     318                 :          1 :   Rational x(3, 2);
     319                 :          1 :   Rational y(7, 8);
     320                 :          1 :   Rational z(-3, 33);
     321                 :            : 
     322                 :          1 :   Rational act0 = x / x;
     323                 :          1 :   Rational act1 = x / y;
     324                 :          1 :   Rational act2 = x / z;
     325                 :          1 :   Rational exp0(1, 1);
     326                 :          1 :   Rational exp1(12, 7);
     327                 :          1 :   Rational exp2(-33, 2);
     328                 :            : 
     329                 :          1 :   Rational act3 = y / x;
     330                 :          1 :   Rational act4 = y / y;
     331                 :          1 :   Rational act5 = y / z;
     332                 :          1 :   Rational exp3(7, 12);
     333                 :          1 :   Rational exp4(1, 1);
     334                 :          1 :   Rational exp5(-77, 8);
     335                 :            : 
     336                 :          1 :   Rational act6 = z / x;
     337                 :          1 :   Rational act7 = z / y;
     338                 :          1 :   Rational act8 = z / z;
     339                 :          1 :   Rational exp6(-2, 33);
     340                 :          1 :   Rational exp7(-8, 77);
     341                 :          1 :   Rational exp8(1, 1);
     342                 :            : 
     343 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act0, exp0);
     344 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act1, exp1);
     345 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act2, exp2);
     346 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act3, exp3);
     347 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act4, exp4);
     348 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act5, exp5);
     349 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act6, exp6);
     350 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act7, exp7);
     351 [ -  + ][ +  - ]:          1 :   ASSERT_EQ(act8, exp8);
     352 [ +  - ][ +  - ]:          1 : }
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     353                 :            : 
     354                 :          4 : TEST_F(TestUtilWhiteRational, reduction_at_construction_time)
     355                 :            : {
     356                 :          1 :   Rational reduce0(s_can_reduce);
     357                 :          1 :   Integer num0("2273948945274377448948948948945394539453945");
     358                 :          1 :   Integer den0("27439451173945117");
     359                 :            : 
     360 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce0.getNumerator(), num0);
     361 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce0.getDenominator(), den0);
     362                 :            : 
     363                 :          1 :   Rational reduce1(0, 454789);
     364                 :          1 :   Integer num1(0);
     365                 :          1 :   Integer den1(1);
     366                 :            : 
     367 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce1.getNumerator(), num1);
     368 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce1.getDenominator(), den1);
     369                 :            : 
     370                 :          1 :   Rational reduce2(0, -454789);
     371                 :          1 :   Integer num2(0);
     372                 :          1 :   Integer den2(1);
     373                 :            : 
     374 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce2.getNumerator(), num2);
     375 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce2.getDenominator(), den2);
     376                 :            : 
     377                 :          1 :   Rational reduce3(822898902L, 273L);
     378                 :          1 :   Integer num3(39185662L);
     379                 :          1 :   Integer den3(13);
     380                 :            : 
     381 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce2.getNumerator(), num2);
     382 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce2.getDenominator(), den2);
     383                 :            : 
     384                 :          1 :   Rational reduce4(822898902L, -273L);
     385                 :          1 :   Integer num4(-39185662L);
     386                 :          1 :   Integer den4(13);
     387                 :            : 
     388 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce4.getNumerator(), num4);
     389 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce4.getDenominator(), den4);
     390                 :            : 
     391                 :          1 :   Rational reduce5(-822898902L, 273L);
     392                 :          1 :   Integer num5(-39185662L);
     393                 :          1 :   Integer den5(13);
     394                 :            : 
     395 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce5.getNumerator(), num5);
     396 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce5.getDenominator(), den5);
     397                 :            : 
     398                 :          1 :   Rational reduce6(-822898902L, -273L);
     399                 :          1 :   Integer num6(39185662L);
     400                 :          1 :   Integer den6(13);
     401                 :            : 
     402 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce6.getNumerator(), num6);
     403 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(reduce6.getDenominator(), den6);
     404 [ +  - ][ +  - ]:          1 : }
                 [ +  - ]
     405                 :            : 
     406                 :            : /** Make sure we can handle: http://www.ginac.de/CLN/cln_3.html#SEC15 */
     407                 :          4 : TEST_F(TestUtilWhiteRational, constructrion)
     408                 :            : {
     409                 :          1 :   const int32_t i = (1 << 29) + 1;
     410                 :          1 :   const uint32_t u = (1 << 29) + 1;
     411 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(Rational(i), Rational(i));
     412 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(Rational(u), Rational(u));
     413                 :            : }
     414                 :            : }  // namespace test
     415                 :            : }  // namespace cvc5::internal

Generated by: LCOV version 1.14