/* Test of libgmp or its mini-mpq substitute. Copyright (C) 2024-2025 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #include "macros.h" int main () { /* A simple sanity check that 2/3 + 2/3 = 4/3. */ static mp_limb_t const twobody[] = { 2 }; static mp_limb_t const threebody[] = { 3 }; static mpz_t const two = MPZ_ROINIT_N ((mp_limb_t *) twobody, 1); static mpz_t const three = MPZ_ROINIT_N ((mp_limb_t *) threebody, 1); ASSERT (mpz_fits_slong_p (two)); ASSERT (mpz_get_si (two) == 2); ASSERT (mpz_fits_slong_p (three)); ASSERT (mpz_get_si (three) == 3); mpq_t q; mpq_init (q); mpz_set (mpq_numref (q), two); mpz_set (mpq_denref (q), three); mpq_add (q, q, q); ASSERT (mpz_fits_slong_p (mpq_numref (q))); ASSERT (mpz_get_si (mpq_numref (q)) == 4); ASSERT (mpz_fits_slong_p (mpq_denref (q))); ASSERT (mpz_get_si (mpq_denref (q)) == 3); mpq_clear (q); return test_exit_status; }