t-cmp_si.c
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:3k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. /* Test mpq_cmp_si.
  2. Copyright 2001 Free Software Foundation, Inc.
  3. This file is part of the GNU MP Library.
  4. The GNU MP Library is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU Lesser General Public License as published by
  6. the Free Software Foundation; either version 3 of the License, or (at your
  7. option) any later version.
  8. The GNU MP Library is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  11. License for more details.
  12. You should have received a copy of the GNU Lesser General Public License
  13. along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <limits.h>
  17. #include "gmp.h"
  18. #include "gmp-impl.h"
  19. #include "tests.h"
  20. #define SGN(x)   ((x)<0 ? -1 : (x) != 0)
  21. void
  22. check_data (void)
  23. {
  24.   static const struct {
  25.     const char     *q;
  26.     long           n;
  27.     unsigned long  d;
  28.     int            want;
  29.   } data[] = {
  30.     { "0", 0, 1, 0 },
  31.     { "0", 0, 123, 0 },
  32.     { "0", 0, ULONG_MAX, 0 },
  33.     { "1", 0, 1, 1 },
  34.     { "1", 0, 123, 1 },
  35.     { "1", 0, ULONG_MAX, 1 },
  36.     { "-1", 0, 1, -1 },
  37.     { "-1", 0, 123, -1 },
  38.     { "-1", 0, ULONG_MAX, -1 },
  39.     { "123", 123, 1, 0 },
  40.     { "124", 123, 1, 1 },
  41.     { "122", 123, 1, -1 },
  42.     { "-123", 123, 1, -1 },
  43.     { "-124", 123, 1, -1 },
  44.     { "-122", 123, 1, -1 },
  45.     { "123", -123, 1, 1 },
  46.     { "124", -123, 1, 1 },
  47.     { "122", -123, 1, 1 },
  48.     { "-123", -123, 1, 0 },
  49.     { "-124", -123, 1, -1 },
  50.     { "-122", -123, 1, 1 },
  51.     { "5/7", 3,4, -1 },
  52.     { "5/7", -3,4, 1 },
  53.     { "-5/7", 3,4, -1 },
  54.     { "-5/7", -3,4, 1 },
  55.   };
  56.   mpq_t  q;
  57.   int    i, got;
  58.   mpq_init (q);
  59.   for (i = 0; i < numberof (data); i++)
  60.     {
  61.       mpq_set_str_or_abort (q, data[i].q, 0);
  62.       MPQ_CHECK_FORMAT (q);
  63.       got = mpq_cmp_si (q, data[i].n, data[i].d);
  64.       if (SGN(got) != data[i].want)
  65.         {
  66.           printf ("mpq_cmp_si wrongn");
  67.         error:
  68.           mpq_trace ("  q", q);
  69.           printf ("  n=%ldn", data[i].n);
  70.           printf ("  d=%lun", data[i].d);
  71.           printf ("  got=%dn", got);
  72.           printf ("  want=%dn", data[i].want);
  73.           abort ();
  74.         }
  75.       if (data[i].n == 0)
  76.         {
  77.           got = mpq_cmp_si (q, 0L, data[i].d);
  78.           if (SGN(got) != data[i].want)
  79.             {
  80.               printf ("mpq_cmp_si wrongn");
  81.               goto error;
  82.             }
  83.         }
  84.     }
  85.   mpq_clear (q);
  86. }
  87. int
  88. main (int argc, char **argv)
  89. {
  90.   tests_start ();
  91.   check_data ();
  92.   tests_end ();
  93.   exit (0);
  94. }