core: Fixes for int-max, int-min.
[mes.git] / scaffold / tests / 60-math.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 <limits.h>
22 #include <stdio.h>
23 #include <string.h>
24
25 #include "30-test.i"
26
27 int
28 add (int a, int b)
29 {
30   return a + b;
31 }
32
33 int
34 inc (int i)
35 {
36   return i + 1;
37 }
38
39 int
40 test ()
41 {
42   int i;
43
44   puts ("\n");
45   puts ("t: 0 < 0\n");
46   if (0 < 0) return 1;
47
48   puts ("t: 2 < 1\n");
49   if (2 < 1) return 2;
50
51   puts ("t: -1 < -2\n");
52   if (-1 < -2) return 3;
53
54   puts ("t: 0 < -1\n");
55   if (0 < -1) return 4;
56
57   puts ("t: 0 > 0\n");
58   if (0 > 0) return 5;
59
60   puts ("t: 1 > 2\n");
61   if (1 > 2) return 6;
62
63   puts ("t: -2 > -1\n");
64   if (-2 > -1) return 7;
65
66   puts ("t: -1 > 0\n");
67   if (-1 > 0) return 9;
68
69   puts ("t: 1 == inc (0)\n");
70   if (1 == inc (0)) goto ok0;
71   return 10;
72  ok0:
73
74   puts ("t: 0 < inc (0)\n");
75   if (0 < inc (0)) goto ok1;
76   return 11;
77  ok1:
78
79   puts ("t: inc (0) + 2 != 3\n");
80   if (inc (0) + inc (1) != 3) return 12;
81
82   puts ("t: 4/2=");
83   i = 4 / 2;
84   if (i!=2) return 13;
85   i += 48;
86   putchar (i);
87   puts ("\n");
88
89   puts ("t: 3*4=\n");
90   i = 3 * 4;
91   if (i!=12) return 14;
92
93   puts ("t: i /= 4\n");
94   i /= 4;
95   if (i!=3) return 15;
96
97   puts ("t: i *= 4\n");
98   i *= 4;
99   if (i!=12) return 16;
100
101   puts ("t: 1 << 3\n");
102   if (1 << 3 != 8) return 1 << 3;
103
104   puts ("t: 3 << 4\n");
105   if (3 << 4 != 48) return 3 << 4;
106
107   puts ("t: 48 >> 3\n");
108   if (48 >> 4 != 3) return 48 >> 4;
109
110   puts ("t: 10 >> 1\n");
111   if (10 >> 1 != 5) return 10 >> 1;
112
113   puts ("t: 1 | 4\n");
114   if ((1 | 4) != 5) return 1 | 4;
115
116   i = -3;
117   puts ("t: -i\n");
118   if (-i != 3) return 22;
119
120   puts ("t: -1 + 2\n");
121   if (-1 + 2 != 1) return 23;
122
123   puts ("t: 1 & 3\n");
124   if ((1 & 3) != 1) return 24;
125
126   puts ("t: ~0\n");
127   if (~0 != -1) return 25;
128
129   puts ("t: 1 | 3\n");
130   if ((1 | 2) != 3) return 26;
131
132   puts ("t: ^ 1 \n");
133   if ((1 ^ 3) != 2) return 27;
134
135   puts ("t: 3 == 3\n");
136   if ((3 == 3) !=  1) return 28;
137
138   puts ("t: 3 != 3\n");
139   if ((3 != 3) !=  0) return 29;
140
141   puts ("t: 011 == 15\n");
142   if (011 != 9) return 30;
143
144   puts ("t: 0b11 == 3\n");
145   if (0b11 != 3) return 31;
146
147   puts ("t: 0x11 == 3\n");
148   if (0x11 != 17) return 32;
149
150   puts ("t: i = INT_MAX\n");
151   i = INT_MAX;
152
153   if (strcmp ("2147483647", itoa (i)))
154     return 33;
155
156   puts ("t: i = 2147483646\n");
157   i = 2147483646;
158
159   puts ("t: i++\n");
160   i++;
161
162   puts ("t: i = INT_MIN\n");
163   i = INT_MIN;
164
165   if (strcmp ("-2147483648", itoa (i)))
166     return 34;
167
168   puts ("t: i = -2147483647\n");
169   i = -2147483647;
170
171   puts ("t: i--\n");
172   i--;
173
174
175   return 0;
176 }