MCPcopy Create free account
hub / github.com/aguinet/dragonffi / test_structs

Method test_structs

bindings/python/tests/test_structs.py:23–76  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

21
22class StructsTest(DFFITest):
23 def test_structs(self):
24 FFI=self.FFI
25 CU = FFI.compile('''
26struct A
27{
28 unsigned char a;
29 short b;
30};
31
32int check(struct A a, unsigned char aref, short bref) {
33 return (a.a == aref) && (a.b == bref);
34}
35int checkptr(struct A* a, unsigned char aref, short bref) {
36 return (a->a == aref) && (a->b == bref);
37}
38void set(struct A* a) {
39 a->a = 59;
40 a->b = 1111;
41}
42struct A init() {
43 struct A ret;
44 ret.a = 44;
45 ret.b = 5555;
46 return ret;
47}
48 ''')
49 A = CU.types.A
50 fields_name = sorted((f.name for f in A))
51 self.assertEqual(fields_name[0], 'a')
52 self.assertEqual(fields_name[1], 'b')
53
54 Av = CU.types.A(a=1,b=2)
55
56 # Direct data access throught a memoryview
57 mv = pydffi.view_as_bytes(Av)
58
59 # Set a throught mv
60
61 v = 5 if sys.version_info >= (3, 0) else struct.pack("B", 5)
62 mv[0] = v
63 self.assertEqual(Av.a, 5)
64 self.assertEqual(Av.b, 2)
65 self.assertTrue(getattr(CU.funcs, "check")(Av, 5, 2))
66
67 pAv = pydffi.ptr(Av)
68 self.assertTrue(CU.funcs.checkptr(pAv, 5, 2))
69 CU.funcs.set(pAv)
70 self.assertTrue(getattr(CU.funcs, "check")(Av, 59, 1111))
71 self.assertEqual(Av.a, 59)
72 self.assertEqual(Av.b, 1111)
73
74 Av = CU.funcs.init()
75 self.assertEqual(Av.a, 44)
76 self.assertEqual(Av.b, 5555)
77
78if __name__ == '__main__':
79 unittest.main()

Callers

nothing calls this directly

Calls 4

getattrFunction · 0.85
compileMethod · 0.45
setMethod · 0.45
initMethod · 0.45

Tested by

no test coverage detected