Skip to content

Commit decd504

Browse files
Merge pull request #2050 from GiacomoPope/fq_default_ctx_randtest
Introduce `fq_default_ctx_init_randtest()`
2 parents 3311717 + 009a93f commit decd504

File tree

4 files changed

+56
-3
lines changed

4 files changed

+56
-3
lines changed

doc/source/fq_default.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,10 @@ Context Management
104104

105105
Prints the context information to ``stdout``.
106106

107-
.. function:: void fq_default_ctx_randtest(fq_default_ctx_t ctx)
107+
.. function:: void fq_default_ctx_init_randtest(fq_default_ctx_t ctx, flint_rand_t state)
108108

109-
Initializes ``ctx`` to a random finite field. Assumes that
110-
``fq_default_ctx_init`` has not been called on ``ctx`` already.
109+
Initializes ``ctx`` to a random finite field using one of the five internal representations.
110+
Assumes that ``fq_default_ctx_init`` has not been called on ``ctx`` already.
111111

112112
.. function:: void fq_default_get_coeff_fmpz(fmpz_t c, fq_default_t op, slong n, const fq_default_ctx_t ctx)
113113

src/fq_default.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ int fq_default_ctx_fprint(FILE * file, const fq_default_ctx_t ctx);
229229
#endif
230230

231231
void fq_default_ctx_print(const fq_default_ctx_t ctx);
232+
void fq_default_ctx_init_randtest(fq_default_ctx_t ctx, flint_rand_t state);
232233

233234
/* Memory management *********************************************************/
234235

src/fq_default/ctx.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,43 @@ void fq_default_ctx_modulus(fmpz_mod_poly_t p, const fq_default_ctx_t ctx)
199199
fmpz_mod_poly_set(p, FQ_DEFAULT_CTX_FQ(ctx)->modulus, mod);
200200
}
201201
}
202+
203+
/* Create a random fq_default_ctx picked from the five internal representations */
204+
void fq_default_ctx_init_randtest(fq_default_ctx_t ctx, flint_rand_t state)
205+
{
206+
fmpz_t prime;
207+
slong deg;
208+
209+
/* Select a context type [1,...,5] */
210+
int ctx_type = 1 + n_randint(state, 5);
211+
switch (ctx_type)
212+
{
213+
/* Create GF(p^d) for FQ_ZECH context */
214+
case FQ_DEFAULT_FQ_ZECH:
215+
fmpz_randprime(prime, state, 2 + n_randint(state, 3), 1);
216+
deg = 1 + n_randint(state, 3);
217+
break;
218+
/* Create GF(p^d) for FQ_NMOD context */
219+
case FQ_DEFAULT_FQ_NMOD:
220+
fmpz_randprime(prime, state, 2 + n_randint(state, 29), 1);
221+
deg = 1 + n_randint(state, 15);
222+
break;
223+
/* Create GF(p^d) for FQ context */
224+
case FQ_DEFAULT_FQ:
225+
fmpz_randprime(prime, state, 2 + n_randint(state, 62), 1);
226+
deg = 1 + n_randint(state, 7);
227+
break;
228+
/* Create GF(p) for NMOD context */
229+
case FQ_DEFAULT_NMOD:
230+
fmpz_randprime(prime, state, 2 + n_randint(state, 29), 1);
231+
deg = 1;
232+
break;
233+
/* Create GF(p) for FMPZ_MOD context */
234+
case FQ_DEFAULT_FMPZ_MOD:
235+
fmpz_randprime(prime, state, 2 + n_randint(state, 62), 1);
236+
deg = 1;
237+
break;
238+
default: FLINT_UNREACHABLE;
239+
}
240+
fq_default_ctx_init_type(ctx, prime, deg, "a", ctx_type);
241+
}

src/fq_default/test/t-init.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,17 @@ TEST_FUNCTION_START(fq_default_init, state)
8181
fmpz_clear(p);
8282
}
8383

84+
for (i = 0; i < 100 * flint_test_multiplier(); i++)
85+
{
86+
fq_default_ctx_t ctx;
87+
fq_default_t fq;
88+
89+
fq_default_ctx_init_randtest(ctx, state);
90+
fq_default_init(fq, ctx);
91+
fq_default_randtest(fq, state, ctx);
92+
fq_default_clear(fq, ctx);
93+
fq_default_ctx_clear(ctx);
94+
}
95+
8496
TEST_FUNCTION_END(state);
8597
}

0 commit comments

Comments
 (0)