1try:
2    import ustruct as struct
3except:
4    try:
5        import struct
6    except ImportError:
7        print("SKIP")
8        raise SystemExit
9
10print(struct.calcsize("<bI"))
11print(struct.unpack("<bI", b"\x80\0\0\x01\0"))
12print(struct.calcsize(">bI"))
13print(struct.unpack(">bI", b"\x80\0\0\x01\0"))
14
15# 32-bit little-endian specific
16#print(struct.unpack("bI", b"\x80\xaa\x55\xaa\0\0\x01\0"))
17
18print(struct.pack("<l", 1))
19print(struct.pack(">l", 1))
20print(struct.pack("<i", 1))
21print(struct.pack(">i", 1))
22print(struct.pack("<h", 1))
23print(struct.pack(">h", 1))
24print(struct.pack("<b", 1))
25print(struct.pack(">b", 1))
26
27print(struct.pack("<bI", -128, 256))
28print(struct.pack(">bI", -128, 256))
29
30print(struct.calcsize("100sI"))
31print(struct.calcsize("97sI"))
32print(struct.unpack("<6sH", b"foo\0\0\0\x12\x34"))
33print(struct.pack("<6sH", b"foo", 10000))
34
35s = struct.pack("BHBI", 10, 100, 200, 300)
36v = struct.unpack("BHBI", s)
37print(v == (10, 100, 200, 300))
38
39# network byte order
40print(struct.pack('!i', 123))
41
42# check that we get an error if the buffer is too small
43try:
44    struct.unpack('I', b'\x00\x00\x00')
45except:
46    print('struct.error')
47
48# first arg must be a string
49try:
50    struct.pack(1, 2)
51except TypeError:
52    print('TypeError')
53
54# make sure that unknown types are detected
55try:
56    struct.pack("z", 1)
57except:
58    print("Unknown type")
59
60# Initially repitition counters were supported only for strings,
61# but later were implemented for all.
62print(struct.unpack("<3B2h", b"foo\x12\x34\xff\xff"))
63print(struct.pack("<3B", 1, 2, 3))
64
65# pack_into
66buf = bytearray(b'>>>123<<<')
67struct.pack_into('<bbb', buf, 3, 0x41, 0x42, 0x43)
68print(buf)
69struct.pack_into('<bbb', buf, -6, 0x44, 0x45, 0x46)
70print(buf)
71
72# check that we get an error if the buffer is too small
73try:
74    struct.pack_into('I', bytearray(1), 0, 0)
75except:
76    print('struct.error')
77
78try:
79    struct.pack_into('<bbb', buf, 7, 0x41, 0x42, 0x43)
80except:
81    print('struct.error')
82try:
83    struct.pack_into('<bbb', buf, -10, 0x41, 0x42, 0x43)
84except:
85    print('struct.error')
86
87# unpack_from
88buf = b'0123456789'
89print(struct.unpack_from('<b', buf, 4))
90print(struct.unpack_from('<b', buf, -4))
91try:
92    print(struct.unpack_from('<b', buf, 10))
93except:
94    print('struct.error')
95try:
96    print(struct.unpack_from('<b', buf, -11))
97except:
98    print('struct.error')
99