def test_sup(self):
    src = '\n        #include <stdio.h>\n\n        struct S4   { int x;          }; // size: 4\n        struct S4_2 { short x, y;     }; // size: 4, but for alignment purposes, 2\n        struct S6   { short x, y, z;  }; // size: 6\n        struct S6w  { char x[6];      }; // size: 6 also\n        struct S6z  { int x; short y; }; // size: 8, since we align to a multiple of the biggest - 4\n\n        struct C___  { S6 a, b, c; int later; };\n        struct Carr  { S6 a[3]; int later; }; // essentially the same, but differently defined\n        struct C__w  { S6 a; S6w b; S6 c; int later; }; // same size, different struct\n        struct Cp1_  { int pre; short a; S6 b, c; int later; }; // fillers for a\n        struct Cp2_  { int a; short pre; S6 b, c; int later; }; // fillers for a (get addr of the other filler)\n        struct Cint  { S6 a; int  b; S6 c; int later; }; // An int (different size) for b\n        struct C4__  { S6 a; S4   b; S6 c; int later; }; // Same size as int from before, but a struct\n        struct C4_2  { S6 a; S4_2 b; S6 c; int later; }; // Same size as int from before, but a struct with max element size 2\n        struct C__z  { S6 a; S6z  b; S6 c; int later; }; // different size, 8 instead of 6\n\n        int main()\n        {\n          #define TEST(struc) \\\n          { \\\n            struc *s = 0; \\\n            printf("*%s: %d,%d,%d,%d<%d*\\n", #struc, (int)&(s->a), (int)&(s->b), (int)&(s->c), (int)&(s->later), sizeof(struc)); \\\n          }\n          #define TEST_ARR(struc) \\\n          { \\\n            struc *s = 0; \\\n            printf("*%s: %d,%d,%d,%d<%d*\\n", #struc, (int)&(s->a[0]), (int)&(s->a[1]), (int)&(s->a[2]), (int)&(s->later), sizeof(struc)); \\\n          }\n          printf("sizeofs:%d,%d\\n", sizeof(S6), sizeof(S6z));\n          TEST(C___);\n          TEST_ARR(Carr);\n          TEST(C__w);\n          TEST(Cp1_);\n          TEST(Cp2_);\n          TEST(Cint);\n          TEST(C4__);\n          TEST(C4_2);\n          TEST(C__z);\n          return 0;\n        }\n      '
    self.do_run(src, 'sizeofs:6,8\n*C___: 0,6,12,20<24*\n*Carr: 0,6,12,20<24*\n*C__w: 0,6,12,20<24*\n*Cp1_: 4,6,12,20<24*\n*Cp2_: 0,6,12,20<24*\n*Cint: 0,8,12,20<24*\n*C4__: 0,8,12,20<24*\n*C4_2: 0,6,10,16<20*\n*C__z: 0,8,16,24<28*')
def test_sup(self):
    src = '\n        #include <stdio.h>\n\n        struct S4   { int x;          }; // size: 4\n        struct S4_2 { short x, y;     }; // size: 4, but for alignment purposes, 2\n        struct S6   { short x, y, z;  }; // size: 6\n        struct S6w  { char x[6];      }; // size: 6 also\n        struct S6z  { int x; short y; }; // size: 8, since we align to a multiple of the biggest - 4\n\n        struct C___  { S6 a, b, c; int later; };\n        struct Carr  { S6 a[3]; int later; }; // essentially the same, but differently defined\n        struct C__w  { S6 a; S6w b; S6 c; int later; }; // same size, different struct\n        struct Cp1_  { int pre; short a; S6 b, c; int later; }; // fillers for a\n        struct Cp2_  { int a; short pre; S6 b, c; int later; }; // fillers for a (get addr of the other filler)\n        struct Cint  { S6 a; int  b; S6 c; int later; }; // An int (different size) for b\n        struct C4__  { S6 a; S4   b; S6 c; int later; }; // Same size as int from before, but a struct\n        struct C4_2  { S6 a; S4_2 b; S6 c; int later; }; // Same size as int from before, but a struct with max element size 2\n        struct C__z  { S6 a; S6z  b; S6 c; int later; }; // different size, 8 instead of 6\n\n        int main()\n        {\n          #define TEST(struc) \\\n          { \\\n            struc *s = 0; \\\n            printf("*%s: %d,%d,%d,%d<%d*\\n", #struc, (int)&(s->a), (int)&(s->b), (int)&(s->c), (int)&(s->later), sizeof(struc)); \\\n          }\n          #define TEST_ARR(struc) \\\n          { \\\n            struc *s = 0; \\\n            printf("*%s: %d,%d,%d,%d<%d*\\n", #struc, (int)&(s->a[0]), (int)&(s->a[1]), (int)&(s->a[2]), (int)&(s->later), sizeof(struc)); \\\n          }\n          printf("sizeofs:%d,%d\\n", sizeof(S6), sizeof(S6z));\n          TEST(C___);\n          TEST_ARR(Carr);\n          TEST(C__w);\n          TEST(Cp1_);\n          TEST(Cp2_);\n          TEST(Cint);\n          TEST(C4__);\n          TEST(C4_2);\n          TEST(C__z);\n          return 0;\n        }\n      '
    self.do_run(src, 'sizeofs:6,8\n*C___: 0,6,12,20<24*\n*Carr: 0,6,12,20<24*\n*C__w: 0,6,12,20<24*\n*Cp1_: 4,6,12,20<24*\n*Cp2_: 0,6,12,20<24*\n*Cint: 0,8,12,20<24*\n*C4__: 0,8,12,20<24*\n*C4_2: 0,6,10,16<20*\n*C__z: 0,8,16,24<28*')