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+
6+int printf(const char*, ...);
7+
8+void 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 @@
1+inline void inline_inline_2decl_only(void);
2+inline void inline_inline_2decl_only(void);
3+
4+inline void inline_inline_undeclared(void){}
5+
6+inline void inline_inline_predeclared(void);
7+inline void inline_inline_predeclared(void){}
8+
9+inline void inline_inline_postdeclared(void){}
10+inline void inline_inline_postdeclared(void);
11+
12+inline void inline_inline_prepostdeclared(void);
13+inline void inline_inline_prepostdeclared(void){}
14+inline void inline_inline_prepostdeclared(void);
15+
16+inline void inline_inline_undeclared2(void){}
17+
18+inline void inline_inline_predeclared2(void);
19+inline void inline_inline_predeclared2(void);
20+inline void inline_inline_predeclared2(void){}
21+
22+inline void inline_inline_postdeclared2(void){}
23+inline void inline_inline_postdeclared2(void);
24+inline void inline_inline_postdeclared2(void);
25+
26+inline void inline_inline_prepostdeclared2(void);
27+inline void inline_inline_prepostdeclared2(void);
28+inline void inline_inline_prepostdeclared2(void){}
29+inline void inline_inline_prepostdeclared2(void);
30+inline void inline_inline_prepostdeclared2(void);
31+
32+extern void extern_extern_undeclared(void){}
33+
34+extern void extern_extern_predeclared(void);
35+extern void extern_extern_predeclared(void){}
36+
37+extern void extern_extern_postdeclared(void){}
38+extern void extern_extern_postdeclared(void);
39+
40+extern void extern_extern_prepostdeclared(void);
41+extern void extern_extern_prepostdeclared(void){}
42+extern void extern_extern_prepostdeclared(void);
43+
44+extern void extern_extern_undeclared2(void){}
45+
46+extern void extern_extern_predeclared2(void);
47+extern void extern_extern_predeclared2(void);
48+extern void extern_extern_predeclared2(void){}
49+
50+extern void extern_extern_postdeclared2(void){}
51+extern void extern_extern_postdeclared2(void);
52+extern void extern_extern_postdeclared2(void);
53+
54+extern void extern_extern_prepostdeclared2(void);
55+extern void extern_extern_prepostdeclared2(void);
56+extern void extern_extern_prepostdeclared2(void){}
57+extern void extern_extern_prepostdeclared2(void);
58+extern void extern_extern_prepostdeclared2(void);
59+
60+void extern_undeclared(void){}
61+
62+void extern_predeclared(void);
63+void extern_predeclared(void){}
64+
65+void extern_postdeclared(void){}
66+void extern_postdeclared(void);
67+
68+void extern_prepostdeclared(void);
69+void extern_prepostdeclared(void){}
70+void extern_prepostdeclared(void);
71+
72+void extern_undeclared2(void){}
73+
74+void extern_predeclared2(void);
75+void extern_predeclared2(void);
76+void extern_predeclared2(void){}
77+
78+void extern_postdeclared2(void){}
79+void extern_postdeclared2(void);
80+void extern_postdeclared2(void);
81+
82+
83+extern inline void noinst_extern_inline_undeclared(void){}
84+
85+extern inline void noinst_extern_inline_postdeclared(void){}
86+inline void noinst_extern_inline_postdeclared(void);
87+
88+extern inline void noinst_extern_inline_postdeclared2(void){}
89+inline void noinst_extern_inline_postdeclared2(void);
90+inline void noinst_extern_inline_postdeclared2(void);
91+
92+extern inline void inst_extern_inline_postdeclared(void){}
93+extern inline void inst_extern_inline_postdeclared(void);
94+inline void inst2_extern_inline_postdeclared(void){}
95+void inst2_extern_inline_postdeclared(void);
96+
97+void inst_extern_inline_predeclared(void);
98+extern inline void inst_extern_inline_predeclared(void){}
99+void inst2_extern_inline_predeclared(void);
100+inline void inst2_extern_inline_predeclared(void){}
101+extern inline void inst3_extern_inline_predeclared(void);
102+inline void inst3_extern_inline_predeclared(void){}
103+
104+static inline void noinst_static_inline_postdeclared(void){}
105+static inline void noinst_static_inline_postdeclared(void);
106+static inline void noinst2_static_inline_postdeclared(void){}
107+static void noinst2_static_inline_postdeclared(void);
108+
109+static void noinst_static_inline_predeclared(void);
110+static inline void noinst_static_inline_predeclared(void){}
111+static void noinst2_static_inline_predeclared(void);
112+static inline void noinst2_static_inline_predeclared(void){}
113+
114+static void static_func(void);
115+void static_func(void) { }
116+
117+inline void noinst_extern_inline_func(void);
118+void noinst_extern_inline_func(void) { }
119+
120+int 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 @@
1+0 inline_inline_2decl_only
2+0 inline_inline_undeclared
3+0 inline_inline_predeclared
4+0 inline_inline_postdeclared
5+0 inline_inline_prepostdeclared
6+0 inline_inline_undeclared2
7+0 inline_inline_predeclared2
8+0 inline_inline_postdeclared2
9+0 inline_inline_prepostdeclared2
10+1 extern_extern_postdeclared
11+1 extern_extern_postdeclared2
12+1 extern_extern_predeclared
13+1 extern_extern_predeclared2
14+1 extern_extern_prepostdeclared
15+1 extern_extern_prepostdeclared2
16+1 extern_extern_undeclared
17+1 extern_extern_undeclared2
18+1 extern_postdeclared
19+1 extern_postdeclared2
20+1 extern_predeclared
21+1 extern_predeclared2
22+1 extern_prepostdeclared
23+1 extern_undeclared
24+1 extern_undeclared2
25+1 inst2_extern_inline_postdeclared
26+1 inst2_extern_inline_predeclared
27+1 inst3_extern_inline_predeclared
28+1 inst_extern_inline_postdeclared
29+1 inst_extern_inline_predeclared
30+1 main
31+1 noinst_extern_inline_func
32+1 noinst_extern_inline_postdeclared
33+1 noinst_extern_inline_postdeclared2
34+1 noinst_extern_inline_undeclared
35+0 noinst_static_inline_postdeclared
36+0 noinst2_static_inline_postdeclared
37+0 noinst_static_inline_predeclared
38+0 noinst2_static_inline_predeclared
39+0 static_func
tests/tests2/104_inline_test.c+0−180
@@ -1,180 +0,0 @@
1−#include <stdio.h>
2−#include <stdlib.h>
3−
4−int 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−
23−int 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−
51−char 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 @@
1−extern_extern_postdeclared
2−extern_extern_postdeclared2
3−extern_extern_predeclared
4−extern_extern_predeclared2
5−extern_extern_prepostdeclared
6−extern_extern_prepostdeclared2
7−extern_extern_undeclared
8−extern_extern_undeclared2
9−extern_postdeclared
10−extern_postdeclared2
11−extern_predeclared
12−extern_predeclared2
13−extern_prepostdeclared
14−extern_undeclared
15−extern_undeclared2
16−inst2_extern_inline_postdeclared
17−inst2_extern_inline_predeclared
18−inst3_extern_inline_predeclared
19−inst_extern_inline_postdeclared
20−inst_extern_inline_predeclared
21−main
22−noinst_extern_inline_func
23−noinst_extern_inline_postdeclared
24−noinst_extern_inline_postdeclared2
25−noinst_extern_inline_undeclared
tests/tests2/Makefile+4−3
@@ -3,9 +3,6 @@ include $(TOP)/Makefile · 2 unmodified lines
33 SRC = $(TOPSRC)/tests/tests2
44 VPATH = $(SRC)
55
6−# used by 104_inline_test.c
7−export TESTED_TCC = $(TCC)
8−
96 TESTS = $(patsubst %.c,%.test,\
107 $(sort $(notdir $(wildcard $(SRC)/??_*.c)))\
118 $(sort $(notdir $(wildcard $(SRC)/???_*.c))))
@@ -59,6 +56,10 @@ GEN-ALWAYS = · 47 unmodified lines
5956 # using the ms compiler for the really ms-compatible bitfields
6057 95_bitfields_ms.test : GEN = $(GEN-MSC)
6158
59+# this test compiles/links two files:
60+104_inline.test : FLAGS += 104+_inline.c
61+104_inline.test : GEN = $(GEN-TCC)
62+
6263 # Filter source directory in warnings/errors (out-of-tree builds)
6364 FILTER = 2>&1 | sed 's,$(SRC)/,,g'
6465 # 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