aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile114
-rw-r--r--tests/tcctest.c5
-rw-r--r--tests/tests2/16_nesting.expect36
-rw-r--r--tests/tests2/17_enum.expect6
-rw-r--r--tests/tests2/18_include.expect6
-rw-r--r--tests/tests2/18_include.h2
-rw-r--r--tests/tests2/44_scoped_declarations.c34
-rw-r--r--tests/tests2/45_empty_for.c36
-rw-r--r--tests/tests2/50_logical_second_arg.c58
-rw-r--r--tests/tests2/54_goto.c112
-rw-r--r--tests/tests2/Makefile155
11 files changed, 270 insertions, 294 deletions
diff --git a/tests/Makefile b/tests/Makefile
index 7ea9d92..7685459 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -7,73 +7,61 @@ include $(TOP)/Makefile
VPATH = $(top_srcdir)/tests
# what tests to run
-TESTS = libtest \
- test1 \
- test2 \
- test3 \
- speedtest \
- btest \
- test1b\
- test2b\
- test3b\
- weaktest
+TESTS = \
+ hello \
+ libtest \
+ test3 \
+ moretests
- # test4 # this test does not seem to work on any platform
- # asmtest # this test does not seem to work on any platform
+# test4 -- problem with -static
+# asmtest -- minor differences with gcc
+# btest -- works on i386 (including win32)
+# test3 -- win32 does not know how to printf long doubles
# bounds-checking is supported only on i386
ifneq ($(ARCH),i386)
- TESTS := $(filter-out btest,$(TESTS))
- TESTS := $(filter-out test1b,$(TESTS))
- TESTS := $(filter-out test2b,$(TESTS))
- TESTS := $(filter-out test3b,$(TESTS))
+ TESTS := $(filter-out btest,$(TESTS))
endif
-
-# these should work too
-# TESTS += test1 test2 speedtest btest weaktest
-
-# some tests do not pass on all platforms, remove them for now
-ifeq ($(TARGETOS),Linux)
- TESTS := $(filter-out weaktest,$(TESTS))
+ifdef CONFIG_WIN32
+ TESTS := $(filter-out test3,$(TESTS))
endif
ifeq ($(TARGETOS),Darwin)
- TESTS := $(filter-out test1,$(TESTS))
- TESTS := $(filter-out test2,$(TESTS))
- TESTS := $(filter-out test3,$(TESTS))
- TESTS := $(filter-out btest,$(TESTS))
- TESTS := $(filter-out weaktest,$(TESTS))
+ TESTS := $(filter-out test3 btest,$(TESTS))
endif
ifdef DISABLE_STATIC
-export LD_LIBRARY_PATH:=$(CURDIR)/..
+ export LD_LIBRARY_PATH:=$(CURDIR)/..
endif
ifeq ($(TARGETOS),Darwin)
-CFLAGS+=-Wl,-flat_namespace,-undefined,warning
-export MACOSX_DEPLOYMENT_TARGET:=10.2
-NATIVE_DEFINES+=-D_ANSI_SOURCE
+ CFLAGS+=-Wl,-flat_namespace,-undefined,warning
+ export MACOSX_DEPLOYMENT_TARGET:=10.2
+ NATIVE_DEFINES+=-D_ANSI_SOURCE
endif
# run local version of tcc with local libraries and includes
-TCC = ../tcc -B.. $(NATIVE_DEFINES)
+TCCFLAGS = -B$(TOP)
ifdef CONFIG_WIN32
- TCC := $(TCC) -I $(top_srcdir)/win32/include -L$(top_build)
+ TCCFLAGS = -B$(top_srcdir)/win32 -I$(top_srcdir)/include -L$(TOP)
endif
-RUN_TCC = $(NATIVE_DEFINES) -run -DONE_SOURCE ../tcc.c -B..
-DISAS=objdump -d
-all test : $(TESTS)
+TCC = $(TOP)/tcc $(TCCFLAGS)
+RUN_TCC = $(NATIVE_DEFINES) -DONE_SOURCE -run $(TOP)/tcc.c $(TCCFLAGS)
-# make sure that tcc exists
-test1 test2 test3 test4 btest speedtest asmtest weaktest : ../tcc
-../%:
- $(MAKE) -C .. $*
+DISAS = objdump -d
# libtcc test
ifdef LIBTCC1
-LIBTCC1:=$(TOP)/$(LIBTCC1)
+ LIBTCC1:=$(TOP)/$(LIBTCC1)
endif
+all test : $(TESTS)
+
+hello: ../examples/ex1.c
+ @echo ------------ $@ ------------
+ $(TCC) $< -o $@$(EXESUF) && ./$@$(EXESUF)
+ $(TCC) -run $<
+
libtest: libtcc_test$(EXESUF) $(LIBTCC1)
@echo ------------ $@ ------------
./libtcc_test$(EXESUF) lib_path=..
@@ -81,6 +69,10 @@ libtest: libtcc_test$(EXESUF) $(LIBTCC1)
libtcc_test$(EXESUF): libtcc_test.c $(top_builddir)/$(LIBTCC)
$(CC) -o $@ $^ $(CPPFLAGS) $(CFLAGS) $(NATIVE_DEFINES) $(LIBS) $(LINK_LIBTCC) $(LDFLAGS)
+moretests:
+ @echo ------------ $@ ------------
+ $(MAKE) -C tests2
+
# test.ref - generate using gcc
# copy only tcclib.h so GCC's stddef and stdarg will be used
test.ref: tcctest.c
@@ -94,59 +86,44 @@ test1: test.ref
$(TCC) -run tcctest.c > test.out1
@if diff -u test.ref test.out1 ; then echo "Auto Test OK"; fi
-test1b: test.ref
- @echo ------------ $@ ------------
- $(TCC) -b -run tcctest.c > test.out1b
- @if diff -u test.ref test.out1b ; then echo "Auto Test OK"; fi
-
# iterated test2 (compile tcc then compile tcctest.c !)
test2: test.ref
@echo ------------ $@ ------------
$(TCC) $(RUN_TCC) $(RUN_TCC) -run tcctest.c > test.out2
@if diff -u test.ref test.out2 ; then echo "Auto Test2 OK"; fi
-test2b: test.ref ../bcheck.o
- @echo ------------ $@ ------------
- $(TCC) -b $(RUN_TCC) $(RUN_TCC) -run tcctest.c > test.out2b
- @if diff -u test.ref test.out2b ; then echo "Auto Test2b OK"; fi
-
# iterated test3 (compile tcc then compile tcc then compile tcctest.c !)
test3: test.ref
@echo ------------ $@ ------------
$(TCC) $(RUN_TCC) $(RUN_TCC) $(RUN_TCC) -run tcctest.c > test.out3
@if diff -u test.ref test.out3 ; then echo "Auto Test3 OK"; fi
-test3b: test.ref
- @echo ------------ $@ ------------
- $(TCC) -b $(RUN_TCC) $(RUN_TCC) $(RUN_TCC) -run tcctest.c > test.out3b
- @if diff -u test.ref test.out3b ; then echo "Auto Test3 OK"; fi
-
# binary output test
test4: test.ref
@echo ------------ $@ ------------
-# dynamic output
- $(TCC) -o tcctest1 tcctest.c
- ./tcctest1 > test1.out
- @if diff -u test.ref test1.out ; then echo "Dynamic Auto Test OK"; fi
# object + link output
$(TCC) -c -o tcctest3.o tcctest.c
$(TCC) -o tcctest3 tcctest3.o
./tcctest3 > test3.out
@if diff -u test.ref test3.out ; then echo "Object Auto Test OK"; fi
-# static output
- $(TCC) -static -o tcctest2 tcctest.c
- ./tcctest2 > test2.out
- @if diff -u test.ref test2.out ; then echo "Static Auto Test OK"; fi
+# dynamic output
+ $(TCC) -o tcctest1 tcctest.c
+ ./tcctest1 > test1.out
+ @if diff -u test.ref test1.out ; then echo "Dynamic Auto Test OK"; fi
# dynamic output + bound check
$(TCC) -b -o tcctest4 tcctest.c
./tcctest4 > test4.out
@if diff -u test.ref test4.out ; then echo "BCheck Auto Test OK"; fi
+# static output
+ $(TCC) -static -o tcctest2 tcctest.c
+ ./tcctest2 > test2.out
+ @if diff -u test.ref test2.out ; then echo "Static Auto Test OK"; fi
# memory and bound check auto test
BOUNDS_OK = 1 4 8 10 14
BOUNDS_FAIL= 2 5 7 9 11 12 13 15
-btest: boundtest.c ../bcheck.o
+btest: boundtest.c
@echo ------------ $@ ------------
@for i in $(BOUNDS_OK); do \
echo ; echo --- boundtest $$i ---; \
@@ -212,5 +189,6 @@ cache: tcc_g
# clean
clean:
- rm -vf *~ *.o *.a *.bin *.i *.ref *.out *.out? *.out?b *.gcc \
- tcctest[1234] ex? libtcc_test$(EXESUF) tcc_g tcclib.h
+ $(MAKE) -C tests2 $@
+ rm -vf *~ *.o *.a *.bin *.i *.ref *.out *.out? *.out?b *.gcc *.exe \
+ hello libtcc_test tcctest[1234] ex? tcc_g tcclib.h
diff --git a/tests/tcctest.c b/tests/tcctest.c
index 925418a..8e295fd 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -594,7 +594,9 @@ int main(int argc, char **argv)
local_label_test();
asm_test();
builtin_test();
+#ifndef _WIN32
weak_test();
+#endif
global_data_test();
cmp_comparison_test();
math_cmp_test();
@@ -2464,7 +2466,7 @@ void builtin_test(void)
printf("res = %d\n", __builtin_constant_p(constant_p_var));
}
-
+#ifndef _WIN32
extern int __attribute__((weak)) weak_f1(void);
extern int __attribute__((weak)) weak_f2(void);
extern int weak_f3(void);
@@ -2520,6 +2522,7 @@ int __attribute__((weak)) weak_f2() { return 222; }
int __attribute__((weak)) weak_f3() { return 333; }
int __attribute__((weak)) weak_v2 = 222;
int __attribute__((weak)) weak_v3 = 333;
+#endif
void const_func(const int a)
{
diff --git a/tests/tests2/16_nesting.expect b/tests/tests2/16_nesting.expect
index 625ee13..5a3431e 100644
--- a/tests/tests2/16_nesting.expect
+++ b/tests/tests2/16_nesting.expect
@@ -1,18 +1,18 @@
-0 0 0
-0 0 1
-0 0 2
-0 1 0
-0 1 1
-0 1 2
-0 2 0
-0 2 1
-0 2 2
-1 0 0
-1 0 1
-1 0 2
-1 1 0
-1 1 1
-1 1 2
-1 2 0
-1 2 1
-1 2 2
+0 0 0
+0 0 1
+0 0 2
+0 1 0
+0 1 1
+0 1 2
+0 2 0
+0 2 1
+0 2 2
+1 0 0
+1 0 1
+1 0 2
+1 1 0
+1 1 1
+1 1 2
+1 2 0
+1 2 1
+1 2 2
diff --git a/tests/tests2/17_enum.expect b/tests/tests2/17_enum.expect
index bef4be6..0c4e153 100644
--- a/tests/tests2/17_enum.expect
+++ b/tests/tests2/17_enum.expect
@@ -1,3 +1,3 @@
-0 1 2 3 54 73 74 75
-12
-54
+0 1 2 3 54 73 74 75
+12
+54
diff --git a/tests/tests2/18_include.expect b/tests/tests2/18_include.expect
index 87729df..58c6d29 100644
--- a/tests/tests2/18_include.expect
+++ b/tests/tests2/18_include.expect
@@ -1,3 +1,3 @@
-including
-included
-done
+including
+included
+done
diff --git a/tests/tests2/18_include.h b/tests/tests2/18_include.h
index 01f894d..dc86080 100644
--- a/tests/tests2/18_include.h
+++ b/tests/tests2/18_include.h
@@ -1 +1 @@
-printf("included\n");
+printf("included\n");
diff --git a/tests/tests2/44_scoped_declarations.c b/tests/tests2/44_scoped_declarations.c
index 2febf98..f38664f 100644
--- a/tests/tests2/44_scoped_declarations.c
+++ b/tests/tests2/44_scoped_declarations.c
@@ -1,17 +1,17 @@
-#include <stdio.h>
-
-int main()
-{
- int a;
-
- for (a = 0; a < 2; a++)
- {
- int b = a;
- }
-
- printf("it's all good\n");
-
- return 0;
-}
-
-/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
+#include <stdio.h>
+
+int main()
+{
+ int a;
+
+ for (a = 0; a < 2; a++)
+ {
+ int b = a;
+ }
+
+ printf("it's all good\n");
+
+ return 0;
+}
+
+/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
diff --git a/tests/tests2/45_empty_for.c b/tests/tests2/45_empty_for.c
index b14e9d4..7cef513 100644
--- a/tests/tests2/45_empty_for.c
+++ b/tests/tests2/45_empty_for.c
@@ -1,18 +1,18 @@
-#include <stdio.h>
-
-int main()
-{
- int Count = 0;
-
- for (;;)
- {
- Count++;
- printf("%d\n", Count);
- if (Count >= 10)
- break;
- }
-
- return 0;
-}
-
-/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
+#include <stdio.h>
+
+int main()
+{
+ int Count = 0;
+
+ for (;;)
+ {
+ Count++;
+ printf("%d\n", Count);
+ if (Count >= 10)
+ break;
+ }
+
+ return 0;
+}
+
+/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
diff --git a/tests/tests2/50_logical_second_arg.c b/tests/tests2/50_logical_second_arg.c
index 5fa0bb9..ddec08c 100644
--- a/tests/tests2/50_logical_second_arg.c
+++ b/tests/tests2/50_logical_second_arg.c
@@ -1,29 +1,29 @@
-#include <stdio.h>
-
-int fred()
-{
- printf("fred\n");
- return 0;
-}
-
-int joe()
-{
- printf("joe\n");
- return 1;
-}
-
-int main()
-{
- printf("%d\n", fred() && joe());
- printf("%d\n", fred() || joe());
- printf("%d\n", joe() && fred());
- printf("%d\n", joe() || fred());
- printf("%d\n", fred() && (1 + joe()));
- printf("%d\n", fred() || (0 + joe()));
- printf("%d\n", joe() && (0 + fred()));
- printf("%d\n", joe() || (1 + fred()));
-
- return 0;
-}
-
-/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
+#include <stdio.h>
+
+int fred()
+{
+ printf("fred\n");
+ return 0;
+}
+
+int joe()
+{
+ printf("joe\n");
+ return 1;
+}
+
+int main()
+{
+ printf("%d\n", fred() && joe());
+ printf("%d\n", fred() || joe());
+ printf("%d\n", joe() && fred());
+ printf("%d\n", joe() || fred());
+ printf("%d\n", fred() && (1 + joe()));
+ printf("%d\n", fred() || (0 + joe()));
+ printf("%d\n", joe() && (0 + fred()));
+ printf("%d\n", joe() || (1 + fred()));
+
+ return 0;
+}
+
+/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
diff --git a/tests/tests2/54_goto.c b/tests/tests2/54_goto.c
index 9509e83..2e151bb 100644
--- a/tests/tests2/54_goto.c
+++ b/tests/tests2/54_goto.c
@@ -1,56 +1,56 @@
-#include <stdio.h>
-
-void fred()
-{
- printf("In fred()\n");
- goto done;
- printf("In middle\n");
-done:
- printf("At end\n");
-}
-
-void joe()
-{
- int b = 5678;
-
- printf("In joe()\n");
-
- {
- int c = 1234;
- printf("c = %d\n", c);
- goto outer;
- printf("uh-oh\n");
- }
-
-outer:
-
- printf("done\n");
-}
-
-void henry()
-{
- int a;
-
- printf("In henry()\n");
- goto inner;
-
- {
- int b;
-inner:
- b = 1234;
- printf("b = %d\n", b);
- }
-
- printf("done\n");
-}
-
-int main()
-{
- fred();
- joe();
- henry();
-
- return 0;
-}
-
-/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
+#include <stdio.h>
+
+void fred()
+{
+ printf("In fred()\n");
+ goto done;
+ printf("In middle\n");
+done:
+ printf("At end\n");
+}
+
+void joe()
+{
+ int b = 5678;
+
+ printf("In joe()\n");
+
+ {
+ int c = 1234;
+ printf("c = %d\n", c);
+ goto outer;
+ printf("uh-oh\n");
+ }
+
+outer:
+
+ printf("done\n");
+}
+
+void henry()
+{
+ int a;
+
+ printf("In henry()\n");
+ goto inner;
+
+ {
+ int b;
+inner:
+ b = 1234;
+ printf("b = %d\n", b);
+ }
+
+ printf("done\n");
+}
+
+int main()
+{
+ fred();
+ joe();
+ henry();
+
+ return 0;
+}
+
+/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
diff --git a/tests/tests2/Makefile b/tests/tests2/Makefile
index d328ce7..bf7511f 100644
--- a/tests/tests2/Makefile
+++ b/tests/tests2/Makefile
@@ -1,103 +1,98 @@
-TOP = ..
+TOP = ../..
include $(TOP)/Makefile
-VPATH = $(top_srcdir)/tests2
+VPATH = $(top_srcdir)/tests/tests2
-ifeq ($(TARGETOS),Darwin)
- CFLAGS+=-Wl,-flat_namespace,-undefined,warning
- TCCFLAGS=-D_ANSI_SOURCE
- export MACOSX_DEPLOYMENT_TARGET:=10.2
+TCCFLAGS = -B$(TOP)
+ifdef CONFIG_WIN32
+ TCCFLAGS = -B$(top_srcdir)/win32 -I$(top_srcdir)/include -L$(TOP)
endif
-ifdef CONFIG_WIN32
- TCCFLAGS=-I $(TOP)/win32/include -L$(TOP)
+ifeq ($(TARGETOS),Darwin)
+ CFLAGS += -Wl,-flat_namespace,-undefined,warning
+ TCCFLAGS += -D_ANSI_SOURCE
+ export MACOSX_DEPLOYMENT_TARGET:=10.2
endif
-TESTS= 00_assignment.test \
- 01_comment.test \
- 02_printf.test \
- 03_struct.test \
- 04_for.test \
- 05_array.test \
- 06_case.test \
- 07_function.test \
- 08_while.test \
- 09_do_while.test \
- 10_pointer.test \
- 11_precedence.test \
- 12_hashdefine.test \
- 13_integer_literals.test \
- 14_if.test \
- 15_recursion.test \
- 16_nesting.test \
- 17_enum.test \
- 18_include.test \
- 19_pointer_arithmetic.test \
- 20_pointer_comparison.test \
- 21_char_array.test \
- 22_floating_point.test \
- 23_type_coercion.test \
- 24_math_library.test \
- 25_quicksort.test \
- 26_character_constants.test \
- 27_sizeof.test \
- 28_strings.test \
- 29_array_address.test \
- 31_args.test \
- 32_led.test \
- 33_ternary_op.test \
- 35_sizeof.test \
- 36_array_initialisers.test \
- 37_sprintf.test \
- 38_multiple_array_index.test \
- 39_typedef.test \
- 40_stdio.test \
- 41_hashif.test \
- 42_function_pointer.test \
- 43_void_param.test \
- 44_scoped_declarations.test \
- 45_empty_for.test \
- 47_switch_return.test \
- 48_nested_break.test \
- 49_bracket_evaluation.test \
- 50_logical_second_arg.test \
- 51_static.test \
- 52_unnamed_enum.test \
- 54_goto.test \
- 55_lshift_type.test
+TCC_RUN = $(TOP)/tcc $(TCCFLAGS) -run
- # 30_hanoi.test \ # seg fault in the code, gcc as well
- # 34_array_assignment.test \ # array assignment is not in C standard
- # 46_grep.test \ # does not compile even with gcc
+TESTS = \
+ 00_assignment.test \
+ 01_comment.test \
+ 02_printf.test \
+ 03_struct.test \
+ 04_for.test \
+ 05_array.test \
+ 06_case.test \
+ 07_function.test \
+ 08_while.test \
+ 09_do_while.test \
+ 10_pointer.test \
+ 11_precedence.test \
+ 12_hashdefine.test \
+ 13_integer_literals.test \
+ 14_if.test \
+ 15_recursion.test \
+ 16_nesting.test \
+ 17_enum.test \
+ 18_include.test \
+ 19_pointer_arithmetic.test \
+ 20_pointer_comparison.test \
+ 21_char_array.test \
+ 22_floating_point.test \
+ 23_type_coercion.test \
+ 24_math_library.test \
+ 25_quicksort.test \
+ 26_character_constants.test \
+ 27_sizeof.test \
+ 28_strings.test \
+ 29_array_address.test \
+ 31_args.test \
+ 32_led.test \
+ 33_ternary_op.test \
+ 35_sizeof.test \
+ 36_array_initialisers.test \
+ 37_sprintf.test \
+ 38_multiple_array_index.test \
+ 39_typedef.test \
+ 40_stdio.test \
+ 41_hashif.test \
+ 42_function_pointer.test \
+ 43_void_param.test \
+ 44_scoped_declarations.test \
+ 45_empty_for.test \
+ 47_switch_return.test \
+ 48_nested_break.test \
+ 49_bracket_evaluation.test \
+ 50_logical_second_arg.test \
+ 51_static.test \
+ 52_unnamed_enum.test \
+ 54_goto.test \
+ 55_lshift_type.test
+
+# 30_hanoi.test -- seg fault in the code, gcc as well
+# 34_array_assignment.test -- array assignment is not in C standard
+# 46_grep.test -- does not compile even with gcc
# some tests do not pass on all platforms, remove them for now
ifeq ($(TARGETOS),Darwin)
- TESTS := $(filter-out 40_stdio.test,$(TESTS))
+ TESTS := $(filter-out 40_stdio.test,$(TESTS))
endif
ifdef CONFIG_WIN32
- TESTS := $(filter-out 24_math_library.test,$(TESTS))
- TESTS := $(filter-out 28_strings.test,$(TESTS))
+ TESTS := $(filter-out 24_math_library.test 28_strings.test,$(TESTS))
endif
%.test: %.c %.expect
@echo Test: $*...
@if [ "x`echo $* | grep args`" != "x" ]; \
- then \
- ../tcc -B.. $(TCCFLAGS) -run $< - arg1 arg2 arg3 arg4 2>&1 >$*.output; \
- else \
- ../tcc -B.. $(TCCFLAGS) -run $< 2>&1 >$*.output; \
+ then $(TCC_RUN) $< - arg1 arg2 arg3 arg4 >$*.output; \
+ else $(TCC_RUN) $< >$*.output; \
fi
@if diff -bu $(<:.c=.expect) $*.output ; \
- then \
- rm -f $*.output \
- else \
- echo "ERROR: test $*"; \
+ then rm -f $*.output; \
+ else exit 1; \
fi
-all: test
-
-test: $(TESTS)
-
-# vim: set expandtab ts=4 sw=4 sts=4 tw=80 :
+all test: $(TESTS)
clean:
- rm -vf fred.txt
+ rm -vf fred.txt *.output