1 /*=============================================================================
2
3 This file is part of Antic.
4
5 Antic is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9
10 =============================================================================*/
11 /******************************************************************************
12
13 Copyright (C) 2014 William Hart
14 2020 Julian Rüth
15
16 ******************************************************************************/
17
18 #include <stdio.h>
19 #include "nf.h"
20 #include "nf_elem.h"
21
22 int
main(void)23 main(void)
24 {
25 int i, result;
26 flint_rand_t state;
27
28 flint_printf("inv....");
29 fflush(stdout);
30
31 flint_randinit(state);
32
33 /* test a*^-1 = 1 */
34 for (i = 0; i < 10*antic_test_multiplier(); i++)
35 {
36 nf_t nf;
37 nf_elem_t a, ainv, p1;
38
39 nf_init_randtest(nf, state, 25, 100);
40
41 nf_elem_init(a, nf);
42 nf_elem_init(ainv, nf);
43 nf_elem_init(p1, nf);
44
45 do {
46 nf_elem_randtest_not_zero(a, state, 100, nf);
47 } while (!_nf_elem_invertible_check(a, nf));
48
49 nf_elem_inv(ainv, a, nf);
50 nf_elem_mul(p1, ainv, a, nf);
51
52 result = (nf_elem_is_one(p1, nf));
53 if (!result)
54 {
55 printf("FAIL:\n");
56 printf("a = "); nf_elem_print_pretty(a, nf, "x"); printf("\n");
57 printf("ainv = "); nf_elem_print_pretty(ainv, nf, "x"); printf("\n");
58 printf("p1 = "); nf_elem_print_pretty(p1, nf, "x"); printf("\n");
59 abort();
60 }
61
62 nf_elem_clear(a, nf);
63 nf_elem_clear(ainv, nf);
64 nf_elem_clear(p1, nf);
65
66 nf_clear(nf);
67 }
68
69 /* test aliasing a and b */
70 for (i = 0; i < 10 * antic_test_multiplier(); i++)
71 {
72 nf_t nf;
73 nf_elem_t a, b;
74
75 nf_init_randtest(nf, state, 25, 100);
76
77 nf_elem_init(a, nf);
78 nf_elem_init(b, nf);
79
80 do {
81 nf_elem_randtest_not_zero(b, state, 100, nf);
82 } while (!_nf_elem_invertible_check(b, nf));
83
84 nf_elem_inv(a, b, nf);
85 nf_elem_inv(b, b, nf);
86
87 result = (nf_elem_equal(a, b, nf));
88 if (!result)
89 {
90 printf("FAIL:\n");
91 printf("a = "); nf_elem_print_pretty(a, nf, "x"); printf("\n");
92 printf("b = "); nf_elem_print_pretty(b, nf, "x"); printf("\n");
93 abort();
94 }
95
96 nf_elem_clear(a, nf);
97 nf_elem_clear(b, nf);
98
99 nf_clear(nf);
100 }
101
102 flint_randclear(state);
103 flint_cleanup();
104 flint_printf("PASS\n");
105 return 0;
106 }
107