summaryrefslogtreecommitdiff
path: root/mini-gmp
diff options
context:
space:
mode:
authorNiels M?ller <nisse@lysator.liu.se>2013-01-21 21:55:42 +0100
committerNiels M?ller <nisse@lysator.liu.se>2013-01-21 21:55:42 +0100
commitae358071c7cf859629d1a398e725b3deeb05cf71 (patch)
tree5fcf16f46e47b301b5d546ae6e8646b4d84fbf9b /mini-gmp
parent21576cc7a2dafa8d7c77fd6026b8e21ac8a54c37 (diff)
downloadgmp-ae358071c7cf859629d1a398e725b3deeb05cf71.tar.gz
mini-gmp: Test mpz_out_str.
Diffstat (limited to 'mini-gmp')
-rw-r--r--mini-gmp/tests/t-str.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/mini-gmp/tests/t-str.c b/mini-gmp/tests/t-str.c
index 8d7a0bca3..ed00e5283 100644
--- a/mini-gmp/tests/t-str.c
+++ b/mini-gmp/tests/t-str.c
@@ -141,6 +141,8 @@ testmain (int argc, char **argv)
mpz_t a, b;
+ FILE *tmp;
+
void (*freefunc) (void *, size_t);
mp_get_memory_functions (NULL, NULL, &freefunc);
@@ -149,6 +151,11 @@ testmain (int argc, char **argv)
mpz_init (a);
mpz_init (b);
+ tmp = tmpfile ();
+ if (!tmp)
+ fprintf (stderr,
+ "Failed to create temporary file. Skipping mpz_out_str tests.\n");
+
for (i = 0; i < COUNT; i++)
{
int base;
@@ -185,6 +192,43 @@ testmain (int argc, char **argv)
abort ();
}
+ /* Just a few tests with file i/o. */
+ if (tmp && i < 20)
+ {
+ size_t tn;
+ rewind (tmp);
+ tn = mpz_out_str (tmp, i&1 ? base: -base, a);
+ if (tn != rn)
+ {
+ fprintf (stderr, "mpz_out_str, bad return value:\n");
+ dump ("a", a);
+ fprintf (stderr, "r = %s\n", rp);
+ fprintf (stderr, " base %d, correct size %u, got %u\n",
+ base, (unsigned) rn, (unsigned)tn);
+ abort ();
+ }
+ rewind (tmp);
+ memset (bp, 0, rn);
+ tn = fread (bp, 1, rn, tmp);
+ if (tn != rn)
+ {
+ fprintf (stderr,
+ "fread failed, expected %u bytes, got only %u.\n",
+ rn, tn);
+ abort ();
+ }
+
+ if (memcmp (bp, rp, rn) != 0)
+ {
+ fprintf (stderr, "mpz_out_str failed:\n");
+ dump ("a", a);
+ fprintf (stderr, "b = %s\n", bp);
+ fprintf (stderr, " base = %d\n", base);
+ fprintf (stderr, "r = %s\n", rp);
+ abort ();
+ }
+ }
+
mpz_set_str (b, rp, base);
if (mpz_cmp (a, b))