History

test 104: adjust to (unwritten) tests2 suite conventions

... which IMO are: 1) files don't need a _test suffix because all files in the directory are tests ;) 2) we test the BEHAVIOR of the program, rather than its binary bit contents. Ok, but nobody said a test can't use two files ;) (where the 104+_ construct is meant to prevent the file from being picked up by the makefile as a test on its own).

grischka committed 7 years ago

Commit e6d8f9a1 parent 5dfcc756 files · +229 −208Browse files

Unified · Split

6 files
  1. tests/tests2/104+_inline.c +54 −0
  2. tests/tests2/104_inline.c +132 −0
  3. tests/tests2/104_inline.expect +39 −0
  4. tests/tests2/104_inline_test.c +0 −180
  5. tests/tests2/104_inline_test.expect +0 −25
  6. tests/tests2/Makefile +4 −3
tests/tests2/104+_inline.c+54−0
@@ -0,0 +1,54 @@
1
2#define GOT(f) \
3 __attribute__((weak)) void f(void); \
4 printf("%d %s\n", !!f, #f);
5
6int printf(const char*, ...);
7
8void check_exports()
9{
10 // 0
11 GOT(inline_inline_2decl_only)
12 GOT(inline_inline_undeclared)
13 GOT(inline_inline_predeclared)
14 GOT(inline_inline_postdeclared)
15 GOT(inline_inline_prepostdeclared)
16 GOT(inline_inline_undeclared2)
17 GOT(inline_inline_predeclared2)
18 GOT(inline_inline_postdeclared2)
19 GOT(inline_inline_prepostdeclared2)
20
21 // 1
22 GOT(extern_extern_postdeclared)
23 GOT(extern_extern_postdeclared2)
24 GOT(extern_extern_predeclared)
25 GOT(extern_extern_predeclared2)
26 GOT(extern_extern_prepostdeclared)
27 GOT(extern_extern_prepostdeclared2)
28 GOT(extern_extern_undeclared)
29 GOT(extern_extern_undeclared2)
30 GOT(extern_postdeclared)
31 GOT(extern_postdeclared2)
32 GOT(extern_predeclared)
33 GOT(extern_predeclared2)
34 GOT(extern_prepostdeclared)
35 GOT(extern_undeclared)
36 GOT(extern_undeclared2)
37 GOT(inst2_extern_inline_postdeclared)
38 GOT(inst2_extern_inline_predeclared)
39 GOT(inst3_extern_inline_predeclared)
40 GOT(inst_extern_inline_postdeclared)
41 GOT(inst_extern_inline_predeclared)
42 GOT(main)
43 GOT(noinst_extern_inline_func)
44 GOT(noinst_extern_inline_postdeclared)
45 GOT(noinst_extern_inline_postdeclared2)
46 GOT(noinst_extern_inline_undeclared)
47
48 // 0
49 GOT(noinst_static_inline_postdeclared)
50 GOT(noinst2_static_inline_postdeclared)
51 GOT(noinst_static_inline_predeclared)
52 GOT(noinst2_static_inline_predeclared)
53 GOT(static_func)
54}
tests/tests2/104_inline.c+132−0
@@ -0,0 +1,132 @@
1inline void inline_inline_2decl_only(void);
2inline void inline_inline_2decl_only(void);
3
4inline void inline_inline_undeclared(void){}
5
6inline void inline_inline_predeclared(void);
7inline void inline_inline_predeclared(void){}
8
9inline void inline_inline_postdeclared(void){}
10inline void inline_inline_postdeclared(void);
11
12inline void inline_inline_prepostdeclared(void);
13inline void inline_inline_prepostdeclared(void){}
14inline void inline_inline_prepostdeclared(void);
15
16inline void inline_inline_undeclared2(void){}
17
18inline void inline_inline_predeclared2(void);
19inline void inline_inline_predeclared2(void);
20inline void inline_inline_predeclared2(void){}
21
22inline void inline_inline_postdeclared2(void){}
23inline void inline_inline_postdeclared2(void);
24inline void inline_inline_postdeclared2(void);
25
26inline void inline_inline_prepostdeclared2(void);
27inline void inline_inline_prepostdeclared2(void);
28inline void inline_inline_prepostdeclared2(void){}
29inline void inline_inline_prepostdeclared2(void);
30inline void inline_inline_prepostdeclared2(void);
31
32extern void extern_extern_undeclared(void){}
33
34extern void extern_extern_predeclared(void);
35extern void extern_extern_predeclared(void){}
36
37extern void extern_extern_postdeclared(void){}
38extern void extern_extern_postdeclared(void);
39
40extern void extern_extern_prepostdeclared(void);
41extern void extern_extern_prepostdeclared(void){}
42extern void extern_extern_prepostdeclared(void);
43
44extern void extern_extern_undeclared2(void){}
45
46extern void extern_extern_predeclared2(void);
47extern void extern_extern_predeclared2(void);
48extern void extern_extern_predeclared2(void){}
49
50extern void extern_extern_postdeclared2(void){}
51extern void extern_extern_postdeclared2(void);
52extern void extern_extern_postdeclared2(void);
53
54extern void extern_extern_prepostdeclared2(void);
55extern void extern_extern_prepostdeclared2(void);
56extern void extern_extern_prepostdeclared2(void){}
57extern void extern_extern_prepostdeclared2(void);
58extern void extern_extern_prepostdeclared2(void);
59
60void extern_undeclared(void){}
61
62void extern_predeclared(void);
63void extern_predeclared(void){}
64
65void extern_postdeclared(void){}
66void extern_postdeclared(void);
67
68void extern_prepostdeclared(void);
69void extern_prepostdeclared(void){}
70void extern_prepostdeclared(void);
71
72void extern_undeclared2(void){}
73
74void extern_predeclared2(void);
75void extern_predeclared2(void);
76void extern_predeclared2(void){}
77
78void extern_postdeclared2(void){}
79void extern_postdeclared2(void);
80void extern_postdeclared2(void);
81
82
83extern inline void noinst_extern_inline_undeclared(void){}
84
85extern inline void noinst_extern_inline_postdeclared(void){}
86inline void noinst_extern_inline_postdeclared(void);
87
88extern inline void noinst_extern_inline_postdeclared2(void){}
89inline void noinst_extern_inline_postdeclared2(void);
90inline void noinst_extern_inline_postdeclared2(void);
91
92extern inline void inst_extern_inline_postdeclared(void){}
93extern inline void inst_extern_inline_postdeclared(void);
94inline void inst2_extern_inline_postdeclared(void){}
95void inst2_extern_inline_postdeclared(void);
96
97void inst_extern_inline_predeclared(void);
98extern inline void inst_extern_inline_predeclared(void){}
99void inst2_extern_inline_predeclared(void);
100inline void inst2_extern_inline_predeclared(void){}
101extern inline void inst3_extern_inline_predeclared(void);
102inline void inst3_extern_inline_predeclared(void){}
103
104static inline void noinst_static_inline_postdeclared(void){}
105static inline void noinst_static_inline_postdeclared(void);
106static inline void noinst2_static_inline_postdeclared(void){}
107static void noinst2_static_inline_postdeclared(void);
108
109static void noinst_static_inline_predeclared(void);
110static inline void noinst_static_inline_predeclared(void){}
111static void noinst2_static_inline_predeclared(void);
112static inline void noinst2_static_inline_predeclared(void){}
113
114static void static_func(void);
115void static_func(void) { }
116
117inline void noinst_extern_inline_func(void);
118void noinst_extern_inline_func(void) { }
119
120int main()
121{
122 inline_inline_undeclared(); inline_inline_predeclared(); inline_inline_postdeclared();
123 inline_inline_undeclared2(); inline_inline_predeclared2(); inline_inline_postdeclared2();
124 noinst_static_inline_predeclared();
125 noinst2_static_inline_predeclared();
126 noinst_static_inline_predeclared();
127 noinst2_static_inline_predeclared();
128
129 void check_exports();
130 check_exports();
131 return 0;
132}
tests/tests2/104_inline.expect+39−0
@@ -0,0 +1,39 @@
10 inline_inline_2decl_only
20 inline_inline_undeclared
30 inline_inline_predeclared
40 inline_inline_postdeclared
50 inline_inline_prepostdeclared
60 inline_inline_undeclared2
70 inline_inline_predeclared2
80 inline_inline_postdeclared2
90 inline_inline_prepostdeclared2
101 extern_extern_postdeclared
111 extern_extern_postdeclared2
121 extern_extern_predeclared
131 extern_extern_predeclared2
141 extern_extern_prepostdeclared
151 extern_extern_prepostdeclared2
161 extern_extern_undeclared
171 extern_extern_undeclared2
181 extern_postdeclared
191 extern_postdeclared2
201 extern_predeclared
211 extern_predeclared2
221 extern_prepostdeclared
231 extern_undeclared
241 extern_undeclared2
251 inst2_extern_inline_postdeclared
261 inst2_extern_inline_predeclared
271 inst3_extern_inline_predeclared
281 inst_extern_inline_postdeclared
291 inst_extern_inline_predeclared
301 main
311 noinst_extern_inline_func
321 noinst_extern_inline_postdeclared
331 noinst_extern_inline_postdeclared2
341 noinst_extern_inline_undeclared
350 noinst_static_inline_postdeclared
360 noinst2_static_inline_postdeclared
370 noinst_static_inline_predeclared
380 noinst2_static_inline_predeclared
390 static_func
tests/tests2/104_inline_test.c+0−180
@@ -1,180 +0,0 @@
1#include <stdio.h>
2#include <stdlib.h>
3
4int str2file(const char *str, const char *fname)
5{
6 FILE *f = fopen(fname, "wb");
7 return !(f && fputs(str, f) >= 0 && fclose(f) == 0);
8}
9
10/*
11 * Wrap this sh script, which is compared to .expect (x.c is cFileContents):
12 * tcc -c x.c && nm -Ptx x.o | awk '{ if($2 == "T") print $1 }' | LC_ALL=C sort
13 * FIXME: Makefile should do it directly without this wrapper.
14 *
15 * Uses: sh, nm, awk, sort.
16 * Good enough: we use fixed temp files at CWD to avoid abs path conversions
17 * between *nix/Windows representations (shell, FILE APIs, tcc CLI arguments).
18 */
19#define TMP_SCRIPT "tmp-t104.sh"
20#define TMP_C "tmp-t104.c"
21#define TMP_O "tmp-t104.o"
22
23int main(int argc, char **argv)
24{
25 extern char const cfileContents[];
26 const char *tcc;
27 char script[1024];
28 int r = 1;
29 /* errors at system(..) or the script show at the diff to .expect */
30
31 /* TESTED_TCC is path/to/tcc + arguments */
32 if (!(tcc = argc > 1 ? argv[1] : getenv("TESTED_TCC")))
33 return fputs("unknown tcc executable", stderr), 1;
34
35 sprintf(script,
36 "%s -c "TMP_C" -o "TMP_O" || exit 1\n"
37 "nm -Ptx "TMP_O" | awk '{ if($2 == \"T\") print $1 }' | LC_ALL=C sort\n"
38 , tcc);
39
40 if (str2file(cfileContents, TMP_C) || str2file(script, TMP_SCRIPT))
41 perror("create "TMP_C"/"TMP_SCRIPT);
42 else
43 r = system("sh "TMP_SCRIPT);
44
45 remove(TMP_SCRIPT);
46 remove(TMP_C);
47 remove(TMP_O);
48 return r;
49}
50
51char const cfileContents[]=
52"inline void inline_inline_2decl_only(void);\n"
53"inline void inline_inline_2decl_only(void);\n"
54"\n"
55"inline void inline_inline_undeclared(void){}\n"
56"\n"
57"inline void inline_inline_predeclared(void);\n"
58"inline void inline_inline_predeclared(void){}\n"
59"\n"
60"inline void inline_inline_postdeclared(void){}\n"
61"inline void inline_inline_postdeclared(void);\n"
62"\n"
63"inline void inline_inline_prepostdeclared(void);\n"
64"inline void inline_inline_prepostdeclared(void){}\n"
65"inline void inline_inline_prepostdeclared(void);\n"
66"\n"
67"inline void inline_inline_undeclared2(void){}\n"
68"\n"
69"inline void inline_inline_predeclared2(void);\n"
70"inline void inline_inline_predeclared2(void);\n"
71"inline void inline_inline_predeclared2(void){}\n"
72"\n"
73"inline void inline_inline_postdeclared2(void){}\n"
74"inline void inline_inline_postdeclared2(void);\n"
75"inline void inline_inline_postdeclared2(void);\n"
76"\n"
77"inline void inline_inline_prepostdeclared2(void);\n"
78"inline void inline_inline_prepostdeclared2(void);\n"
79"inline void inline_inline_prepostdeclared2(void){}\n"
80"inline void inline_inline_prepostdeclared2(void);\n"
81"inline void inline_inline_prepostdeclared2(void);\n"
82"\n"
83"extern void extern_extern_undeclared(void){}\n"
84"\n"
85"extern void extern_extern_predeclared(void);\n"
86"extern void extern_extern_predeclared(void){}\n"
87"\n"
88"extern void extern_extern_postdeclared(void){}\n"
89"extern void extern_extern_postdeclared(void);\n"
90"\n"
91"extern void extern_extern_prepostdeclared(void);\n"
92"extern void extern_extern_prepostdeclared(void){}\n"
93"extern void extern_extern_prepostdeclared(void);\n"
94"\n"
95"extern void extern_extern_undeclared2(void){}\n"
96"\n"
97"extern void extern_extern_predeclared2(void);\n"
98"extern void extern_extern_predeclared2(void);\n"
99"extern void extern_extern_predeclared2(void){}\n"
100"\n"
101"extern void extern_extern_postdeclared2(void){}\n"
102"extern void extern_extern_postdeclared2(void);\n"
103"extern void extern_extern_postdeclared2(void);\n"
104"\n"
105"extern void extern_extern_prepostdeclared2(void);\n"
106"extern void extern_extern_prepostdeclared2(void);\n"
107"extern void extern_extern_prepostdeclared2(void){}\n"
108"extern void extern_extern_prepostdeclared2(void);\n"
109"extern void extern_extern_prepostdeclared2(void);\n"
110"\n"
111"void extern_undeclared(void){}\n"
112"\n"
113"void extern_predeclared(void);\n"
114"void extern_predeclared(void){}\n"
115"\n"
116"void extern_postdeclared(void){}\n"
117"void extern_postdeclared(void);\n"
118"\n"
119"void extern_prepostdeclared(void);\n"
120"void extern_prepostdeclared(void){}\n"
121"void extern_prepostdeclared(void);\n"
122"\n"
123"void extern_undeclared2(void){}\n"
124"\n"
125"void extern_predeclared2(void);\n"
126"void extern_predeclared2(void);\n"
127"void extern_predeclared2(void){}\n"
128"\n"
129"void extern_postdeclared2(void){}\n"
130"void extern_postdeclared2(void);\n"
131"void extern_postdeclared2(void);\n"
132"\n"
133"\n"
134"extern inline void noinst_extern_inline_undeclared(void){}\n"
135"\n"
136"extern inline void noinst_extern_inline_postdeclared(void){}\n"
137"inline void noinst_extern_inline_postdeclared(void);\n"
138"\n"
139"extern inline void noinst_extern_inline_postdeclared2(void){}\n"
140"inline void noinst_extern_inline_postdeclared2(void);\n"
141"inline void noinst_extern_inline_postdeclared2(void);\n"
142"\n"
143"extern inline void inst_extern_inline_postdeclared(void){}\n"
144"extern inline void inst_extern_inline_postdeclared(void);\n"
145"inline void inst2_extern_inline_postdeclared(void){}\n"
146"void inst2_extern_inline_postdeclared(void);\n"
147"\n"
148"void inst_extern_inline_predeclared(void);\n"
149"extern inline void inst_extern_inline_predeclared(void){}\n"
150"void inst2_extern_inline_predeclared(void);\n"
151"inline void inst2_extern_inline_predeclared(void){}\n"
152"extern inline void inst3_extern_inline_predeclared(void);\n"
153"inline void inst3_extern_inline_predeclared(void){}\n"
154"\n"
155"static inline void noinst_static_inline_postdeclared(void){}\n"
156"static inline void noinst_static_inline_postdeclared(void);\n"
157"static inline void noinst2_static_inline_postdeclared(void){}\n"
158"static void noinst2_static_inline_postdeclared(void);\n"
159"\n"
160"static void noinst_static_inline_predeclared(void);\n"
161"static inline void noinst_static_inline_predeclared(void){}\n"
162"static void noinst2_static_inline_predeclared(void);\n"
163"static inline void noinst2_static_inline_predeclared(void){}\n"
164"\n"
165"static void static_func(void);\n"
166"void static_func(void) { }\n"
167"\n"
168"inline void noinst_extern_inline_func(void);\n"
169"void noinst_extern_inline_func(void) { }\n"
170"int main()\n"
171"{\n"
172" inline_inline_undeclared(); inline_inline_predeclared(); inline_inline_postdeclared();\n"
173" inline_inline_undeclared2(); inline_inline_predeclared2(); inline_inline_postdeclared2();\n"
174" noinst_static_inline_predeclared();\n"
175" noinst2_static_inline_predeclared();\n"
176" noinst_static_inline_predeclared();\n"
177" noinst2_static_inline_predeclared();\n"
178"}\n"
179"\n"
180;
tests/tests2/104_inline_test.expect+0−25
@@ -1,25 +0,0 @@
1extern_extern_postdeclared
2extern_extern_postdeclared2
3extern_extern_predeclared
4extern_extern_predeclared2
5extern_extern_prepostdeclared
6extern_extern_prepostdeclared2
7extern_extern_undeclared
8extern_extern_undeclared2
9extern_postdeclared
10extern_postdeclared2
11extern_predeclared
12extern_predeclared2
13extern_prepostdeclared
14extern_undeclared
15extern_undeclared2
16inst2_extern_inline_postdeclared
17inst2_extern_inline_predeclared
18inst3_extern_inline_predeclared
19inst_extern_inline_postdeclared
20inst_extern_inline_predeclared
21main
22noinst_extern_inline_func
23noinst_extern_inline_postdeclared
24noinst_extern_inline_postdeclared2
25noinst_extern_inline_undeclared
tests/tests2/Makefile+4−3
@@ -3,9 +3,6 @@ include $(TOP)/Makefile · 2 unmodified lines
3SRC = $(TOPSRC)/tests/tests23SRC = $(TOPSRC)/tests/tests2
4VPATH = $(SRC)4VPATH = $(SRC)
5 5
6# used by 104_inline_test.c
7export TESTED_TCC = $(TCC)
8
9TESTS = $(patsubst %.c,%.test,\6TESTS = $(patsubst %.c,%.test,\
10 $(sort $(notdir $(wildcard $(SRC)/??_*.c)))\7 $(sort $(notdir $(wildcard $(SRC)/??_*.c)))\
11 $(sort $(notdir $(wildcard $(SRC)/???_*.c))))8 $(sort $(notdir $(wildcard $(SRC)/???_*.c))))
@@ -59,6 +56,10 @@ GEN-ALWAYS = · 47 unmodified lines
59# using the ms compiler for the really ms-compatible bitfields56# using the ms compiler for the really ms-compatible bitfields
6095_bitfields_ms.test : GEN = $(GEN-MSC)5795_bitfields_ms.test : GEN = $(GEN-MSC)
61 58
59# this test compiles/links two files:
60104_inline.test : FLAGS += 104+_inline.c
61104_inline.test : GEN = $(GEN-TCC)
62
62# Filter source directory in warnings/errors (out-of-tree builds)63# Filter source directory in warnings/errors (out-of-tree builds)
63FILTER = 2>&1 | sed 's,$(SRC)/,,g'64FILTER = 2>&1 | sed 's,$(SRC)/,,g'
64# Filter some always-warning65# Filter some always-warning

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t