X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftcon%2Ftest%2Frun-container.c;fp=ccan%2Ftcon%2Ftest%2Frun-container.c;h=88bb2a1c53cb0d185e859d9b51f5dcb326d30388;hp=0000000000000000000000000000000000000000;hb=0ddea4131eca28437638cdaf9394324fafab33da;hpb=fd48aee6393bda1e4eda9f9e52e6d9f818b77211 diff --git a/ccan/tcon/test/run-container.c b/ccan/tcon/test/run-container.c new file mode 100644 index 00000000..88bb2a1c --- /dev/null +++ b/ccan/tcon/test/run-container.c @@ -0,0 +1,59 @@ +#include + +#include +#include +#include + +struct inner { + int inner_val; +}; + +struct outer { + int outer_val; + struct inner inner; +}; + +struct outer0 { + struct inner inner; + int outer0_val; +}; + +struct info_base { + char *infop; +}; + +struct info_tcon { + struct info_base base; + TCON(TCON_CONTAINER(fi, struct outer, inner); + TCON_CONTAINER(fi2, struct outer0, inner)); +}; + +int main(int argc, char *argv[]) +{ + struct info_tcon info; + TCON_WRAP(struct info_base, + TCON_CONTAINER(fi, struct outer, inner); + TCON_CONTAINER(fi2, struct outer0, inner)) infow; + struct outer ovar; + struct outer0 ovar2; + + plan_tests(12); + + ok1(tcon_container_of(&info, fi, &ovar.inner) == &ovar); + ok1(tcon_member_of(&info, fi, &ovar) == &ovar.inner); + ok1(tcon_container_of(&infow, fi, &ovar.inner) == &ovar); + ok1(tcon_member_of(&infow, fi, &ovar) == &ovar.inner); + + ok1(tcon_container_of(&info, fi2, &ovar2.inner) == &ovar2); + ok1(tcon_member_of(&info, fi2, &ovar2) == &ovar2.inner); + ok1(tcon_container_of(&infow, fi2, &ovar2.inner) == &ovar2); + ok1(tcon_member_of(&infow, fi2, &ovar2) == &ovar2.inner); + + /* Check handling of NULLs */ + ok1(tcon_container_of(&info, fi, NULL) == NULL); + ok1(tcon_member_of(&info, fi, NULL) == NULL); + ok1(tcon_container_of(&infow, fi, NULL) == NULL); + ok1(tcon_member_of(&infow, fi, NULL) == NULL); + + return 0; +}