pocketpy/tests/793_stdc.py
2025-12-16 17:10:45 +08:00

63 lines
1.3 KiB
Python

from stdc import *
assert sizeof(Int8) == sizeof(UInt8) == 1
assert sizeof(Int16) == sizeof(UInt16) == 2
assert sizeof(Int32) == sizeof(UInt32) == 4
assert sizeof(Int64) == sizeof(UInt64) == 8
assert sizeof(Float) == 4
assert sizeof(Double) == 8
assert sizeof(Bool) == 1
assert sizeof(Pointer) in (4, 8)
x = Int32(42)
assert x.value == 42
x.value = 100
assert x.value == 100
Int32.read(addressof(x), 0) == 100
Int32.write(addressof(x), 0, 200)
assert x.value == 200
# test array
arr = Int32.array(3)
arr[0] = 10
arr[1] = 20
arr[2] = 30
assert arr[0] == 10
assert arr[1] == 20
assert arr[2] == 30
# test malloc, memset, memcpy
p = malloc(3 * sizeof(Int32))
memset(p, 0, 3 * sizeof(Int32))
memcpy(p, addressof(arr), 3 * sizeof(Int32))
for i in range(3):
assert arr[i] == Int32.read(p, i)
assert memcmp(p, addressof(arr), 3 * sizeof(Int32)) == 0
# test free
free(p)
# test float
y = Double.array(3)
y[0] = 1.1
y[1] = 2.2
y[2] = 3.3
assert Double.read(addressof(y), 0) == 1.1
assert Double.read(addressof(y), 1) == 2.2
assert Double.read(addressof(y), 2) == 3.3
# test read_cstr and write_cstr
a = Char.array(20)
write_cstr(addressof(a), "hello")
assert read_cstr(addressof(a)) == "hello"
a[3] = 0
assert read_cstr(addressof(a)) == "hel"
# test read_bytes and write_bytes
assert read_bytes(addressof(a), 5) == b'hel\x00o'