3 #include <ccan/tcon/tcon.h>
4 #include <ccan/build_assert/build_assert.h>
5 #include <ccan/tap/tap.h>
26 struct info_base base;
27 TCON(TCON_CONTAINER(fi, struct outer, inner);
28 TCON_CONTAINER(fi2, struct outer0, inner));
31 int main(int argc, char *argv[])
33 struct info_tcon info;
34 TCON_WRAP(struct info_base,
35 TCON_CONTAINER(fi, struct outer, inner);
36 TCON_CONTAINER(fi2, struct outer0, inner)) infow;
42 ok1(tcon_container_of(&info, fi, &ovar.inner) == &ovar);
43 ok1(tcon_member_of(&info, fi, &ovar) == &ovar.inner);
44 ok1(tcon_container_of(&infow, fi, &ovar.inner) == &ovar);
45 ok1(tcon_member_of(&infow, fi, &ovar) == &ovar.inner);
47 ok1(tcon_container_of(&info, fi2, &ovar2.inner) == &ovar2);
48 ok1(tcon_member_of(&info, fi2, &ovar2) == &ovar2.inner);
49 ok1(tcon_container_of(&infow, fi2, &ovar2.inner) == &ovar2);
50 ok1(tcon_member_of(&infow, fi2, &ovar2) == &ovar2.inner);
52 /* Check handling of NULLs */
53 ok1(tcon_container_of(&info, fi, NULL) == NULL);
54 ok1(tcon_member_of(&info, fi, NULL) == NULL);
55 ok1(tcon_container_of(&infow, fi, NULL) == NULL);
56 ok1(tcon_member_of(&infow, fi, NULL) == NULL);