summaryrefslogtreecommitdiffstatshomepage
path: root/tests/float/string_format_modulo2_intbig.py
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-03-07 00:13:36 +0100
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-03-07 00:13:36 +0100
commit88ffe0d5cc697aea61cee950e6388ef9419df7f4 (patch)
treea2282093bed0838f348214893631d2ec1a7415f9 /tests/float/string_format_modulo2_intbig.py
parent320099aab931ba7c2657671c069781a4ac853151 (diff)
downloadmicropython-88ffe0d5cc697aea61cee950e6388ef9419df7f4.tar.gz
micropython-88ffe0d5cc697aea61cee950e6388ef9419df7f4.zip
tests/string_format_modulo2: Split off intbig test.
Diffstat (limited to 'tests/float/string_format_modulo2_intbig.py')
-rw-r--r--tests/float/string_format_modulo2_intbig.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/float/string_format_modulo2_intbig.py b/tests/float/string_format_modulo2_intbig.py
new file mode 100644
index 0000000000..9992ba65d9
--- /dev/null
+++ b/tests/float/string_format_modulo2_intbig.py
@@ -0,0 +1,21 @@
+# test formatting floats with large precision, that it doesn't overflow the buffer
+
+def test(num, num_str):
+ if num == float('inf') or num == 0.0 and num_str != '0.0':
+ # skip numbers that overflow or underflow the FP precision
+ return
+ for kind in ('e', 'f', 'g'):
+ # check precision either side of the size of the buffer (32 bytes)
+ for prec in range(23, 36, 2):
+ fmt = '%.' + '%d' % prec + kind
+ s = fmt % num
+ check = abs(float(s) - num)
+ if num > 1:
+ check /= num
+ if check > 1e-6:
+ print('FAIL', num_str, fmt, s, len(s), check)
+
+# check most powers of 10, making sure to include exponents with 3 digits
+for e in range(-101, 102):
+ num = pow(10, e)
+ test(num, '1e%d' % e)