فهرست منبع

* new testsuite setup

peter 25 سال پیش
والد
کامیت
c5dcb7d36d
100فایلهای تغییر یافته به همراه2842 افزوده شده و 0 حذف شده
  1. 1231 0
      tests/Makefile
  2. 104 0
      tests/Makefile.fpc
  3. 9 0
      tests/tbf/tb1.pp
  4. 6 0
      tests/tbf/tb10.pp
  5. 18 0
      tests/tbf/tb11.pp
  6. 18 0
      tests/tbf/tb12.pp
  7. 6 0
      tests/tbf/tb13.pp
  8. 6 0
      tests/tbf/tb14.pp
  9. 8 0
      tests/tbf/tb15.pp
  10. 42 0
      tests/tbf/tb16.pp
  11. 10 0
      tests/tbf/tb17.pp
  12. 21 0
      tests/tbf/tb18.pp
  13. 8 0
      tests/tbf/tb19.pp
  14. 9 0
      tests/tbf/tb2.pp
  15. 12 0
      tests/tbf/tb20.pp
  16. 8 0
      tests/tbf/tb21.pp
  17. 24 0
      tests/tbf/tb22.pp
  18. 20 0
      tests/tbf/tb23.pp
  19. 12 0
      tests/tbf/tb24.pp
  20. 23 0
      tests/tbf/tb25.pp
  21. 13 0
      tests/tbf/tb26.pp
  22. 20 0
      tests/tbf/tb27.pp
  23. 20 0
      tests/tbf/tb28.pp
  24. 20 0
      tests/tbf/tb29.pp
  25. 15 0
      tests/tbf/tb3.pp
  26. 11 0
      tests/tbf/tb30.pp
  27. 14 0
      tests/tbf/tb31.pp
  28. 17 0
      tests/tbf/tb32.pp
  29. 13 0
      tests/tbf/tb33.pp
  30. 12 0
      tests/tbf/tb34.pp
  31. 9 0
      tests/tbf/tb35.pp
  32. 14 0
      tests/tbf/tb36.pp
  33. 12 0
      tests/tbf/tb37.pp
  34. 13 0
      tests/tbf/tb38.pp
  35. 12 0
      tests/tbf/tb39.pp
  36. 12 0
      tests/tbf/tb4.pp
  37. 12 0
      tests/tbf/tb40.pp
  38. 16 0
      tests/tbf/tb41.pp
  39. 34 0
      tests/tbf/tb42.pp
  40. 14 0
      tests/tbf/tb43.pp
  41. 16 0
      tests/tbf/tb44.pp
  42. 17 0
      tests/tbf/tb45.pp
  43. 20 0
      tests/tbf/tb46.pp
  44. 11 0
      tests/tbf/tb47.pp
  45. 14 0
      tests/tbf/tb48.pp
  46. 29 0
      tests/tbf/tb49.pp
  47. 14 0
      tests/tbf/tb5.pp
  48. 16 0
      tests/tbf/tb50.pp
  49. 11 0
      tests/tbf/tb51.pp
  50. 24 0
      tests/tbf/tb52.pp
  51. 11 0
      tests/tbf/tb53.pp
  52. 39 0
      tests/tbf/tb54.pp
  53. 22 0
      tests/tbf/tb55.pp
  54. 12 0
      tests/tbf/tb56.pp
  55. 14 0
      tests/tbf/tb57.pp
  56. 7 0
      tests/tbf/tb58.pp
  57. 11 0
      tests/tbf/tb59.pp
  58. 24 0
      tests/tbf/tb6.pp
  59. 13 0
      tests/tbf/tb60.pp
  60. 14 0
      tests/tbf/tb61.pp
  61. 12 0
      tests/tbf/tb62.pp
  62. 8 0
      tests/tbf/tb63.pp
  63. 30 0
      tests/tbf/tb64.pp
  64. 9 0
      tests/tbf/tb65.pp
  65. 13 0
      tests/tbf/tb66.pp
  66. 17 0
      tests/tbf/tb67.pp
  67. 9 0
      tests/tbf/tb68.pp
  68. 24 0
      tests/tbf/tb69.pp
  69. 6 0
      tests/tbf/tb7.pp
  70. 8 0
      tests/tbf/tb70.pp
  71. 12 0
      tests/tbf/tb71.pp
  72. 8 0
      tests/tbf/tb72.pp
  73. 12 0
      tests/tbf/tb73.pp
  74. 17 0
      tests/tbf/tb74.pp
  75. 12 0
      tests/tbf/tb75.pp
  76. 18 0
      tests/tbf/tb76.pp
  77. 12 0
      tests/tbf/tb77.pp
  78. 11 0
      tests/tbf/tb78.pp
  79. 11 0
      tests/tbf/tb79.pp
  80. 8 0
      tests/tbf/tb8.pp
  81. 11 0
      tests/tbf/tb80.pp
  82. 12 0
      tests/tbf/tb81.pp
  83. 12 0
      tests/tbf/tb82.pp
  84. 12 0
      tests/tbf/tb83.pp
  85. 18 0
      tests/tbf/tb84.pp
  86. 34 0
      tests/tbf/tb85.pp
  87. 11 0
      tests/tbf/tb86.pp
  88. 8 0
      tests/tbf/tb87.pp
  89. 10 0
      tests/tbf/tb88.pp
  90. 10 0
      tests/tbf/tb89.pp
  91. 34 0
      tests/tbf/tb9.pp
  92. 10 0
      tests/tbf/tb90.pp
  93. 14 0
      tests/tbf/tb91.pp
  94. 20 0
      tests/tbf/tb92.pp
  95. 20 0
      tests/tbf/tb93.pp
  96. 23 0
      tests/tbf/tb94.pp
  97. 12 0
      tests/tbs/tb1.pp
  98. 16 0
      tests/tbs/tb10.pp
  99. 14 0
      tests/tbs/tb100.pp
  100. 47 0
      tests/tbs/tb101.pp

+ 1231 - 0
tests/Makefile

