test: Split-up Mescc scaffold test.
[mes.git] / scaffold / tests / 38-compare-call.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 enum type_t {TCHAR, TCLOSURE, TCONTINUATION, TFUNCTION, TKEYWORD, TMACRO, TNUMBER, TPAIR, TREF, TSPECIAL, TSTRING, TSYMBOL, TVALUES, TVECTOR, TBROKEN_HEART};
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 identity (int i)
41 {
42   return i;
43 }
44
45 int
46 test ()
47 {
48   int i = 0;
49   int f = 0;
50   int t = 1;
51   int one = t;
52   char *p = "mes";
53
54   puts ("\n");
55   puts ("t: if (strlen (\"\"))\n");
56   if (strlen ("")) return 1;
57
58   puts ("t: if (strlen (p) != 3)\n");
59   if (strlen (p) != 3) return 1;
60
61   puts ("t: if (!strlen (\".\"))\n");
62   if (!strlen (".")) return 1;
63
64   puts ("t: identity (p[i]) != 'm'\n");
65   if (identity (p[i]) != 'm') return identity (p[i]);
66
67   puts ("t: inc (0)\n");
68   if (inc (0) != 1) return 1;
69
70   puts ("t: inc (inc (0))\n");
71   if (inc (inc (0)) != 2) return 1;
72
73   puts ("t: inc (inc (inc (0)))\n");
74   if (inc (inc (inc (0))) != 3) return 1;
75
76   puts ("t: add (1, 2)\n");
77   if (add (1, 2) != 3) return 1;
78
79   puts ("t: add (inc (0), inc (1))\n");
80   if (add (inc (0), inc (1)) != 3) return 1;
81
82   puts ("t: add (TSTRING, 3)\n");
83   if (add (TSTRING, 3) != 13) return 1;
84
85   puts ("t: add (inc (inc (0)), inc (inc (1)))\n");
86   if (add (inc (inc (0)), inc (inc (1))) != 5) return 1;
87
88   puts ("t: if (strlen (\".\"))\n");
89   if (strlen (".")) goto ok1;
90   return 1;
91  ok1:
92
93   puts ("t: if (strlen (p) == 3)\n");
94   if (strlen (p) == 3) goto ok2;
95  ok2:
96
97   return 0;
98 }