mlibc: Cleanup.
[mes.git] / scaffold / tests / 7b-struct-int-array.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * Mes --- Maxwell Equations of Software
3  * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of Mes.
6  *
7  * Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * Mes is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include "30-test.i"
22
23 struct foo {
24   int a;
25   int b;
26 };
27
28 struct foo g_foo[2] = {0,1,2,3};
29
30 struct bar
31 {
32   int bar[4];
33 };
34
35 struct bar g_bar = {101,102};
36 typedef struct bar bar_struct;
37 typedef struct bar foo_struct;
38
39 int
40 test ()
41 {
42   if (g_foo[0].a != 0) return 1;
43   if (g_foo[0].b != 1) return 2;
44   if (g_foo[1].a != 2) return 3;
45   if (g_foo[1].b != 3) return 4;
46
47   void *p = &g_foo;
48   struct foo* pfoo = (((struct foo *)p) + 1);
49   if (pfoo->a != 2) return 5;
50   if (pfoo->b != 3) return 6;
51
52   int *pi = &g_foo;
53   if (*pi != 0) return 5;
54
55   pi = &g_bar;
56   if (*pi != 101) return 6;
57
58   struct bar bar = {0x22, 0x33};
59   pi = &bar;
60   if (*pi != 0x22) return 6;
61
62   bar_struct bs;
63   bs.bar[0] = 102;
64   pi = &bs;
65   if (*pi != 102) return 7;
66
67   foo_struct fs;
68   fs.bar[0] = 0x22;
69   fs.bar[1] = 0x33;
70
71   pi = &fs;
72   if (*pi != 0x22) return 7;
73   pi++;
74
75   if (*pi != 0x33) return 8;
76
77   foo_struct *pfs = &fs;
78   pfs->bar[3] = 0x44;
79   pfs->bar[4] = 0x55;
80
81   pi = &fs.bar[3];
82   if (*pi != 0x44) return 9;
83   pi++;
84   if (*pi != 0x55) return 10;
85
86   return 0;
87 }