@@ -0,0 +1,1231 @@
+#
+# Makefile generated by fpcmake v1.00 [2000/10/27]
+#
+
+defaultrule: alltests
+
+#####################################################################
+# Autodetect OS (Linux or Dos or Windows NT)
+# define inUnix when running under Unix (Linux,FreeBSD)
+# define inWinNT when running under WinNT
+#####################################################################
+
+# We need only / in the path
+override PATH:=$(subst \,/,$(PATH))
+
+# Search for PWD and determine also if we are under linux
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH)))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH)))))
+ifeq ($(PWD),)
+nopwd:
+	@echo You need the GNU utils package to use this Makefile!
+	@echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip
+	@exit
+else
+inUnix=1
+endif
+else
+PWD:=$(firstword $(PWD))
+endif
+
+# Detect NT - NT sets OS to Windows_NT
+# Detect OS/2 - OS/2 has OS2_SHELL defined
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+endif
+
+# The extension of executables
+ifdef inUnix
+SRCEXEEXT=
+else
+SRCEXEEXT=.exe
+endif
+
+# The path which is searched separated by spaces
+ifdef inUnix
+SEARCHPATH=$(subst :, ,$(PATH))
+else
+SEARCHPATH=$(subst ;, ,$(PATH))
+endif
+
+# Base dir
+ifdef PWD
+BASEDIR:=$(shell $(PWD))
+else
+BASEDIR=.
+endif
+
+#####################################################################
+# FPC version/target Detection
+#####################################################################
+
+# What compiler to use ?
+ifndef FPC
+# Compatibility with old makefiles
+ifdef PP
+FPC=$(PP)
+else
+FPC=ppc386
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+
+# Target OS
+ifndef OS_TARGET
+OS_TARGET:=$(shell $(FPC) -iTO)
+endif
+
+# Source OS
+ifndef OS_SOURCE
+OS_SOURCE:=$(shell $(FPC) -iSO)
+endif
+
+# Target CPU
+ifndef CPU_TARGET
+CPU_TARGET:=$(shell $(FPC) -iTP)
+endif
+
+# Source CPU
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(shell $(FPC) -iSP)
+endif
+
+# FPC version
+ifndef FPC_VERSION
+FPC_VERSION:=$(shell $(FPC) -iV)
+endif
+
+export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
+
+#####################################################################
+# FPCDIR Setting
+#####################################################################
+
+# Test FPCDIR to look if the RTL dir exists
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(FPCDIR)/rtl),)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=wrong
+endif
+endif
+else
+override FPCDIR=wrong
+endif
+
+# Detect FPCDIR
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(FPCDIR)/rtl),)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(FPCDIR)/rtl),)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+endif
+
+#####################################################################
+# User Settings
+#####################################################################
+
+
+# Targets
+
+
+# Clean
+
+
+# Install
+
+ZIPTARGET=install
+
+# Defaults
+
+
+# Directories
+
+
+# Packages
+
+
+# Libraries
+
+
+# Info
+
+INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall 
+
+#####################################################################
+# Shell tools
+#####################################################################
+
+# echo
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=echo
+ECHOE:=echo
+else
+ECHO:=$(firstword $(ECHO))
+ECHOE=$(ECHO) -E
+endif
+else
+ECHO:=$(firstword $(ECHO))
+ECHOE=$(ECHO) -E
+endif
+endif
+
+# To copy pograms
+ifndef COPY
+COPY:=cp -fp
+endif
+
+# Copy a whole tree
+ifndef COPYTREE
+COPYTREE:=cp -rfp
+endif
+
+# To move pograms
+ifndef MOVE
+MOVE:=mv -f
+endif
+
+# Check delete program
+ifndef DEL
+DEL:=rm -f
+endif
+
+# Check deltree program
+ifndef DELTREE
+DELTREE:=rm -rf
+endif
+
+# To install files
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=install -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+
+# To install programs
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=install -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+
+# To make a directory.
+ifndef MKDIR
+ifdef inUnix
+MKDIR:=install -m 755 -d
+else
+MKDIR:=ginstall -m 755 -d
+endif
+endif
+
+export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+
+#####################################################################
+# Default Tools
+#####################################################################
+
+# assembler, redefine it if cross compiling
+ifndef AS
+AS=as
+endif
+
+# linker, but probably not used
+ifndef LD
+LD=ld
+endif
+
+# ppas.bat / ppas.sh
+ifdef inUnix
+PPAS=ppas.sh
+else
+ifdef inOS2
+PPAS=ppas.cmd
+else
+PPAS=ppas.bat
+endif
+endif
+
+# ldconfig to rebuild .so cache
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+
+# ppumove
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE=
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+
+# ppufiles
+ifndef PPUFILES
+PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUFILES),)
+PPUFILES=
+else
+PPUFILES:=$(firstword $(PPUFILES))
+endif
+endif
+export PPUFILES
+
+# Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
+# upx uses that one itself (PFV)
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+
+# ZipProg, you can't use Zip as the var name (PFV)
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG=
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+
+ZIPOPT=-9
+ZIPEXT=.zip
+
+# Tar
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG=
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+
+ifeq ($(USETAR),bz2)
+TAROPT=vI
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+
+#####################################################################
+# Default extensions
+#####################################################################
+
+# Default needed extensions (Go32v2,Linux)
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+RSTEXT=.rst
+FPCMADE=fpcmade
+
+# Go32v1
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+FPCMADE=fpcmade.v1
+endif
+
+# Go32v2
+ifeq ($(OS_TARGET),go32v2)
+FPCMADE=fpcmade.dos
+endif
+
+# Linux
+ifeq ($(OS_TARGET),linux)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.lnx
+endif
+
+# Linux
+ifeq ($(OS_TARGET),freebsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.freebsd
+endif
+
+# Win32
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.w32
+endif
+
+# OS/2
+ifeq ($(OS_TARGET),os2)
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+SMARTEXT=.so
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.os2
+endif
+
+# library prefix
+LIBPREFIX=lib
+ifeq ($(OS_TARGET),go32v2)
+LIBPREFIX=
+endif
+ifeq ($(OS_TARGET),go32v1)
+LIBPREFIX=
+endif
+
+# determine which .pas extension is used
+ifndef PASEXT
+ifdef EXEOBJECTS
+override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
+else
+override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
+endif
+ifeq ($(TESTPAS),)
+PASEXT=.pp
+else
+PASEXT=.pas
+endif
+endif
+
+
+
+#####################################################################
+# Default Directories
+#####################################################################
+
+# Linux and freebsd use unix dirs with /usr/bin, /usr/lib
+# When zipping use the target as default, when normal install then
+# use the source os as default
+ifdef ZIPNAME
+# Zipinstall
+ifeq ($(OS_TARGET),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),freebsd)
+UNIXINSTALLDIR=1
+endif
+else
+# Normal install
+ifeq ($(OS_SOURCE),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),freebsd)
+UNIXINSTALLDIR=1
+endif
+endif
+
+# set the prefix directory where to install everything
+ifndef PREFIXINSTALLDIR
+ifdef UNIXINSTALLDIR
+PREFIXINSTALLDIR=/usr
+else
+PREFIXINSTALLDIR=/pp
+endif
+endif
+export PREFIXINSTALLDIR
+
+# Where to place the resulting zip files
+ifndef DESTZIPDIR
+DESTZIPDIR:=$(BASEDIR)
+endif
+export DESTZIPDIR
+
+#####################################################################
+# Install Directories
+#####################################################################
+
+# set the base directory where to install everything
+ifndef BASEINSTALLDIR
+ifdef UNIXINSTALLDIR
+BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
+else
+BASEINSTALLDIR=$(PREFIXINSTALLDIR)
+endif
+endif
+
+# set the directory where to install the binaries
+ifndef BININSTALLDIR
+ifdef UNIXINSTALLDIR
+BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
+else
+BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
+endif
+endif
+
+# set the directory where to install the units.
+ifndef UNITINSTALLDIR
+UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET)
+ifdef UNITSUBDIR
+UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR)
+endif
+endif
+
+# Where to install shared libraries
+ifndef LIBINSTALLDIR
+ifdef UNIXINSTALLDIR
+LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
+else
+LIBINSTALLDIR=$(UNITINSTALLDIR)
+endif
+endif
+
+# Where the source files will be stored
+ifndef SOURCEINSTALLDIR
+ifdef UNIXINSTALLDIR
+SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
+else
+SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
+endif
+ifdef SOURCESUBDIR
+SOURCEINSTALLDIR:=$(SOURCEINSTALLDIR)/$(SOURCESUBDIR)
+endif
+endif
+
+# Where the doc files will be stored
+ifndef DOCINSTALLDIR
+ifdef UNIXINSTALLDIR
+DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION)
+else
+DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
+endif
+endif
+
+# Where to install the examples, under linux we use the doc dir
+# because the copytree command will create a subdir itself
+ifndef EXAMPLEINSTALLDIR
+ifdef UNIXINSTALLDIR
+EXAMPLEINSTALLDIR=$(DOCINSTALLDIR)/examples
+else
+EXAMPLEINSTALLDIR=$(BASEINSTALLDIR)/examples
+endif
+ifdef EXAMPLESUBDIR
+EXAMPLEINSTALLDIR:=$(EXAMPLEINSTALLDIR)/$(EXAMPLESUBDIR)
+endif
+endif
+
+# Where the some extra (data)files will be stored
+ifndef DATAINSTALLDIR
+DATAINSTALLDIR=$(BASEINSTALLDIR)
+endif
+
+#####################################################################
+# Redirection
+#####################################################################
+
+ifndef REDIRFILE
+REDIRFILE=log
+endif
+
+ifdef REDIR
+ifndef inUnix
+override FPC=redir -eo $(FPC)
+endif
+# set the verbosity to max
+override FPCOPT+=-va
+override REDIR:= >> $(REDIRFILE)
+endif
+
+
+#####################################################################
+# Compiler Command Line
+#####################################################################
+
+# Load commandline OPTDEF and add FPC_CPU define
+override FPCOPTDEF:=-d$(CPU_TARGET)
+
+# Load commandline OPT and add target and unit dir to be sure
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+
+# User dirs should be first, so they are looked at first
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+
+# Smartlinking
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+
+# Smartlinking creation
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+
+# Debug
+ifdef DEBUG
+override FPCOPT+=-gl -dDEBUG
+endif
+
+# Release mode (strip, optimize and don't load ppc386.cfg)
+# 0.99.12b has a bug in the optimizer so don't use it by default
+ifdef RELEASE
+ifeq ($(FPC_VERSION),0.99.12)
+override FPCOPT+=-Xs -OGp3 -n
+else
+override FPCOPT+=-Xs -OG2p3 -n
+endif
+endif
+
+# Strip
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+
+# Optimizer
+ifdef OPTIMIZE
+override FPCOPT+=-OG2p3
+endif
+
+# Verbose settings (warning,note,info)
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+
+ifdef UNITSDIR
+override FPCOPT+=-Fu$(UNITSDIR)
+endif
+
+# Target dirs and the prefix to use for clean/install
+ifdef TARGETDIR
+override FPCOPT+=-FE$(TARGETDIR)
+ifeq ($(TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(TARGETDIR)/
+endif
+endif
+ifdef UNITTARGETDIR
+override FPCOPT+=-FU$(UNITTARGETDIR)
+ifeq ($(UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(TARGETDIR)/
+endif
+else
+ifdef TARGETDIR
+override UNITTARGETDIR=$(TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+
+# Add commandline options last so they can override
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+
+# Add defines from FPCOPTDEF to FPCOPT
+ifdef FPCOPTDEF
+override FPCOPT+=$(FPCOPTDEF)
+endif
+
+# Error file ?
+ifdef ERRORFILE
+override FPCOPT+=-Fr$(ERRORFILE)
+endif
+
+# Was a config file specified ?
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+
+# For win32 the options are passed using the environment FPCEXTCMD
+ifeq ($(OS_SOURCE),win32)
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+
+# Compiler commandline
+override COMPILER:=$(FPC) $(FPCOPT)
+
+# also call ppas if with command option -s
+# but only if the OS_SOURCE and OS_TARGE are equal
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(OS_SOURCE),$(OS_TARGET))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+
+#####################################################################
+# Standard rules
+#####################################################################
+
+debug: fpc_debug
+
+smart: fpc_smart
+
+shared: fpc_shared
+
+showinstall: fpc_showinstall
+
+install: fpc_install
+
+sourceinstall: fpc_sourceinstall
+
+exampleinstall: fpc_exampleinstall
+
+zipinstall: fpc_zipinstall
+
+zipsourceinstall: fpc_zipsourceinstall
+
+zipexampleinstall: fpc_zipexampleinstall
+
+distclean: fpc_distclean
+
+cleanall: fpc_cleanall
+
+.PHONY:  debug smart shared showinstall install sourceinstall exampleinstall zipinstall zipsourceinstall zipexampleinstall distclean cleanall
+
+#####################################################################
+# General compile rules
+#####################################################################
+
+.PHONY: fpc_packages fpc_all fpc_debug
+
+$(FPCMADE): $(ALLTARGET)
+	@$(ECHO) Compiled > $(FPCMADE)
+
+fpc_packages: $(COMPILEPACKAGES)
+
+fpc_all: fpc_packages $(FPCMADE)
+
+fpc_debug:
+	$(MAKE) all DEBUG=1
+
+# Search paths for .ppu if targetdir is set
+ifdef UNITTARGETDIR
+vpath %$(PPUEXT) $(UNITTARGETDIR)
+endif
+
+# General compile rules, available for both possible PASEXT
+
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
+
+%$(PPUEXT): %.pp
+	$(COMPILER) $< $(REDIR)
+	$(EXECPPAS)
+
+%$(PPUEXT): %.pas
+	$(COMPILER) $< $(REDIR)
+	$(EXECPPAS)
+
+%$(EXEEXT): %.pp
+	$(COMPILER) $< $(REDIR)
+	$(EXECPPAS)
+
+%$(EXEEXT): %.pas
+	$(COMPILER) $< $(REDIR)
+	$(EXECPPAS)
+
+#####################################################################
+# Library
+#####################################################################
+
+.PHONY: fpc_smart fpc_shared
+
+ifdef LIBVERSION
+LIBFULLNAME=$(LIBNAME).$(LIBVERSION)
+else
+LIBFULLNAME=$(LIBNAME)
+endif
+
+# Default sharedlib units are all unit objects
+ifndef SHAREDLIBUNITOBJECTS
+SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
+endif
+
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+
+fpc_shared: all
+ifdef HASSHAREDLIB
+ifndef LIBNAME
+	@$(ECHO) "LIBNAME not set"
+else
+	$(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBFULLNAME)
+endif
+else
+	@$(ECHO) "Shared Libraries not supported"
+endif
+
+#####################################################################
+# Install rules
+#####################################################################
+
+.PHONY: fpc_showinstall fpc_install
+
+ifdef EXTRAINSTALLUNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
+endif
+
+ifdef INSTALLPPUFILES
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
+ifdef PPUFILES
+INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
+else
+INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))))
+endif
+override INSTALLPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES))
+endif
+
+ifdef INSTALLEXEFILES
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
+endif
+
+fpc_showinstall: $(SHOWINSTALLTARGET)
+ifdef INSTALLEXEFILES
+	@$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
+endif
+ifdef INSTALLPPUFILES
+	@$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
+ifneq ($(INSTALLPPULINKFILES),)
+	@$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
+endif
+ifneq ($(wildcard $(LIBFULLNAME)),)
+	@$(ECHO) $(LIBINSTALLDIR)/$(LIBFULLNAME)
+ifdef HASSHAREDLIB
+	@$(ECHO) $(LIBINSTALLDIR)/$(LIBNAME)
+endif
+endif
+endif
+ifdef EXTRAINSTALLFILES
+	@$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES))
+endif
+
+fpc_install: $(INSTALLTARGET)
+# Create UnitInstallFiles
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(BININSTALLDIR)
+# Compress the exes if upx is defined
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(UNITINSTALLDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
+endif
+ifneq ($(wildcard $(LIBFULLNAME)),)
+	$(MKDIR) $(LIBINSTALLDIR)
+	$(INSTALL) $(LIBFULLNAME) $(LIBINSTALLDIR)
+ifdef inUnix
+	ln -sf $(LIBFULLNAME) $(LIBINSTALLDIR)/$(LIBNAME)
+endif
+endif
+endif
+ifdef EXTRAINSTALLFILES
+	$(MKDIR) $(DATAINSTALLDIR)
+	$(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR)
+endif
+
+#####################################################################
+# SourceInstall rules
+#####################################################################
+
+.PHONY: fpc_sourceinstall
+
+ifndef SOURCETOPDIR
+SOURCETOPDIR=$(BASEDIR)
+endif
+
+fpc_sourceinstall: clean
+	$(MKDIR) $(SOURCEINSTALLDIR)
+	$(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR)
+
+#####################################################################
+# exampleinstall rules
+#####################################################################
+
+.PHONY: fpc_exampleinstall
+
+fpc_exampleinstall: $(addsuffix _clean,$(EXAMPLEDIROBJECTS))
+ifdef EXAMPLESOURCEFILES
+	$(MKDIR) $(EXAMPLEINSTALLDIR)
+	$(COPY) $(EXAMPLESOURCEFILES) $(EXAMPLEINSTALLDIR)
+endif
+ifdef EXAMPLEDIROBJECTS
+ifndef EXAMPLESOURCEFILES
+	$(MKDIR) $(EXAMPLEINSTALLDIR)
+endif
+	$(COPYTREE) $(addsuffix /*,$(EXAMPLEDIROBJECTS)) $(EXAMPLEINSTALLDIR)
+endif
+
+#####################################################################
+# Zip
+#####################################################################
+
+.PHONY: fpc_zipinstall
+
+# Create suffix to add
+ifndef PACKAGESUFFIX
+PACKAGESUFFIX=$(OS_TARGET)
+ifeq ($(OS_TARGET),go32v2)
+PACKAGESUFFIX=go32
+endif
+ifeq ($(OS_TARGET),win32)
+PACKAGESUFFIX=w32
+endif
+endif
+
+# Temporary path to pack a file
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/pack_tmp
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+
+# Maybe create default zipname from packagename
+ifndef ZIPNAME
+ifdef PACKAGENAME
+ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX)
+endif
+endif
+
+# Use tar by default under linux
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+
+fpc_zipinstall:
+ifndef ZIPNAME
+	@$(ECHO) "Please specify ZIPNAME!"
+	@exit 1
+else
+	$(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
+ifdef USETAR
+	$(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT)
+	cd $(PACKDIR) ; $(TARPROG) cf$(TAROPT) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR)
+else
+	$(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT)
+	cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR)
+endif
+	$(DELTREE) $(PACKDIR)
+endif
+
+.PHONY:  fpc_zipsourceinstall
+
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src
+
+.PHONY:  fpc_zipexampleinstall
+
+fpc_zipexampleinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall PACKAGESUFFIX=exm
+
+#####################################################################
+# Clean rules
+#####################################################################
+
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+
+ifdef EXTRACLEANUNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
+endif
+
+ifdef CLEANPPUFILES
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+# Get the .o and .a files created for the units
+ifdef PPUFILES
+CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
+else
+CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))))
+endif
+override CLEANPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))
+endif
+
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef EXTRACLEANFILES
+	-$(DEL) $(EXTRACLEANFILES)
+endif
+ifdef LIBNAME
+	-$(DEL) $(LIBNAME) $(LIBFULLNAME)
+endif
+	-$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
+
+fpc_distclean: fpc_clean
+
+# Also run clean first if targetdir is set. Unittargetdir is always
+# set if targetdir or unittargetdir is specified
+ifdef UNITTARGETDIR
+TARGETDIRCLEAN=fpc_clean
+endif
+
+fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
+
+#####################################################################
+# Info rules
+#####################################################################
+
+.PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
+	fpc_dirinfo
+
+fpc_info: $(INFOTARGET)
+
+fpc_infocfg:
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC....... $(FPC)
+	@$(ECHO)  Version... $(FPC_VERSION)
+	@$(ECHO)  CPU....... $(CPU_TARGET)
+	@$(ECHO)  Source.... $(OS_SOURCE)
+	@$(ECHO)  Target.... $(OS_TARGET)
+	@$(ECHO)
+
+fpc_infoobjects:
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  LoaderObjects..... $(LOADEROBJECTS)
+	@$(ECHO)  UnitObjects....... $(UNITOBJECTS)
+	@$(ECHO)  ExeObjects........ $(EXEOBJECTS)
+	@$(ECHO)
+	@$(ECHO)  ExtraCleanUnits... $(EXTRACLEANUNITS)
+	@$(ECHO)  ExtraCleanFiles... $(EXTRACLEANFILES)
+	@$(ECHO)
+	@$(ECHO)  ExtraInstallUnits. $(EXTRAINSTALLUNITS)
+	@$(ECHO)  ExtraInstallFiles. $(EXTRAINSTALLFILES)
+	@$(ECHO)
+
+fpc_infoinstall:
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+ifdef DATE
+	@$(ECHO)  DateStr.............. $(DATESTR)
+endif
+ifdef PACKAGEPREFIX
+	@$(ECHO)  PackagePrefix........ $(PACKAGEPREFIX)
+endif
+ifdef PACKAGENAME
+	@$(ECHO)  PackageName.......... $(PACKAGENAME)
+endif
+	@$(ECHO)  PackageSuffix........ $(PACKAGESUFFIX)
+	@$(ECHO)
+	@$(ECHO)  BaseInstallDir....... $(BASEINSTALLDIR)
+	@$(ECHO)  BinInstallDir........ $(BININSTALLDIR)
+	@$(ECHO)  LibInstallDir........ $(LIBINSTALLDIR)
+	@$(ECHO)  UnitInstallDir....... $(UNITINSTALLDIR)
+	@$(ECHO)  SourceInstallDir..... $(SOURCEINSTALLDIR)
+	@$(ECHO)  DocInstallDir........ $(DOCINSTALLDIR)
+	@$(ECHO)  DataInstallDir....... $(DATAINSTALLDIR)
+	@$(ECHO)
+	@$(ECHO)  DestZipDir........... $(DESTZIPDIR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)
+
+#####################################################################
+# Local Makefile
+#####################################################################
+
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+
+#####################################################################
+# Users rules
+#####################################################################
+
+.PHONY: all units tests cont_tests
+
+# Unix like OS ?
+ifeq ($(OS_TARGET),linux)
+INUNIX=1
+endif
+ifeq ($(OS_TARGET),freebsd)
+INUNIX=1
+endif
+
+# For linux by default no graph tests
+ifdef INUNIX
+NOGRAPH=1
+endif
+
+
+#
+# Tools
+#
+
+ifndef LONGLOG
+export LONGLOG:=longlog
+endif
+
+ifndef LOG
+export LOG:=log
+endif
+
+units : units/$(FPCMADE)
+units/$(FPCMADE):
+	$(MAKE) -C units
+
+DOTEST=dotest$(EXEEXT)
+$(DOTEST) : utils/dotest.pp utils/redir.pp
+	$(FPC) -Fu../units -FE. utils/dotest
+
+testcheck: units $(DOTEST)
+
+#
+# Test run targets
+#
+
+DIRS=webtbs webtbf tbs tbf test testopt
+
+all : alltests
+
+tests : clean all_compilations
+
+cont_tests : all_compilations
+
+%.log : %.pp
+	$(DOTEST) $<
+
+%.elg : %.pp
+	$(DOTEST) -e $<
+
+alltbs : testcheck $(patsubst %.pp,%.log,$(wildcard tbs/*.pp))
+alltbf : testcheck $(patsubst %.pp,%.log,$(wildcard tbf/*.pp))
+
+allwebtbs : testcheck $(patsubst %.pp,%.log,$(wildcard webtbs/*.pp))
+allwebtbf : testcheck $(patsubst %.pp,%.log,$(wildcard webtbs/*.pp))
+
+alltest : testcheck $(patsubst %.pp,%.log,$(wildcard test/*.pp))
+alltestopt : testcheck $(patsubst %.pp,%.log,$(wildcard testopt/*.pp))
+
+alltests: alltest alltbs alltbf allwebtbs allwebtbf
+
+clean:
+	-rm -f $(addsuffix /*$(PPUEXT),$(DIRS))
+	-rm -f $(addsuffix /*$(OEXT),$(DIRS))
+	-rm -f $(addsuffix /*.rst,$(DIRS))
+	-rm -f $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
+	-rm -f $(addsuffix /*.log,$(DIRS))
+	-rm -f $(addsuffix /*.elg,$(DIRS))
+ifdef INUNIX
+	-rm -f $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
+else
+	-rm -f $(addsuffix /*$(EXEEXT),$(DIRS))
+endif
+	-rm -f *.tmp
+	-rm -f $(LOG) $(LONGLOG) fail
+	-rm -f ppas.sh ppas.bat
+
+full : clean all_compilations allexec
+
+info :
+	@echo This Makefile allows to test the compiler
+	@echo compilation of 'ts*.pp' should succeed
+	@echo compilation of 'tf*.pp' should fail
+	@echo compilation of 'test*.pp' should succeed
+	@echo 'to*.pp' files should also compile
+	@echo simply run \'make tests\' to test all compilation
+	@echo run \'make allexec\' to test also if the executables
+	@echo created behave like the should
+	@echo run \'make tesiexec\' to test executables
+	@echo that require interactive mode

+ 104 - 0
tests/Makefile.fpc

@@ -0,0 +1,104 @@
+#
+# Makefile.fpc for Free Pascal Tests directory
+#
+
+[defaults]
+defaultrule=alltests
+
+[rules]
+.PHONY: all units tests cont_tests
+
+# Unix like OS ?
+ifeq ($(OS_TARGET),linux)
+INUNIX=1
+endif
+ifeq ($(OS_TARGET),freebsd)
+INUNIX=1
+endif
+
+# For linux by default no graph tests
+ifdef INUNIX
+NOGRAPH=1
+endif
+
+
+#
+# Tools
+#
+
+ifndef LONGLOG
+export LONGLOG:=longlog
+endif
+
+ifndef LOG
+export LOG:=log
+endif
+
+units : units/$(FPCMADE)
+units/$(FPCMADE):
+	$(MAKE) -C units
+
+DOTEST=dotest$(EXEEXT)
+$(DOTEST) : utils/dotest.pp utils/redir.pp
+	$(FPC) -Fu../units -FE. utils/dotest
+
+testcheck: units $(DOTEST)
+
+#
+# Test run targets
+#
+
+DIRS=webtbs webtbf tbs tbf test testopt
+
+all : alltests
+
+tests : clean all_compilations
+
+cont_tests : all_compilations
+
+%.log : %.pp
+	$(DOTEST) $<
+
+%.elg : %.pp
+	$(DOTEST) -e $<
+
+alltbs : testcheck $(patsubst %.pp,%.log,$(wildcard tbs/*.pp))
+alltbf : testcheck $(patsubst %.pp,%.log,$(wildcard tbf/*.pp))
+
+allwebtbs : testcheck $(patsubst %.pp,%.log,$(wildcard webtbs/*.pp))
+allwebtbf : testcheck $(patsubst %.pp,%.log,$(wildcard webtbs/*.pp))
+
+alltest : testcheck $(patsubst %.pp,%.log,$(wildcard test/*.pp))
+alltestopt : testcheck $(patsubst %.pp,%.log,$(wildcard testopt/*.pp))
+
+alltests: alltest alltbs alltbf allwebtbs allwebtbf
+
+clean:
+	-rm -f $(addsuffix /*$(PPUEXT),$(DIRS))
+	-rm -f $(addsuffix /*$(OEXT),$(DIRS))
+	-rm -f $(addsuffix /*.rst,$(DIRS))
+	-rm -f $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
+	-rm -f $(addsuffix /*.log,$(DIRS))
+	-rm -f $(addsuffix /*.elg,$(DIRS))
+ifdef INUNIX
+	-rm -f $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
+else
+	-rm -f $(addsuffix /*$(EXEEXT),$(DIRS))
+endif
+	-rm -f *.tmp
+	-rm -f $(LOG) $(LONGLOG) fail
+	-rm -f ppas.sh ppas.bat
+
+full : clean all_compilations allexec
+
+info :
+	@echo This Makefile allows to test the compiler
+	@echo compilation of 'ts*.pp' should succeed
+	@echo compilation of 'tf*.pp' should fail
+	@echo compilation of 'test*.pp' should succeed
+	@echo 'to*.pp' files should also compile
+	@echo simply run \'make tests\' to test all compilation
+	@echo run \'make allexec\' to test also if the executables
+	@echo created behave like the should
+	@echo run \'make tesiexec\' to test executables
+	@echo that require interactive mode

+ 9 - 0
tests/tbf/tb1.pp

@@ -0,0 +1,9 @@
+{ Old file: tbf0008.pp }
+{  tests the crash when decrementing constants         OK 0.9.2 }
+
+const
+   compilerconst=1;
+
+begin
+   dec(compilerconst);
+end.

+ 6 - 0
tests/tbf/tb10.pp

@@ -0,0 +1,6 @@
+{ Old file: tbf0085.pp }
+{  shows runerror 216                                    OK 0.99.1 (CEC) }
+
+Begin
+ writeln(l);
+end.

+ 18 - 0
tests/tbf/tb11.pp

@@ -0,0 +1,18 @@
+{ Old file: tbf0086.pp }
+{  shows runerror 216                                    OK 0.99.1 (CEC) }
+
+
+var
+ v: word;
+ w: shortint;
+ z: byte;
+ y: integer;
+
+type
+ zz: shortint = 255;
+Begin
+ y:=64000;
+ z:=32767;
+ w:=64000;
+ v:=-1;
+end.

+ 18 - 0
tests/tbf/tb12.pp

@@ -0,0 +1,18 @@
+{ Old file: tbf0087.pp }
+{  shows internal error 12 - no more SegFaults           OK 0.99.1 (FK) }
+
+{
+  BP Error message is 'Pointer variable Expected'
+}
+type
+  tobj=object
+    l : longint;
+    constructor init;
+  end;
+var
+  o : tobj;
+begin
+  new(o);            {This will create a internal error 9999}
+  new(o,init);       {This will create a Segfault and Core Dump under linux}
+end.
+    

+ 6 - 0
tests/tbf/tb13.pp

@@ -0,0 +1,6 @@
+{ Old file: tbf0088.pp }
+{  internal error 12 or Runerror 216                     OK 0.99.1 (FK) }
+
+Begin
+ typeof(x1);    { Gives out an internal error -- better then 9999 though }
+end.

+ 6 - 0
tests/tbf/tb14.pp

@@ -0,0 +1,6 @@
+{ Old file: tbf0089.pp }
+{  internal error 12 or Runerror 216                     OK 0.99.1 (FK) }
+
+Begin
+ sizeof(x);
+end.

+ 8 - 0
tests/tbf/tb15.pp

@@ -0,0 +1,8 @@
+{ Old file: tbf0094.pp }
+{ internal error when recordtype not found with case    OK 0.99.1 }
+
+begin
+  case textrec(l).mode of
+   1 ;
+  end;
+end.

+ 42 - 0
tests/tbf/tb16.pp

@@ -0,0 +1,42 @@
+{ Old file: tbf0097.pp }
+{ two errors in bp7 but not in FPC                      OK 0.99.6 (FK) }
+
+{
+  This compiles fine with FPC, but not with Bp7 see 2 comments
+}
+
+type
+  t=object
+    s : string;      { No ; needed ? }
+    procedure p;
+  end;
+
+  t2=object(t)
+    procedure p1(p : string);
+  end;
+
+procedure t2.p1(p : string);
+
+  begin
+  end;
+
+procedure t.p;
+
+var
+  s : longint;      { Not allowed with BP7 }
+  x : longint;
+
+procedure nested;
+
+  var
+     s : longint;
+
+  begin
+  end;
+
+begin
+end;
+
+
+begin
+end.

+ 10 - 0
tests/tbf/tb17.pp

@@ -0,0 +1,10 @@
+{ Old file: tbf0100.pp }
+{ a unit may only occure once in uses                   OK 0.99.6 (PM) }
+
+unit tbs0100;
+interface
+uses dos;
+implementation
+uses dos;             { Not Allowed in BP7}
+end.
+

+ 21 - 0
tests/tbf/tb18.pp

@@ -0,0 +1,21 @@
+{ Old file: tbf0101.pp }
+{ no type checking for routines in interfance and       OK 0.99.1 (CEC) }
+
+Unit tbs0101;
+
+Interface
+
+ Procedure MyProc(V: Integer);
+
+
+Implementation
+
+ Procedure MyProc(Y: Integer);
+ Begin
+ end;
+
+
+end.
+
+
+

+ 8 - 0
tests/tbf/tb19.pp

@@ -0,0 +1,8 @@
+{ Old file: tbf0108.pp }
+{ gives wrong error message                             OK 0.99.1 (PFV) }
+
+uses
+  dos,
+  ;
+begin
+end.

+ 9 - 0
tests/tbf/tb2.pp

@@ -0,0 +1,9 @@
+{ Old file: tbf0010.pp }
+{  tests string constants exceeding lines              OK 0.9.2 }
+
+program hello;
+
+  begin
+     writeln('Hello);
+  end.
+

+ 12 - 0
tests/tbf/tb20.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0109.pp }
+{ syntax error not detected when using a set as pointer OK 0.99.1 (FK) }
+
+Type T = (aa,bb,cc,dd,ee,ff,gg,hh);
+     Tset = set of t;
+
+Var a: Tset;
+
+Begin
+  If (aa in a^) Then begin end;
+  {it seems that correct code is generated, but the syntax is wrong}
+End.

+ 8 - 0
tests/tbf/tb21.pp

@@ -0,0 +1,8 @@
+{ Old file: tbf0110.pp }
+{ SigSegv when using undeclared var in Case             OK 0.99.6 (PFV) }
+
+Begin
+  Case Pai(hp1)^.typ Of
+    ait_instruction:
+  End
+End.

+ 24 - 0
tests/tbf/tb22.pp

@@ -0,0 +1,24 @@
+{ Old file: tbf0117.pp }
+{ internalerror 17 (and why is there an automatic float OK 0.99.6 (FK) }
+
+var
+ i: word;
+ j: integer;
+Begin
+ i:=65530;
+ i:=i+1;     { CF check  }
+ i:=i-1;
+ i:=i*5;
+ i:=i/5;
+ i:=i shl 5;
+ i:=i shr 5;
+ Inc(i);     { no check  }
+ j:=32765;   { OV check  }
+ j:=j+1;
+ inc(j);
+ j:=j-1;
+ j:=j*5;
+ j:=j div 5;
+ j:=j shl 5;
+ j:=j shr 5;
+end.

+ 20 - 0
tests/tbf/tb23.pp

@@ -0,0 +1,20 @@
+{ Old file: tbf0127.pp }
+{ problem with cdecl in implementation part             OK 0.99.7 (PFV) }
+
+unit tbf0127;
+
+  interface
+
+    procedure x(l : longint);
+
+  implementation
+
+    procedure crash;
+
+      begin
+         x(1234); { called with pascal calling conventions }
+      end;
+
+   procedure x(l : longint);external;cdecl;
+
+end.

+ 12 - 0
tests/tbf/tb24.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0136.pp }
+{ No types necessary in the procedure header            OK 0.99.6 (PFV) }
+
+{
+  No type declaration necessary ????
+}
+procedure p(handle1,handle2);
+begin
+end;
+
+begin
+end.

+ 23 - 0
tests/tbf/tb25.pp

@@ -0,0 +1,23 @@
+{ Old file: tbf0148.pp }
+{ crash when setting function result of a declared but not yet implemented function in another function }
+
+unit test;
+
+interface
+
+Function t(a: Byte): byte;
+Function DoT(b: byte): Byte;
+
+implementation
+
+Function t(a: Byte): Byte;
+var f: byte;
+Begin
+  DoT := f;
+End;
+
+Function DoT(b: byte): Byte;
+Begin
+End;
+
+end.

+ 13 - 0
tests/tbf/tb26.pp

@@ -0,0 +1,13 @@
+{ Old file: tbf0151.pp }
+{ crash when using undeclared variable in withstatement OK 0.99.7 (PFV) }
+
+type tr = record
+            l1, l2: longint
+          end;
+
+var r: tr;
+
+begin
+  with r do
+    inc(l)
+end.

+ 20 - 0
tests/tbf/tb27.pp

@@ -0,0 +1,20 @@
+{ Old file: tbf0153.pp }
+{ Asm, indexing a local/para var should produce an error like tp7 OK 0.99.9 (PFV) }
+
+{$asmmode att}
+
+procedure asmfunc(p:pointer);assembler;
+asm
+{
+  this is changed into movl %eax,(%ebx+8) which is not correct, and tp7
+  also doesn't allow 'mov p[bx],ax' or 'mov p+bx,ax'
+
+  Solution: for parameters and locals the index must be turned off
+
+  Don't forget to check the intel assembler also
+}
+        movl    %eax,p(%ebx)
+end;
+
+begin
+end.

+ 20 - 0
tests/tbf/tb28.pp

@@ -0,0 +1,20 @@
+{ Old file: tbf0155.pp }
+{ Asm, Missing string return for asm functions }
+
+{ this is not a real bug but rather a feature :
+  assembler function are only accepted for
+  simple return values
+  i.e. either in register or FPU  (PM) }
+
+{ so for the moment this is rejected code ! }
+
+function asmstr:string;assembler;
+asm
+        movl    __RESULT,%edi
+        movl    $0x4101,%al
+        stosw
+end;
+
+begin
+  writeln(asmstr);
+end;

+ 20 - 0
tests/tbf/tb29.pp

@@ -0,0 +1,20 @@
+{ Old file: tbf0157.pp }
+{ Invalid compilation and also crashes                  OK 0.99.7 (PFV) }
+
+{ this should be rejected because we only accept integer args }
+
+program write_it;
+var x,y:real;
+    i : longint;
+    s : string;
+begin
+x:=5.6;
+y:=45.789;
+write(y:2:3,' ',x:3:4);
+write(i:5);
+s:='short';
+write(s:11);
+write(i:5:2);
+write(s:25:3);
+write(x:5.2);
+end.

+ 15 - 0
tests/tbf/tb3.pp

@@ -0,0 +1,15 @@
+{ Old file: tbf0029.pp }
+{  tests typeof(object type)                         OK 0.99.1 (FK) }
+
+type
+  TA = object
+  end;
+
+var
+   P: Pointer;
+
+begin
+   { must fail on compilation because
+     TA has no VMT }
+   P := pointer(TypeOf(TA));
+end.

+ 11 - 0
tests/tbf/tb30.pp

@@ -0,0 +1,11 @@
+{ Old file: tbf0158.pp }
+{ Invalid boolean typecast                              OK 0.99.7 (PFV) }
+
+program tmp;
+
+var
+   Molo  :Boolean;
+
+begin
+   Molo := 1;     { This should give out a Type mismatch error ! }
+end.

+ 14 - 0
tests/tbf/tb31.pp

@@ -0,0 +1,14 @@
+{ Old file: tbf0161.pp }
+{ internal error when trying to create a set with another OK 0.99.9 (PFV) }
+
+Program tbs0161;
+
+{the following program should give a syntax error, but causes an internal error}
+
+const s = [1,2,3,4,5];
+
+var b: Byte;
+
+Begin
+  If b in [s] then;
+End.

+ 17 - 0
tests/tbf/tb32.pp

@@ -0,0 +1,17 @@
+{ Old file: tbf0164.pp }
+{ crash when using undeclared array index in with statement OK 0.99.8 (PFV) }
+
+type t1r = record
+             a, b: Byte;
+           end;
+     t2r = record
+             l1, l2: Array[1..4] Of t1r;
+           end;
+
+
+Var r: t2r;
+
+begin
+  with r.l1[counter] Do
+    Inc(a)
+end.

+ 13 - 0
tests/tbf/tb33.pp

@@ -0,0 +1,13 @@
+{ Old file: tbf0166.pp }
+{ forward type used in declaration crashes instead of error OK 0.99.9 (PFV) }
+
+type
+  punknown=^unknown;
+
+  t=object
+    procedure p(i:unknown);
+  end;
+
+begin
+end.
+  

+ 12 - 0
tests/tbf/tb34.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0167.pp }
+{ crash when declaring a procedure with same name as object OK 0.99.9 (PFV) }
+
+type ObjTest = Object
+     End;
+
+Procedure ObjTest;
+Begin
+end;
+
+Begin
+end.

+ 9 - 0
tests/tbf/tb35.pp

@@ -0,0 +1,9 @@
+{ Old file: tbf0168.pp }
+{ set:=set+element is allowed (should be: set:=set+[element]) OK 0.99.9 (PFV) }
+
+var bset: set of 0..31;
+    b: byte;
+
+Begin
+  bset := bset + b;
+End.

+ 14 - 0
tests/tbf/tb36.pp

@@ -0,0 +1,14 @@
+{ Old file: tbf0172.pp }
+{ with with absolute seg:ofs should not be possible OK 0.99.9 (PM) }
+
+type
+  rec=record
+    a : longint;
+  end;
+
+var
+  r1 : rec absolute $40:$49;
+begin
+  with r1 do
+   a:=1;
+end.

+ 12 - 0
tests/tbf/tb37.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0173.pp }
+{ secondbugs is parsed as asm, but should be normal pascalcode OK 0.99.9 (PFV) }
+
+var
+  secondbug : word;
+procedure p;assembler;
+begin
+  if secondbug=0 then;
+end;
+
+begin
+end.

+ 13 - 0
tests/tbf/tb38.pp

@@ -0,0 +1,13 @@
+{ Old file: tbf0175.pp }
+{ Asm, mov word,%eax should not be allowed without casting emits a warning (or error with range checking enabled)  OK 0.99.11 (PM) }
+
+{ this will just give out an error }
+{$asmmode att}
+{$R+}
+var
+  w : word;
+begin
+  asm
+        movl w,%ecx
+  end;
+end.

+ 12 - 0
tests/tbf/tb39.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0186.pp }
+{ Erroneous array syntax is accepted.                   OK 0.99.9 (PFV) }
+
+  program bug0186;
+   var
+    endline:^integer;
+    line:array [1..endline^] of ^char;
+   begin
+    new (endline);
+    endline^:=5;
+    endline^:=10;
+   end.

+ 12 - 0
tests/tbf/tb4.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0036.pp }
+{  assigning a single character to array of char      ?OK 0.9.9 }
+
+program bug0036;
+
+{Discovered by Daniel Mantione.}
+
+var     a:array[0..31] of char;
+
+begin
+   a:=' ';      {Incorrect Pascal statement, but why a protection error?}
+end.

+ 12 - 0
tests/tbf/tb40.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0196.pp }
+{ "function a;" is accepted (should require result type) OK 0.99.1 (PM) }
+
+Program bug0195;
+
+function a;
+begin
+end;
+
+begin
+  a
+end.

+ 16 - 0
tests/tbf/tb41.pp

@@ -0,0 +1,16 @@
+{ Old file: tbf0197.pp }
+{ should produce an error: problem with c1:=c2<c3 where c? is OK 0.99.11 (PM) a comp type }
+
+
+var i : DWord;
+    c1, c2 : comp;
+
+begin
+     c1 := 20000; c2 := 100;
+     i := 0;
+     repeat
+           inc(i);
+           c1 := (abs(3*c1)-c2) < c2;   { notice this !!! :) :) }
+     until (i > 1000);
+     Writeln(c1);
+end.

+ 34 - 0
tests/tbf/tb42.pp

@@ -0,0 +1,34 @@
+{ Old file: tbf0205.pp }
+{ and parsing bugs, generates wrong code (tp7 gives parser error) OK 0.99.11 (PM) }
+
+program bug_show;
+{ By PAV ([email protected]) }
+
+function bad_uppercase(s:string):string;
+var i:integer;
+begin
+  for i:=1 to length(s) do
+    if (ord(s[i])>=97 and ord(s[i])<=122) then s[i]:=chr(ord(s[i])-97+65);
+  bad_uppercase:=s;
+end;
+
+function good_uppercase(s:string):string;
+var i:integer;
+begin
+  for i:=1 to length(s) do
+    if (ord(s[i])>=97) and (ord(s[i])<=122) then s[i]:=chr(ord(s[i])-97+65);
+  good_uppercase:=s;
+end;
+
+const cadena='Free Paskal Compiler 0.99.8  !!! (bug)';
+begin
+  writeln('This is the original string before convert it');
+  writeln(cadena);
+  writeln();
+  writeln('This is a bad result, using "if (  and  )"');
+  writeln(bad_uppercase(cadena));
+  writeln();
+  writeln('This is a good result, using "if () and ()"');
+  writeln(good_uppercase(cadena));
+  writeln();
+end.

+ 14 - 0
tests/tbf/tb43.pp

@@ -0,0 +1,14 @@
+{ Old file: tbf0208.pp }
+{ implicit conversion from boolean to longint should not be allowed }
+
+program tbf0208;
+
+{ implicit boolean to integer conversion should not be
+  allowed }
+var
+  b : boolean;
+  i : longint;
+begin
+  b:=true;
+  i:=b;
+end.

+ 16 - 0
tests/tbf/tb44.pp

@@ -0,0 +1,16 @@
+{ Old file: tbf0219.pp }
+{ wrong error message                                  OK 0.99.11 (PFV) }
+
+{ Should give '(' expected in line 6 }
+
+   const
+     replaces=4;
+     replacetab : array[1..replaces,1..2] of string[32]=(
+       ':',' or colon',
+       'mem8','mem or bits8',
+       'mem16','mem or bits16',
+       'mem32','mem or bits32'
+     )
+begin
+end.
+

+ 17 - 0
tests/tbf/tb45.pp

@@ -0,0 +1,17 @@
+{ Old file: tbf0230.pp }
+{ several strange happen on the ln function: ln(0): no FPE and writeln can't write non numeric values Gives out an exception on compiling because of zero div OK 0.99.11 (PM) }
+
+{$ifdef go32v2}
+uses
+   dpmiexcp;
+{$endif}
+
+var
+   e : extended;
+
+begin
+ e:=-1.0;
+ writeln(ln(0));
+ writeln(power(0,1.0));
+ writeln(ln(e));
+end .

+ 20 - 0
tests/tbf/tb46.pp

@@ -0,0 +1,20 @@
+{ Old file: tbf0231.pp }
+{ Problem with comments                                OK 0.99.11 (PFV) }
+
+
+{$undef dummy}
+
+{$ifdef DUMMY}
+   (* <= this should not be considered as a
+   higher comment level !!
+
+  test
+{$endif dummy}
+
+var
+   e : extended;
+
+begin
+ e:=1.0;
+ writeln(ln(e));
+end.

+ 11 - 0
tests/tbf/tb47.pp

@@ -0,0 +1,11 @@
+{ Old file: tbf0234.pp }
+{ New with void pointer                                OK 0.99.11 (PM) }
+
+program bug0232;
+
+var p:pointer;
+
+begin
+     new(p);
+     dispose(p);
+end.

+ 14 - 0
tests/tbf/tb48.pp

@@ -0,0 +1,14 @@
+{ Old file: tbf0242.pp }
+{ Crash when passing a procedure to formal parameter   OK 0.99.11 (PM) }
+
+procedure p;
+begin
+end;
+
+procedure p1(var x);
+begin
+end;
+
+begin
+  p1(p);
+end.

+ 29 - 0
tests/tbf/tb49.pp

@@ -0,0 +1,29 @@
+{ Old file: tbf0245.pp }
+{ assigning pointers to address of consts is allowed (refused by BP !) OK 0.99.13 (PFV) }
+
+const
+ r = 3.5;
+ s = 'test idiot';
+type
+  preal = ^real;
+  pstring = ^string;
+
+  procedure ss;
+   begin
+   end;
+
+var
+  p : pointer;
+  pr : preal;
+  ps : pstring;
+
+  begin
+   p:=@ss;
+   p:=@s;
+   pr:=@r;
+   ps:=@s;
+   pr^:=7.8;
+   ps^:='test3';
+   Writeln('r=',r,' s=',s);
+  end.
+

+ 14 - 0
tests/tbf/tb5.pp

@@ -0,0 +1,14 @@
+{ Old file: tbf0049.pp }
+{  shows an error while defining subrange types         OK 0.99.7 (PFV) }
+
+type
+   days = (Mon,Tue,Wed,Thu,Fri,Sat,Sun);
+   weekend = Sat..Sun;
+
+var
+   w : weekend;
+
+begin
+   w:=5;
+   {$message the line before should produce an error }
+end.

+ 16 - 0
tests/tbf/tb50.pp

@@ -0,0 +1,16 @@
+{ Old file: tbf0246.pp }
+{ const para can be changed without error              OK 0.99.13 (PFV) }
+
+type
+  tref=record
+    ofs : longint;
+  end;
+
+procedure p(const ref:tref);
+begin
+  with ref do
+   ofs:=ofs+1;   { This should issue an error, because ref is const ! }
+end;
+
+begin
+end.

+ 11 - 0
tests/tbf/tb51.pp

@@ -0,0 +1,11 @@
+{ Old file: tbf0248.pp }
+{ Asm, Wrong assembler code accepted by new assembler reader OK 0.99.11 (PFV) }
+
+{$asmmode att}
+
+begin
+  asm
+     call *%eax // this is correct
+     movl %esi,*%eax
+  end;
+end.

+ 24 - 0
tests/tbf/tb52.pp

@@ -0,0 +1,24 @@
+{ Old file: tbf0265.pp }
+{ nested proc with for-counter in other lex level      OK 0.99.13 (PFV) }
+
+PROGRAM t9;
+
+PROCEDURE Eeep;
+VAR
+   X: BYTE;
+   NewNG: STRING;
+PROCEDURE SubProc;
+   BEGIN
+      newng := 'alt';
+      FOR X := 1 TO LENGTH(NewNG) DO BEGIN
+         WRITELN(X);
+   END;
+END;
+BEGIN
+   SubProc;
+END;
+
+BEGIN
+        Eeep;
+END.
+

+ 11 - 0
tests/tbf/tb53.pp

@@ -0,0 +1,11 @@
+{ Old file: tbf0269.pp }
+{ wrong linenumber for repeat until when type mismatch OK 0.99.12b (PM) }
+
+{ No idea how I could test this !! PM }
+{ we should parse the compiler output !! }
+{ Wrong line number for error message }
+begin
+  repeat
+   writeln('test');
+  until sptr;
+end.

+ 39 - 0
tests/tbf/tb54.pp

@@ -0,0 +1,39 @@
+{ Old file: tbf0272.pp }
+{ No error issued if wrong parameter in function inside a second function OK 0.99.13 (PFV) }
+
+program test_const_string;
+
+const
+   conststring = 'Constant string';
+
+function astring(s :string) : string;
+
+begin
+  astring:='Test string'+s;
+end;
+
+procedure testvar(var s : string);
+begin
+  writeln('testvar s is "',s,'"');
+end;
+
+procedure testconst(const s : string);
+begin
+  writeln('testconst s is "',s,'"');
+end;
+
+procedure testvalue(s : string);
+begin
+  writeln('testvalue s is "',s,'"');
+end;
+
+const
+  s : string = 'test';
+
+begin
+  testvalue(astring('e'));
+  testconst(astring(s));
+  testconst(conststring);
+  testvar(conststring);{ refused a compile time }
+end.
+

+ 22 - 0
tests/tbf/tb55.pp

@@ -0,0 +1,22 @@
+{ Old file: tbf0281.pp }
+{ dup id checking with property is wrong }
+
+{$mode objfpc}
+
+type
+  test_one = class
+     protected
+       fTest : String;
+     public
+       property Test: String READ fTest WRITE fTest;
+       procedure Testen(Test: BOolean);
+                        { ^ duplicate identifier? }
+  end;
+
+
+procedure test_one.testen(test: boolean);
+begin
+end;
+
+begin
+end.

+ 12 - 0
tests/tbf/tb56.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0284.pp }
+{ wrong file position with dup id in other unit        OK 0.99.13 (PFV) }
+
+uses tbs0284b;
+{$HINTS ON}
+type
+  o2=object(o1)
+    p : longint;
+  end;
+
+begin
+end.

+ 14 - 0
tests/tbf/tb57.pp

@@ -0,0 +1,14 @@
+{ Old file: tbf0298.pp }
+{ l1+l2:=l1+l2 gives no error                          OK 0.99.13 (PFV) }
+
+program test_loc_mem;
+
+{$ifdef go32v2}
+  uses
+    dpmiexcp;
+{$endif go32v2}
+
+var l1,l2 : longint;
+begin
+  l1+l2:=l1+l2;
+end.

+ 7 - 0
tests/tbf/tb58.pp

@@ -0,0 +1,7 @@
+{ Old file: tbf0300.pp }
+{ crash if method on non existing object is parsed (form bugs 651) OK 0.99.13 (PFV) }
+
+ procedure nonexistent_class_or_object.method; begin end;
+begin
+end.
+

+ 11 - 0
tests/tbf/tb59.pp

@@ -0,0 +1,11 @@
+{ Old file: tbf0301.pp }
+{ crash if destructor without object name is parsed    OK 0.99.13 (PFV) }
+
+Program bug0301;
+
+destructor done;
+begin
+end;
+
+begin
+end.

+ 24 - 0
tests/tbf/tb6.pp

@@ -0,0 +1,24 @@
+{ Old file: tbf0060.pp }
+{  shows missing type checking for case statements      OK 0.99.1 (CEC) }
+
+Program Test;
+
+{ No errors -- problems is due to the fact that the rules for type
+compatibility (p.47 language guide) -- are not respected, in other words
+in case statements there is no type checking whatsoever in fpc!!
+ I think that these are separate cases:
+   1st case) s32bit,u32bit,u8bit,s8bit,s16bit,u16bit
+   2nd case) uchar
+   3rd case) bool8bit
+These are not /should not be compatible with each other in a case
+statement imho - CEC
+}
+
+var
+ myvar:char;
+Begin
+ case myvar of
+ 1: ;
+ #2: ;
+ end;
+end.

+ 13 - 0
tests/tbf/tb60.pp

@@ -0,0 +1,13 @@
+{ Old file: tbf0310.pp }
+{ local and para dup are not detected                    OK 0.99.15 (FK) }
+
+procedure p(s:string);
+var
+  s : string;
+begin
+  writeln(s);
+end;
+
+begin
+  p('test');
+end.

+ 14 - 0
tests/tbf/tb61.pp

@@ -0,0 +1,14 @@
+{ Old file: tbf0311.pp }
+{ No dup id checking in variant records                  OK 0.99.15 (FK) }
+
+type
+  tsplitextended = record
+    case byte of
+      0: (a: array[0..9] of byte);
+      { the following "a" should give a duplicate identifier error }
+      1: (a: array[0..4] of word);
+      2: (a: array[0..1] of cardinal; w: word);
+    end;
+
+begin
+end.

+ 12 - 0
tests/tbf/tb62.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0314.pp }
+{  }
+
+procedure p(var b);
+begin
+end;
+
+var
+  s : string;
+begin
+  p(@s[1]);
+end.

+ 8 - 0
tests/tbf/tb63.pp

@@ -0,0 +1,8 @@
+{ Old file: tbf0315.pp }
+{  }
+
+begin
+asm
+    movl $%1000, %eax
+end;
+end.

+ 30 - 0
tests/tbf/tb64.pp

@@ -0,0 +1,30 @@
+{ Old file: tbf0320.pp }
+{  }
+
+{$ifdef fpc}{$mode delphi}{$endif}
+
+{ These should give an error, as also done in tp,delphi.
+  See tbs0319.pp for a test with class which should compile in
+  delphi mode }
+
+type
+  cl=object
+    k : longint;
+    procedure p1;
+    procedure p2;
+  end;
+
+procedure cl.p1;
+var
+  k : longint;
+begin
+end;
+
+procedure cl.p2;
+var
+  p1 : longint;
+begin
+end;
+
+begin
+end.

+ 9 - 0
tests/tbf/tb65.pp

@@ -0,0 +1,9 @@
+{ Old file: tbf0323.pp }
+{  }
+
+{$ifdef fpc}{$mode delphi}{$endif}
+type
+    TA = (aOne := 1, aTwo, aThree, aFour, aSix);
+
+begin
+end.

+ 13 - 0
tests/tbf/tb66.pp

@@ -0,0 +1,13 @@
+{ Old file: tbf0324.pp }
+{  }
+
+{$ifdef fpc}{$mode delphi}{$endif}
+
+function k2:longint;
+var
+  result : word;
+begin
+end;
+
+begin
+end.

+ 17 - 0
tests/tbf/tb67.pp

@@ -0,0 +1,17 @@
+{ Old file: tbf0325.pp }
+{  }
+
+{$ifdef fpc}{$mode delphi}{$endif}
+
+function k2(result:word):longint;
+begin
+end;
+
+function k3(l:word):longint;
+var
+  result : word;
+begin
+end;
+
+begin
+end.

+ 9 - 0
tests/tbf/tb68.pp

@@ -0,0 +1,9 @@
+{ Old file: tbf0326.pp }
+{  }
+
+{$mode delphi}
+const
+    anyconst = %11111;
+
+begin
+end.

+ 24 - 0
tests/tbf/tb69.pp

@@ -0,0 +1,24 @@
+{ Old file: tbf0328.pp }
+{  }
+
+{$ifdef fpc}{$mode delphi}{$endif}
+
+procedure k1(l:longint);
+begin
+end;
+
+procedure k1(l:string);overload;
+begin
+end;
+
+procedure k2(l:longint);overload;
+begin
+end;
+
+procedure k2(l:string);
+begin
+end;
+
+
+begin
+end.

+ 6 - 0
tests/tbf/tb7.pp

@@ -0,0 +1,6 @@
+{ Old file: tbf0061.pp }
+{  shows wrong errors when compiling (NOT A bugs)        OK 0.99.1 }
+
+Begin
+ 55ms;
+end.

+ 8 - 0
tests/tbf/tb70.pp

@@ -0,0 +1,8 @@
+{ Old file: tbf0342.pp }
+{  }
+
+type
+  WORD=word;
+
+begin
+end.

+ 12 - 0
tests/tbf/tb71.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0343.pp }
+{  }
+
+{$mode delphi}
+type
+  TListEntry = record
+    Next: ^TListEntry;                      (*<-- Error message here*)
+    Data: Integer;
+  end;
+
+begin
+end.

+ 8 - 0
tests/tbf/tb72.pp

@@ -0,0 +1,8 @@
+{ Old file: tbf0345.pp }
+{  }
+
+var
+  WORD : array[1..2] of word;
+
+begin
+end.

+ 12 - 0
tests/tbf/tb73.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0347.pp }
+{  }
+
+{$mode delphi}
+
+type x = ^longint;
+
+var y:x;
+
+begin
+ y [5]:=5;
+end.

+ 17 - 0
tests/tbf/tb74.pp

@@ -0,0 +1,17 @@
+{ Old file: tbf0349.pp }
+{  }
+
+{$mode delphi}
+
+type
+  TCl=class;
+
+const
+  b=1;
+
+type
+  TCL=class
+  end;
+
+begin
+end.

+ 12 - 0
tests/tbf/tb75.pp

@@ -0,0 +1,12 @@
+{ %OPT=-Sew }
+
+{ Old file: tbf0351.pp }
+
+{$MACRO OFF}
+
+{ The next line should give a Warning that macro support not has
+  been turned on }
+{$define mac1 := writeln('test')}
+
+begin
+end.

+ 18 - 0
tests/tbf/tb76.pp

@@ -0,0 +1,18 @@
+{ Old file: tbf0352.pp }
+{  }
+
+{$ifdef fpc}{$MODE OBJFPC}{$endif}
+
+Procedure Proc1(args:array of const);
+begin
+end;
+
+Procedure Proc2(args:array of longint);
+Begin
+  { this should give an error }
+  Proc1(args);
+End;
+
+Begin
+  Proc1([0,1]);
+End.

+ 12 - 0
tests/tbf/tb77.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0353.pp }
+{  }
+
+{ $version >= 1.1}
+type
+   ti = interface
+     private
+       procedure p;
+   end;
+
+begin
+end.

+ 11 - 0
tests/tbf/tb78.pp

@@ -0,0 +1,11 @@
+{ Old file: tbf0354.pp }
+{  }
+
+{ $version >= 1.1}
+type
+   ti = interface
+     constructor create; 
+   end;
+
+begin
+end.

+ 11 - 0
tests/tbf/tb79.pp

@@ -0,0 +1,11 @@
+{ Old file: tbf0355.pp }
+{  }
+
+{ $version >= 1.1}
+type
+   ti = interface
+      destructor destroy; 
+   end;
+
+begin
+end.

+ 8 - 0
tests/tbf/tb8.pp

@@ -0,0 +1,8 @@
+{ Old file: tbf0071.pp }
+{  shows that an unterminated constant string in a writeln() statement crashes the compiler. }
+
+program tbf0071;
+
+begin
+  writeln ('
+end.

+ 11 - 0
tests/tbf/tb80.pp

@@ -0,0 +1,11 @@
+{ Old file: tbf0356.pp }
+{  }
+
+{ $version >= 1.1}
+type
+   ti = interface
+      l : longint;
+   end;
+
+begin
+end.

+ 12 - 0
tests/tbf/tb81.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0357.pp }
+{  }
+
+{ $version >= 1.1}
+type
+   ti = interface
+     protected
+       procedure p;
+   end;
+
+begin
+end.

+ 12 - 0
tests/tbf/tb82.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0358.pp }
+{  }
+
+{ $version >= 1.1}
+type
+   ti = interface
+     public
+       procedure p;
+   end;
+
+begin
+end.

+ 12 - 0
tests/tbf/tb83.pp

@@ -0,0 +1,12 @@
+{ Old file: tbf0359.pp }
+{  }
+
+{ $version >= 1.1}
+type
+   ti = interface
+     published
+       procedure p;
+   end;
+
+begin
+end.

+ 18 - 0
tests/tbf/tb84.pp

@@ -0,0 +1,18 @@
+{ Old file: tbf0360.pp }
+{  }
+
+procedure myproc;
+var
+  a: word;
+  a: word;
+  a: word;
+  a: word;
+  a: word;
+begin
+  a := 1;
+  writeln (a);
+end;
+
+begin
+  myproc;
+end.

+ 34 - 0
tests/tbf/tb85.pp

@@ -0,0 +1,34 @@
+{ Old file: tbf0361.pp }
+{  }
+
+type
+
+  ExecProc = Procedure;
+  
+type
+  MenuItem = record
+               Caption: String[32];
+               Exec: ExecProc;
+             end;
+             
+Procedure AddItem(ACaption: String; AExec: ExecProc; var Item: MenuItem);
+begin
+  Item.Caption:=ACaption;
+  Item.Exec:=AExec;
+end;
+
+Procedure ExecFirstItem;
+begin
+  Writeln('Result of "Item 1"');
+end;
+
+var M1,M2,M3: MenuItem;
+    Ep: ExecProc;
+
+begin
+  AddItem('Item 1',Nil,M1);
+  Ep:=ExecFirstItem;        // should give error in fpc mode
+  AddItem('Item 2',Ep,M2);
+  AddItem('Item 3',@ExecFirstItem,M3);
+end.
+

+ 11 - 0
tests/tbf/tb86.pp

@@ -0,0 +1,11 @@
+
+type
+  r=record
+    a :longint;
+  end;
+var
+  w : ^r;
+begin
+  if w^<>$1111 then
+   writeln;
+end.

+ 8 - 0
tests/tbf/tb87.pp

@@ -0,0 +1,8 @@
+
+var
+  i,j : longint;
+begin
+  i:=longint;
+  j:=i*word+j*shortint;
+  j:= 15 +5*i +(i*i)+sqr(word);
+end.

+ 10 - 0
tests/tbf/tb88.pp

@@ -0,0 +1,10 @@
+{$mode objfpc}
+label l;
+
+begin
+   try
+      goto l;
+   finally     
+   end;
+   l:
+end.

+ 10 - 0
tests/tbf/tb89.pp

@@ -0,0 +1,10 @@
+{$mode objfpc}
+label l;
+
+begin
+   try
+   finally     
+   l:
+   end;
+   goto l;
+end.

+ 34 - 0
tests/tbf/tb9.pp

@@ -0,0 +1,34 @@
+{ Old file: tbf0075.pp }
+{  shows invalid pchar output to console                 OK 0.99.1 }
+
+Unit tbs0075;
+
+Interface
+
+
+Procedure MyTest;Far;         { IMPLEMENTATION expected error. }
+
+{ Further information: NEAR IS NOT ALLOWED IN BORLAND PASCAL  }
+{ Therefore the bugfix should only be for the FAR keyword.    }
+ Procedure MySecondTest;
+
+Implementation
+
+{ near and far are not allowed here, but maybe we don't care since they are ignored by }
+{ FPC.                                                                                 }
+Procedure MyTest;
+Begin
+end;
+
+Procedure MySecondTest;Far;Forward;
+
+
+Procedure MySecondTest;Far;
+Begin
+end;
+
+
+
+
+
+end.

+ 10 - 0
tests/tbf/tb90.pp

@@ -0,0 +1,10 @@
+{$mode objfpc}
+label l;
+
+begin
+   try
+   except
+      goto l;
+   end;
+   l:
+end.

+ 14 - 0
tests/tbf/tb91.pp

@@ -0,0 +1,14 @@
+{$mode objfpc}
+uses
+   sysutils;
+
+label l;
+
+begin
+   try
+   except
+      on e : exception do
+        goto l;
+   end;
+   l:
+end.

+ 20 - 0
tests/tbf/tb92.pp

@@ -0,0 +1,20 @@
+{$mode objfpc}
+type
+   tc1 = class
+      l : longint;
+      property p : longint read l;
+   end;
+
+   tc2 = class(tc1)
+      { in Delphi mode }
+      { parameters can have the same name as properties }
+      procedure p1(p : longint);
+   end;
+
+procedure tc2.p1(p : longint);
+
+  begin
+  end;
+
+begin
+end.

+ 20 - 0
tests/tbf/tb93.pp

@@ -0,0 +1,20 @@
+
+
+type
+   obj = object
+     procedure method1;
+     procedure method2;
+     end;
+
+  procedure obj.method1;
+
+    procedure obj.method2;
+
+      begin
+      end;
+
+    begin
+    end;
+
+  begin
+  end.

+ 23 - 0
tests/tbf/tb94.pp

@@ -0,0 +1,23 @@
+{$mode objfpc}
+type
+   to1 = class
+      procedure p;virtual;
+   end;
+
+   to2 = class(to1)
+     function p : longint;override;
+   end;
+
+  procedure to1.p;
+
+    begin
+    end;
+
+  function to2.p : longint;
+
+    begin
+    end;
+
+begin
+end.
+

+ 12 - 0
tests/tbs/tb1.pp

@@ -0,0 +1,12 @@
+{ Old file: tbs0001.pp }
+{  tests a bugs in the .ascii output (#0 and too long)  OK 0.9.2 }
+
+program smalltest;
+  const
+      teststr : string = ' '#9#255#0;
+begin
+      writeln(teststr);
+      teststr := 'gaga';
+      writeln(teststr);
+      if teststr<>'gaga' then halt(1);
+end.

+ 16 - 0
tests/tbs/tb10.pp

@@ -0,0 +1,16 @@
+{ Old file: tbs0012.pp }
+{  tests type conversation byte(a>b)                 OK 0.9.9 (FK) }
+
+var
+   a,b : longint;
+
+begin
+   a:=1;
+   b:=2;
+   if byte(a>b)=byte(a<b) then
+     begin
+        writeln('Ohhhh');
+        Halt(1);
+    end;
+end.
+

+ 14 - 0
tests/tbs/tb100.pp

@@ -0,0 +1,14 @@
+{ Old file: tbs0118.pp }
+{ Procedural vars cannot be assigned nil ?              OK 0.99.6 (FK) }
+
+program Test1;
+
+  type
+    ExampleProc = procedure;
+
+  var
+    Eg: ExampleProc;
+
+  begin
+    Eg := nil;  { This produces a compiler error }
+  end.

+ 47 - 0
tests/tbs/tb101.pp

@@ -0,0 +1,47 @@
+{ Old file: tbs0119.pp }
+{ problem with methods                                  OK 0.99.6 (FK) }
+
+program ObjTest;
+   uses crt;
+
+   type
+     ObjectA = object
+       procedure Greetings;
+       procedure DoIt;
+     end;
+     ObjectB = object (ObjectA)
+       procedure Greetings;
+       procedure DoIt;
+     end;
+
+   procedure ObjectA.Greetings;
+   begin
+     writeln('  A');
+   end;
+   procedure ObjectA.DoIt;
+   begin
+     writeln('A ');
+     Greetings;
+   end;
+
+   procedure ObjectB.Greetings;
+   begin
+     writeln('  B');
+   end;
+   procedure ObjectB.DoIt;
+   begin
+     writeln('B');
+     Greetings;
+   end;
+
+   var
+     A: ObjectA;
+     B: ObjectB;
+
+   begin
+     A.DoIt;
+     B.DoIt;
+     writeln; writeln('Now doing it directly:');
+     A.Greetings;
+     B.Greetings;
+   end.

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است