mescc: Tinycc support: word array assignment.
[mes.git] / scaffold / tests / 7a-struct-char-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 file {
26   char buffer[1];
27 };
28
29 struct xfile {
30   char *buffer;
31 };
32
33 struct file file;
34 struct xfile xfile;
35
36 char *buffer = "aaaaaaaaaaaa";
37 char *bufzor = "bbbbbbbbbbbb";
38
39 int
40 test ()
41 {
42   char *p;
43
44   struct file *pfile = &file;
45   strcpy (file.buffer, "0123456789\n");
46   eputs (file.buffer);
47   p = pfile->buffer;
48   if (p[1] != '1') return 1;
49   if (file.buffer[1] != '1') return 2;
50   if (pfile->buffer[1] != '1') return 3;
51
52   strcpy (file.buffer, "0123456789\n");
53   eputs (file.buffer);
54   memcpy (pfile->buffer + 1, " ", 1);
55   eputs (file.buffer);
56   if (p[1] != ' ') return 4;
57   if (file.buffer[1] != ' ') return 5;
58   if (pfile->buffer[1] != ' ') return 6;
59
60   strcpy (file.buffer, "0123456789\n");
61   eputs (file.buffer);
62   p[2] = ' ';
63   eputs (file.buffer);
64   if (p[2] != ' ') return 7;
65   if (file.buffer[2] != ' ') return 8;
66   if (pfile->buffer[2] != ' ') return 9;
67
68   strcpy (file.buffer, "0123456789\n");
69   eputs (file.buffer);
70   file.buffer[3] = ' ';
71   eputs (file.buffer);
72   if (p[3] != ' ') return 10;
73   if (p[4] != '4') return 11;
74
75   strcpy (file.buffer, "0123456789\n");
76   eputs (file.buffer);
77   pfile->buffer[4] = ' ';
78   eputs (file.buffer);
79   if (p[4] != ' ') return 12;
80   if (p[5] != '5') return 13;
81
82   xfile.buffer = &buffer;
83   struct xfile *pxfile = &xfile;
84   strcpy (xfile.buffer, "0123456789\n");
85   eputs (xfile.buffer);
86   p = pxfile->buffer;
87   if (p[5] != '5') return 20;
88   if (xfile.buffer[5] != '5') return 22;
89   if (pxfile->buffer[5] != '5') return 23;
90
91   strcpy (xfile.buffer, "0123456789\n");
92   eputs (xfile.buffer);
93   memcpy (pxfile->buffer + 5, " ", 1);
94   eputs (xfile.buffer);
95   if (p[5] != ' ') return 24;
96   if (xfile.buffer[5] != ' ') return 25;
97   if (pxfile->buffer[5] != ' ') return 26;
98
99   strcpy (xfile.buffer, "0123456789\n");
100   eputs (xfile.buffer);
101   p[6] = ' ';
102   eputs (xfile.buffer);
103   if (p[6] != ' ') return 27;
104   if (xfile.buffer[6] != ' ') return 28;
105   if (pxfile->buffer[6] != ' ') return 29;
106
107   strcpy (xfile.buffer, "0123456789\n");
108   eputs (xfile.buffer);
109   xfile.buffer[7] = ' ';
110   eputs (xfile.buffer);
111   if (p[7] != ' ') return 30;
112   if (p[8] != '8') return 31;
113
114   strcpy (xfile.buffer, "0123456789\n");
115   eputs (xfile.buffer);
116   pxfile->buffer[8] = ' ';
117   eputs (xfile.buffer);
118   if (p[8] != ' ') return 32;
119   if (p[9] != '9') return 33;
120   
121   short *ps;
122   ps = pfile->buffer;
123   p = pfile->buffer;
124
125   strcpy (file.buffer, "0123456789\n");
126   eputs (file.buffer);
127   memcpy (ps + 1, "  ", 2);
128   eputs (file.buffer);
129   eputs (itoa (ps[1])); eputs ("\n");
130   eputs (itoa (((' ' << 8) + ' ')));  eputs ("\n");
131   if (ps[1] != ((' ' << 8) + ' ')) return 40;
132   if (p[4] != '4') return 41;
133
134   strcpy (file.buffer, "0123456789\n");
135   eputs (file.buffer);
136   ps[2] = ((' ' << 8) + ' ');
137   eputs (file.buffer);
138   eputs (itoa (ps[2])); eputs ("\n");
139   eputs (itoa (((' ' << 8) + ' ')));  eputs ("\n");
140   if (ps[2] != ((' ' << 8) + ' ')) return 42;
141   if (p[6] != '6') return 43;
142
143   return 0;
144 }