80_c.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import c
  2. a = c.malloc(100)
  3. c.free(a)
  4. a = c.malloc(100)
  5. c.memset(a, 0, 100)
  6. b = c.malloc(100)
  7. b = c.memcpy(b, a, 100)
  8. bp = c.p_cast(a, c.int_p)
  9. assert c.p_value(c.NULL) == 0
  10. assert c.NULL == c.NULL
  11. assert c.NULL != a
  12. for i in range(10):
  13. bp[i] = i
  14. assert bp[i] == i
  15. (bp+i).write(i)
  16. assert (bp+i).read() == i
  17. i = c.float_(10)
  18. assert i.sizeof() == 4
  19. j = i.copy()
  20. assert i == j
  21. assert i is not j
  22. ####################
  23. class Vec2(c.struct):
  24. def __new__(cls, x: float, y: float):
  25. obj = c.struct.__new__(cls, 8)
  26. obj.write_float(x, 0)
  27. obj.write_float(y, 4)
  28. return obj
  29. @property
  30. def x(self) -> float:
  31. return self.read_float(0)
  32. @property
  33. def y(self) -> float:
  34. return self.read_float(4)
  35. def __repr__(self) -> str:
  36. return f"Vec2({self.x}, {self.y})"
  37. a = Vec2(1, 2)
  38. assert isinstance(a, c.struct)
  39. assert type(a) is Vec2
  40. assert repr(a) == "Vec2(1.0, 2.0)"
  41. a = c.struct(10)
  42. p = c.p_cast(a.addr(), c.char_p)
  43. p.write_string("Hello!")
  44. assert p[0] == ord("H")
  45. assert p[1] == ord("e")
  46. assert p[2] == ord("l")
  47. assert p[3] == ord("l")
  48. assert p[4] == ord("o")
  49. assert p[5] == ord("!")
  50. assert p[6] == 0
  51. assert p.read_string() == "Hello!"
  52. s = c.struct(67)
  53. for i in range(67):
  54. s.write_char(i, i)
  55. s_hex = s.hex()
  56. s_r = c.struct.fromhex(s_hex)
  57. assert (s == s_r and s is not s_r), (s_hex, s_r.hex())
  58. assert s_hex == s_r.hex()