1 /*
2     Copyright (C) 2021 William Hart
3 
4     This file is part of FLINT.
5 
6     FLINT is free software: you can redistribute it and/or modify it under
7     the terms of the GNU Lesser General Public License (LGPL) as published
8     by the Free Software Foundation; either version 2.1 of the License, or
9     (at your option) any later version.  See <https://www.gnu.org/licenses/>.
10 */
11 
12 #include "fq_default.h"
13 
14 #include <stdlib.h>
15 #include <stdio.h>
16 #include <gmp.h>
17 #include "flint.h"
18 #include "nmod_poly.h"
19 #include "ulong_extras.h"
20 
21 int
main(void)22 main(void)
23 {
24     int i, result;
25     FLINT_TEST_INIT(state);
26 
27     flint_printf("get/set_fmpz_mod_poly....");
28     fflush(stdout);
29 
30     /* fq_zech range */
31     for (i = 0; i < 100 * flint_test_multiplier(); i++)
32     {
33         fq_default_ctx_t ctx;
34         fq_default_t fq1, fq2;
35 	fmpz_mod_ctx_t fctx;
36         fmpz_mod_poly_t fmod;
37 	fmpz_t p;
38 
39         fmpz_init(p);
40 
41         fmpz_set_ui(p, 3);
42 
43         fq_default_ctx_init(ctx, p, 3, "x");
44 
45         fq_default_init(fq1, ctx);
46 	fq_default_init(fq2, ctx);
47 
48 	fmpz_mod_ctx_init(fctx, p);
49 	fmpz_mod_poly_init(fmod, fctx);
50 
51         fq_default_randtest(fq1, state, ctx);
52 
53 	fq_default_get_fmpz_mod_poly(fmod, fq1, ctx);
54 	fq_default_set_fmpz_mod_poly(fq2, fmod, ctx);
55 
56         result = (fq_default_equal(fq1, fq2, ctx));
57         if (!result)
58         {
59             flint_printf("FAIL:\n");
60             fq_default_print(fq1, ctx); flint_printf("\n\n");
61             fq_default_print(fq2, ctx); flint_printf("\n\n");
62             fmpz_mod_poly_print(fmod, fctx); flint_printf("\n\n");
63             abort();
64         }
65 
66         fmpz_mod_poly_clear(fmod, fctx);
67 	fmpz_mod_ctx_clear(fctx);
68 
69 	fq_default_clear(fq1, ctx);
70         fq_default_clear(fq2, ctx);
71 
72         fq_default_ctx_clear(ctx);
73     }
74 
75     /* fq_nmod range */
76     for (i = 0; i < 100 * flint_test_multiplier(); i++)
77     {
78         fq_default_ctx_t ctx;
79         fq_default_t fq1, fq2;
80         fmpz_mod_ctx_t fctx;
81 	fmpz_mod_poly_t fmod;
82         fmpz_t p;
83 
84         fmpz_init(p);
85 
86         fmpz_set_ui(p, 3);
87 
88         fq_default_ctx_init(ctx, p, 16, "x");
89 
90         fq_default_init(fq1, ctx);
91         fq_default_init(fq2, ctx);
92 
93         fmpz_mod_ctx_init(fctx, p);
94         fmpz_mod_poly_init(fmod, fctx);
95 
96         fq_default_randtest(fq1, state, ctx);
97 
98         fq_default_get_fmpz_mod_poly(fmod, fq1, ctx);
99         fq_default_set_fmpz_mod_poly(fq2, fmod, ctx);
100 
101         result = (fq_default_equal(fq1, fq2, ctx));
102         if (!result)
103         {
104             flint_printf("FAIL:\n");
105             fq_default_print(fq1, ctx); flint_printf("\n\n");
106             fq_default_print(fq2, ctx); flint_printf("\n\n");
107             fmpz_mod_poly_print(fmod, fctx); flint_printf("\n\n");
108             abort();
109         }
110 
111         fmpz_mod_poly_clear(fmod, fctx);
112         fmpz_mod_ctx_clear(fctx);
113 
114         fq_default_clear(fq1, ctx);
115         fq_default_clear(fq2, ctx);
116 
117         fq_default_ctx_clear(ctx);
118 
119         fmpz_clear(p);
120     }
121 
122     /* fq range */
123     for (i = 0; i < 100 * flint_test_multiplier(); i++)
124     {
125         fq_default_ctx_t ctx;
126         fq_default_t fq1, fq2;
127         fmpz_mod_ctx_t fctx;
128 	fmpz_mod_poly_t fmod;
129         fmpz_t p;
130 
131         fmpz_init(p);
132 
133         fmpz_set_str(p, "73786976294838206473", 10);
134 
135 	fq_default_ctx_init(ctx, p, 1, "x");
136 
137         fq_default_init(fq1, ctx);
138         fq_default_init(fq2, ctx);
139 
140         fmpz_mod_ctx_init(fctx, p);
141         fmpz_mod_poly_init(fmod, fctx);
142 
143         fq_default_randtest(fq1, state, ctx);
144 
145         fq_default_get_fmpz_mod_poly(fmod, fq1, ctx);
146         fq_default_set_fmpz_mod_poly(fq2, fmod, ctx);
147 
148         result = (fq_default_equal(fq1, fq2, ctx));
149         if (!result)
150         {
151             flint_printf("FAIL:\n");
152             fq_default_print(fq1, ctx); flint_printf("\n\n");
153             fq_default_print(fq2, ctx); flint_printf("\n\n");
154             fmpz_mod_poly_print(fmod, fctx); flint_printf("\n\n");
155             abort();
156         }
157 
158         fmpz_mod_poly_clear(fmod, fctx);
159         fmpz_mod_ctx_clear(fctx);
160 
161         fq_default_clear(fq1, ctx);
162         fq_default_clear(fq2, ctx);
163 
164         fq_default_ctx_clear(ctx);
165 
166         fmpz_clear(p);
167     }
168 
169     FLINT_TEST_CLEANUP(state);
170 
171     flint_printf("PASS\n");
172         return 0;
173 }
174