summaryrefslogtreecommitdiff
path: root/tests/float/float_struct_e_fp30.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/float/float_struct_e_fp30.py')
-rw-r--r--tests/float/float_struct_e_fp30.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/float/float_struct_e_fp30.py b/tests/float/float_struct_e_fp30.py
new file mode 100644
index 000000000..6ef84ca06
--- /dev/null
+++ b/tests/float/float_struct_e_fp30.py
@@ -0,0 +1,43 @@
+# Test struct pack/unpack with 'e' typecode.
+
+try:
+ import struct
+except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+test_values = (
+ 1e-7,
+ 2e-7,
+ 1e-6,
+ 1e-5,
+ 1e-4,
+ 1e-3,
+ 1e-2,
+ 0.1,
+ 0,
+ 1,
+ 2,
+ 4,
+ 8,
+ 10,
+ 100,
+ 1e3,
+ 1e4,
+ 6e4,
+ float("inf"),
+)
+
+for j in test_values:
+ for i in (j, -j):
+ x = struct.pack("<e", i)
+ v = struct.unpack("<e", x)[0]
+ print("%.7f %s %.5f %s" % (i, x, v, i == v))
+
+# In CPython, packing a float that doesn't fit into a half-float raises OverflowError.
+# But in MicroPython it does not, but rather stores the value as inf.
+# This test is here for coverage.
+try:
+ struct.pack("e", 1e15)
+except OverflowError:
+ pass