summaryrefslogtreecommitdiffstatshomepage
path: root/tests/float/float_struct_e.py
blob: 403fbc5db4cde490bfdbc83fbd5c7f7c0f20fed7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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 %.15f %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