circuitpython/tests/float
Yoctopuce dev 69ead7d98e py/parse: Add support for math module constants and float folding.
Add a new MICROPY_COMP_CONST_FLOAT feature, enabled by in mpy-cross and
when compiling with MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES.  The new
feature leverages the code of MICROPY_COMP_CONST_FOLDING to support folding
of floating point constants.

If MICROPY_COMP_MODULE_CONST is defined as well, math module constants are
made available at compile time. For example:

    _DEG_TO_GRADIANT = const(math.pi / 180)
    _INVALID_VALUE = const(math.nan)

A few corner cases had to be handled:
- The float const folding code should not fold expressions resulting into
  complex results, as the mpy parser for complex immediates has
  limitations.
- The constant generation code must distinguish between -0.0 and 0.0, which
  are different even if C consider them as ==.

This change removes previous limitations on the use of `const()`
expressions that would result in floating point number, so the test cases
of micropython/const_error have to be updated.

Additional test cases have been added to cover the new repr() code (from a
previous commit).  A few other simple test cases have been added to handle
the use of floats in `const()` expressions, but the float folding code
itself is also tested when running general float test cases, as float
expressions often get resolved at compile-time (with this change).

Signed-off-by: Yoctopuce dev <dev@yoctopuce.com>
2025-08-01 13:35:44 +10:00
..
array_construct.py tests: Replace umodule with module everywhere. 2023-06-08 17:54:24 +10:00
builtin_float_abs.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
builtin_float_hash.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
builtin_float_minmax.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
builtin_float_pow.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
builtin_float_round.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
builtin_float_round_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
bytearray_construct_endian.py tests: Replace umodule with module everywhere. 2023-06-08 17:54:24 +10:00
bytes_construct_endian.py tests: Replace umodule with module everywhere. 2023-06-08 17:54:24 +10:00
cmath_dunder.py tests/float: Skip new complex tests if complex unavailable. 2023-02-09 15:20:00 +11:00
cmath_fun.py py/obj: Fix REPR_C bias toward zero. 2025-07-24 11:07:30 +10:00
cmath_fun_special.py tests/float: Fix cmath_fun_special for MICROPY_FLOAT_IMPL_FLOAT. 2020-04-18 22:36:49 +10:00
complex1.py py/parsenum: Fix parsing complex literals with negative real part. 2025-06-10 15:41:24 +10:00
complex1_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
complex_dunder.py py/obj: Make mp_obj_get_complex_maybe call mp_obj_get_float_maybe first. 2022-07-25 16:11:26 +10:00
complex_reverse_op.py tests: Split out complex reverse-op tests to separate test file. 2020-08-29 14:12:20 +10:00
complex_special_methods.py tests: Split out complex reverse-op tests to separate test file. 2020-08-29 14:12:20 +10:00
float1.py all: Update Python formatting to latest Black version 22.1.0. 2022-02-02 16:49:55 +11:00
float2int_doubleprec_intbig.py tests/float: Use "not" instead of ~ to invert bool value. 2024-05-28 10:49:22 +10:00
float2int_fp30_intbig.py tests/float: Use "not" instead of ~ to invert bool value. 2024-05-28 10:49:22 +10:00
float2int_intbig.py tests/float: Use "not" instead of ~ to invert bool value. 2024-05-28 10:49:22 +10:00
float_array.py py/obj: Fix nan handling in object REPR_C and REPR_D. 2025-06-24 00:30:08 +10:00
float_compare.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
float_divmod.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
float_divmod_relaxed.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
float_dunder.py py/obj: Add support for __float__ and __complex__ functions. 2022-07-25 14:23:34 +10:00
float_format.py py/formatfloat: Improve accuracy of float formatting code. 2025-08-01 00:47:33 +10:00
float_format_accuracy.py py/formatfloat: Improve accuracy of float formatting code. 2025-08-01 00:47:33 +10:00
float_format_ftoe.py py/formatfloat: Format all whole-number floats exactly. 2022-07-26 22:23:47 +10:00
float_format_ftoe.py.exp py/formatfloat: Format all whole-number floats exactly. 2022-07-26 22:23:47 +10:00
float_format_ints.py py/formatfloat: Improve accuracy of float formatting code. 2025-08-01 00:47:33 +10:00
float_format_ints_doubleprec.py py/formatfloat: Use pow(10, e) instead of pos/neg_pow lookup tables. 2022-08-12 23:53:34 +10:00
float_format_ints_power10.py qemu: Rename qemu-arm port to qemu. 2024-09-06 11:08:39 +10:00
float_parse.py py/parsenum: Reduce code footprint of mp_parse_num_float. 2025-02-28 13:35:12 +11:00
float_parse_doubleprec.py py/parse: Add support for math module constants and float folding. 2025-08-01 13:35:44 +10:00
float_struct.py py/binary: Support half-float 'e' format in struct pack/unpack. 2024-03-20 14:13:49 +11:00
float_struct_e.py py/formatfloat: Improve accuracy of float formatting code. 2025-08-01 00:47:33 +10:00
float_struct_e_doubleprec.py py/formatfloat: Improve accuracy of float formatting code. 2025-08-01 00:47:33 +10:00
float_struct_e_fp30.py py/formatfloat: Improve accuracy of float formatting code. 2025-08-01 00:47:33 +10:00
inf_nan_arith.py tests/float/inf_nan_arith.py: Include -inf in argument combos. 2023-12-06 14:06:01 +11:00
int_64_float.py py/objint_longlong: Fix longlong interoperability with floats. 2025-07-29 01:14:35 +10:00
int_big_float.py all: Update Python formatting to latest Black version 22.1.0. 2022-02-02 16:49:55 +11:00
int_divzero.py all: Update Python formatting to latest Black version 22.1.0. 2022-02-02 16:49:55 +11:00
int_power.py all: Update Python formatting to latest Black version 22.1.0. 2022-02-02 16:49:55 +11:00
lexer.py tests/float: Add new lexer test to test parsing of float without prefix. 2020-03-30 13:23:05 +11:00
list_index.py tests: Rename test scripts, changing - to _ for consistency. 2014-07-05 06:14:29 +01:00
math_constants.py tests/float/math_constants.py: Test actual e and pi constant values. 2025-05-22 17:19:03 +10:00
math_constants_extra.py py/obj: Fix nan handling in object REPR_C and REPR_D. 2025-06-24 00:30:08 +10:00
math_domain.py tests/float/math_domain.py: Tweak test to also pass with obj-repr-C. 2023-09-29 12:02:21 +10:00
math_domain_python311.py tests/float: Test domain errors for more combos of args to math funcs. 2023-06-18 12:45:55 +10:00
math_domain_python311.py.exp tests/float: Test domain errors for more combos of args to math funcs. 2023-06-18 12:45:55 +10:00
math_domain_special.py tests/float: Make output of math function tests more readable. 2023-02-16 10:38:38 +11:00
math_dunder.py py/obj: Make mp_obj_get_complex_maybe call mp_obj_get_float_maybe first. 2022-07-25 16:11:26 +10:00
math_factorial_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
math_fun.py tests/float: Make output of math function tests more readable. 2023-02-16 10:38:38 +11:00
math_fun_bool.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
math_fun_int.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
math_fun_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
math_fun_special.py all: Go back to using default ruff quote style. 2025-07-24 12:48:18 +10:00
math_isclose.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
math_isclose.py.exp py/modmath: Implement math.isclose() for non-complex numbers. 2019-08-17 23:23:17 +10:00
python36.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
python36.py.exp py/lexer: Add support for underscores in numeric literals. 2018-06-12 12:17:43 +10:00
string_format.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
string_format2.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
string_format_modulo.py py/formatfloat: Use pow(10, e) instead of pos/neg_pow lookup tables. 2022-08-12 23:53:34 +10:00
string_format_modulo2.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
string_format_modulo2_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
string_format_modulo3.py py/formatfloat: Improve accuracy of float formatting code. 2025-08-01 00:47:33 +10:00
true_value.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
types.py tests: Split out those tests requiring float and import. 2014-04-17 16:21:43 +01:00