diff options
author | Niels M?ller <nisse@lysator.liu.se> | 2013-01-21 21:55:42 +0100 |
---|---|---|
committer | Niels M?ller <nisse@lysator.liu.se> | 2013-01-21 21:55:42 +0100 |
commit | ae358071c7cf859629d1a398e725b3deeb05cf71 (patch) | |
tree | 5fcf16f46e47b301b5d546ae6e8646b4d84fbf9b /mini-gmp | |
parent | 21576cc7a2dafa8d7c77fd6026b8e21ac8a54c37 (diff) | |
download | gmp-ae358071c7cf859629d1a398e725b3deeb05cf71.tar.gz |
mini-gmp: Test mpz_out_str.
Diffstat (limited to 'mini-gmp')
-rw-r--r-- | mini-gmp/tests/t-str.c | 44 |
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)) |