mescc: Tinycc support: pointer arithmetic.
[mes.git] / scaffold / tests / 71-struct-array.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * Mes --- Maxwell Equations of Software
3  * Copyright © 2017 Jan 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 #include <stdio.h>
23 #include <string.h>
24
25 struct foo;
26
27 struct foo* krak;
28
29 typedef struct foo foo_struct;
30
31 struct foo
32 {
33   int bar[2];
34   char name[10];
35 };
36   
37 struct foo g_foo;
38
39 int a, b;
40 int i, *j;
41 int *k = 0, l;
42
43 typedef struct baz
44 {
45   int bar;
46   //struct baz *f, *g;
47   struct baz *f;
48   struct baz *g;
49 } baz;
50
51 int
52 test ()
53 {
54   foo_struct f;
55   f.bar[0] = 0x22;
56   f.bar[1] = 0x34;
57
58   printf ("eentje: %d\n", f.bar[0]);
59   printf ("tweetje: %d\n", f.bar[1]);
60
61   int *pf = &f;
62   if (*pf != 0x22) return 1;
63   if (*(pf + 1) != 0x34) return 2;
64
65   struct foo *g = &f;
66   printf ("punter eentje: %d\n", g->bar[0]);
67   printf ("punter tweetje: %d\n", g->bar[1]);
68
69   char *strings[] = { "one\n", "two\n", "three\n", NULL };
70   char **p = strings;
71   while (*p) puts (*p++);
72
73   strcpy (f.name, "hallo\n");
74   puts (f.name);
75
76   struct foo fu;
77   strcpy (fu.name, "hello\n");
78   puts (fu.name);
79
80   strcpy (g_foo.name, "hey\n");
81   puts (g_foo.name);
82
83   char buf[10];
84   struct foo* s = &buf;
85   strcpy (s->name, "hi\n");
86   puts (s->name);
87
88   return 0;
89 }