diff options
author | Manoj Srivastava <srivasta@golden-gryphon.com> | 2003-12-03 22:33:17 -0800 |
---|---|---|
committer | Manoj Srivastava <srivasta@golden-gryphon.com> | 2003-12-03 22:33:17 -0800 |
commit | c2b22e08bd48278f2cf125f054c9f6286e345ff0 (patch) | |
tree | 3c0ab722c83ef33913ad293af7d56ce2c4e1fcc9 /tests | |
parent | edc848712307fe5c881364e12e520e9fe58d9969 (diff) |
Imported Upstream version 2.5.31
Diffstat (limited to 'tests')
184 files changed, 25059 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..f3b78ef --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,129 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +EXTRA_DIST = \ + README + +dist_noinst_SCRIPTS = \ + create-test + +DIST_SUBDIRS = \ + test-basic-nr \ + test-basic-r \ + test-bison-yylloc \ + test-bison-yylval \ + test-bison-nr \ + test-multiple-scanners-nr \ + test-multiple-scanners-r \ + test-header-nr \ + test-header-r \ + test-reject \ + test-c++-multiple-scanners \ + test-c++-basic \ + test-posixly-correct \ + test-posix \ + test-mem-r \ + test-mem-nr \ + test-debug-nr \ + test-debug-r \ + test-lineno-r \ + test-lineno-nr \ + test-linedir-r \ + TEMPLATE \ + test-top \ + test-array-nr \ + test-array-r \ + test-c-cpp-nr \ + test-c-cpp-r \ + test-include-by-buffer \ + test-include-by-push \ + test-include-by-reentrant \ + test-prefix-nr \ + test-prefix-r \ + test-pthread \ + test-string-nr \ + test-string-r \ + test-yyextra \ + test-noansi-nr \ + test-noansi-r \ + test-table-opts + +SUBDIRS = \ + test-basic-nr \ + test-basic-r \ + test-bison-yylloc \ + test-bison-yylval \ + test-bison-nr \ + test-multiple-scanners-nr \ + test-multiple-scanners-r \ + test-header-nr \ + test-header-r \ + test-reject \ + test-c++-multiple-scanners \ + test-c++-basic \ + test-posixly-correct \ + test-posix \ + test-mem-r \ + test-mem-nr \ + test-debug-nr \ + test-debug-r \ + test-lineno-r \ + test-lineno-nr \ + test-linedir-r \ + test-array-nr \ + test-array-r \ + test-c-cpp-nr \ + test-c-cpp-r \ + test-include-by-buffer \ + test-include-by-push \ + test-include-by-reentrant \ + test-prefix-nr \ + test-prefix-r \ + test-pthread \ + test-string-nr \ + test-string-r \ + test-yyextra \ + test-noansi-nr \ + test-noansi-r \ + test-top \ + test-table-opts + +# clean up before running the test suite so we dont test old builds of test code + +check-local: clean + NOK=;\ + NFAIL=;\ + for dir in $(SUBDIRS) ; do \ + echo Executing test "$$dir" ; \ + ( cd "$$dir" && $(MAKE) test > OUTPUT 2>&1 ) ; \ + case $$? in \ + 0 ) echo Test "$$DIR" succeeded.; \ + NOK=0$$NOK;\ + ;; \ + * ) echo Test "$$DIR" FAILED. See "$$dir"/OUTPUT for details. ; \ + NFAIL=0$$NFAIL; \ + ;; \ + esac; \ + done ; \ + echo Results: ; \ + echo Tests succeeded: `echo @ECHO_N@ "$$NOK@ECHO_C@"|wc -c`; \ + echo Tests FAILED: `echo @ECHO_N@ "$$NFAIL@ECHO_C@"|wc -c` ; \ + test "$$NFAIL" = "" diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 0000000..b14aa23 --- /dev/null +++ b/tests/Makefile.in @@ -0,0 +1,555 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +EXTRA_DIST = \ + README + + +dist_noinst_SCRIPTS = \ + create-test + + +DIST_SUBDIRS = \ + test-basic-nr \ + test-basic-r \ + test-bison-yylloc \ + test-bison-yylval \ + test-bison-nr \ + test-multiple-scanners-nr \ + test-multiple-scanners-r \ + test-header-nr \ + test-header-r \ + test-reject \ + test-c++-multiple-scanners \ + test-c++-basic \ + test-posixly-correct \ + test-posix \ + test-mem-r \ + test-mem-nr \ + test-debug-nr \ + test-debug-r \ + test-lineno-r \ + test-lineno-nr \ + test-linedir-r \ + TEMPLATE \ + test-top \ + test-array-nr \ + test-array-r \ + test-c-cpp-nr \ + test-c-cpp-r \ + test-include-by-buffer \ + test-include-by-push \ + test-include-by-reentrant \ + test-prefix-nr \ + test-prefix-r \ + test-pthread \ + test-string-nr \ + test-string-r \ + test-yyextra \ + test-noansi-nr \ + test-noansi-r \ + test-table-opts + + +SUBDIRS = \ + test-basic-nr \ + test-basic-r \ + test-bison-yylloc \ + test-bison-yylval \ + test-bison-nr \ + test-multiple-scanners-nr \ + test-multiple-scanners-r \ + test-header-nr \ + test-header-r \ + test-reject \ + test-c++-multiple-scanners \ + test-c++-basic \ + test-posixly-correct \ + test-posix \ + test-mem-r \ + test-mem-nr \ + test-debug-nr \ + test-debug-r \ + test-lineno-r \ + test-lineno-nr \ + test-linedir-r \ + test-array-nr \ + test-array-r \ + test-c-cpp-nr \ + test-c-cpp-r \ + test-include-by-buffer \ + test-include-by-push \ + test-include-by-reentrant \ + test-prefix-nr \ + test-prefix-r \ + test-pthread \ + test-string-nr \ + test-string-r \ + test-yyextra \ + test-noansi-nr \ + test-noansi-r \ + test-top \ + test-table-opts + +subdir = tests +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SCRIPTS = $(dist_noinst_SCRIPTS) + +DIST_SOURCES = + +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ + ps-recursive install-info-recursive uninstall-info-recursive \ + all-recursive install-data-recursive install-exec-recursive \ + installdirs-recursive install-recursive uninstall-recursive \ + check-recursive installcheck-recursive +DIST_COMMON = README $(dist_noinst_SCRIPTS) Makefile.am Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" \ + distdir=../$(distdir)/$$subdir \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-local +check: check-recursive +all-am: Makefile $(SCRIPTS) +installdirs: installdirs-recursive +installdirs-am: + +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + check-local clean clean-generic clean-recursive ctags \ + ctags-recursive distclean distclean-generic distclean-recursive \ + distclean-tags distdir dvi dvi-am dvi-recursive info info-am \ + info-recursive install install-am install-data install-data-am \ + install-data-recursive install-exec install-exec-am \ + install-exec-recursive install-info install-info-am \ + install-info-recursive install-man install-recursive \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am installdirs-recursive maintainer-clean \ + maintainer-clean-generic maintainer-clean-recursive mostlyclean \ + mostlyclean-generic mostlyclean-recursive pdf pdf-am \ + pdf-recursive ps ps-am ps-recursive tags tags-recursive \ + uninstall uninstall-am uninstall-info-am \ + uninstall-info-recursive uninstall-recursive + + +# clean up before running the test suite so we dont test old builds of test code + +check-local: clean + NOK=;\ + NFAIL=;\ + for dir in $(SUBDIRS) ; do \ + echo Executing test "$$dir" ; \ + ( cd "$$dir" && $(MAKE) test > OUTPUT 2>&1 ) ; \ + case $$? in \ + 0 ) echo Test "$$DIR" succeeded.; \ + NOK=0$$NOK;\ + ;; \ + * ) echo Test "$$DIR" FAILED. See "$$dir"/OUTPUT for details. ; \ + NFAIL=0$$NFAIL; \ + ;; \ + esac; \ + done ; \ + echo Results: ; \ + echo Tests succeeded: `echo @ECHO_N@ "$$NOK@ECHO_C@"|wc -c`; \ + echo Tests FAILED: `echo @ECHO_N@ "$$NFAIL@ECHO_C@"|wc -c` ; \ + test "$$NFAIL" = "" +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/README b/tests/README new file mode 100644 index 0000000..f948eaf --- /dev/null +++ b/tests/README @@ -0,0 +1,77 @@ +This file describes the flex test suite. + +* WHO SHOULD USE THE TEST SUITE? + +The test suite is intended to be used by flex developers, i.e., anyone hacking +the flex distribution. If you are simply installing flex, then you can ignore +this directory and its contents. + +* STRUCTURE OF THE TEST SUITE + +The test suite consists of several directories, each containing a +scanner known to work with the most recent version of flex. In +general, after you modify your copy of the flex distribution, you +should re-run the test suite. Some of the tests may require certain tools +to be available (e.g., bison, diff). If any test returns an error or +generates an error message, then your modifications *may* have broken +a feature of flex. At a minimum, you'll want to investigate the +failure and determine if it's truly significant. + +* HOW TO RUN THE TEST SUITE + +To build and execute all tests from the top level of the flex source tree: + + $ make check + +To build and execute a single test: + + $ cd tests/ # from the top level of the flex tree. + $ cd test-pthread-nr # for example + $ make test + +* HOW TO ADD A NEW TEST TO THE TEST SUITE + +**- RUN the script `create-test` found in this directory with a single +argument of the name of the test you want to create. If it fails with +a message about a non-existent file `config.status', then run the +configure script in the top-level directory and everything will be +fine. If it fails to work for you other than this, report it as a +bug. + +** Modify the files in the newly created directory so that they test +whatever feature of flex you are interested in. + +** On success, your test should return zero. + +** On error, your test should return 1 (one) and print a message to +stderr, which will have been redirected to the file named, "OUTPUT", +in your test's directory. + +** If your test is skipped (e.g., because bison was not found), then + the test should return 2 (two). See "test-bison-nr/Makefile.am" for + an example. + +** You must modify the last few lines of the top-level configure.in by + adding the Makefile for your test directory. (This step is + done automatically by `create-test`.) + +** You must add the name of your test to the SUBDIRS variable in + tests/Makefile.am. (This is also done automatically for you by `create-test'.) + +** Add a description of your new test to the end of the file + `descriptions'. Remember to keep the description as brief as + possible, preferably to one line. + +** You will have to run the autogen.sh script in the top-level + directory as well as run the configure script in that + directory. (Note that running config.status may prove easier or + quicker.) + +** The easiest way for you to submit your new test to the flex + maintainers is by generating a patch. The flex maintainers only + need to have the Makefile.am, the flex input file, the test input + file (if there is one) and any other files necessary to compile the + test. You do not need to submit files generated by autoconf, + automake, configure etc. It would be helpful to include the file + .cvsignore which you will find in your test directory if you used + the `create-test' script. diff --git a/tests/TEMPLATE/Makefile.am b/tests/TEMPLATE/Makefile.am new file mode 100644 index 0000000..e9d4cf8 --- /dev/null +++ b/tests/TEMPLATE/Makefile.am @@ -0,0 +1,50 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l parser.y test.input +CLEANFILES = scanner.c scanner.h parser.c parser.h TEMPLATE OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(builddir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = TEMPLATE + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/TEMPLATE/Makefile.in b/tests/TEMPLATE/Makefile.in new file mode 100644 index 0000000..a3ede97 --- /dev/null +++ b/tests/TEMPLATE/Makefile.in @@ -0,0 +1,331 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l parser.y test.input +CLEANFILES = scanner.c scanner.h parser.c parser.h TEMPLATE OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(builddir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = TEMPLATE +subdir = tests/TEMPLATE +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/TEMPLATE/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/TEMPLATE/parser.y b/tests/TEMPLATE/parser.y new file mode 100644 index 0000000..54c428b --- /dev/null +++ b/tests/TEMPLATE/parser.y @@ -0,0 +1,61 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* A dummy template parser to build "parser.c" and "parser.h". + How to compile: + bison --defines --output-file="parser.c" --name-prefix="test" parser.y + */ +%{ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define YYERROR_VERBOSE 1 /* For debugging. */ +/* #define YYPARSE_PARAM scanner */ /* For pure bison parser. */ +/* #define YYLEX_PARAM scanner */ /* For reentrant flex. */ + + +int yyerror(char* msg); +extern int testlex(); + +%} + +%% + +rule: ; + +%% + +int yyerror(char* msg) { + fprintf(stderr,"%s\n",msg); + return 0; +} + +/* +int +main ( int argc, char** argv ) +{ + yyparse (); + return 0; +} +*/ diff --git a/tests/TEMPLATE/scanner.l b/tests/TEMPLATE/scanner.l new file mode 100644 index 0000000..c41a778 --- /dev/null +++ b/tests/TEMPLATE/scanner.l @@ -0,0 +1,54 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn + + +%% + +. { } + +%% + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/TEMPLATE/test.input b/tests/TEMPLATE/test.input new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/TEMPLATE/test.input @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/create-test b/tests/create-test new file mode 100755 index 0000000..60d57f2 --- /dev/null +++ b/tests/create-test @@ -0,0 +1,42 @@ +#!/bin/sh + +TESTFILES="Makefile.am scanner.l parser.y .cvsignore test.input" + +if [ ! $# -eq 1 ] ; then + echo 1>&2 Usage: $0 test-name + exit 1 +fi + +if test -e "$1" ; then + echo 1>&2 "$1 exists already" + exit 1 +fi + +mkdir $1 +if test "$?" -ne 0 ; then + echo 1>&2 "mkdir $1 failed" + exit 1 +fi + +for i in $TESTFILES ; do + cp TEMPLATE/$i $1/$i +done + +# Modify .cvsignore +echo "$1" >> "$1"/.cvsignore + +# Modify top-level configure.in +sed '/--new-test-here--/i\ +tests/'"$1"'/Makefile' < ../configure.in > configure.in.tmp + +mv configure.in.tmp ../configure.in + +# Modify Makefile.am +sed '/^\(DIST_\)\?SUBDIRS/a\ + '"$1"' \\' < Makefile.am > Makefile.am.tmp + +mv Makefile.am.tmp Makefile.am + +# Modify new-test/Makefile.am +sed "s:TEMPLATE:$1:g" < "$1"/Makefile.am > "$1"/Makefile.am.tmp +mv "$1"/Makefile.am.tmp "$1"/Makefile.am diff --git a/tests/test-array-nr/Makefile.am b/tests/test-array-nr/Makefile.am new file mode 100644 index 0000000..4b1fe86 --- /dev/null +++ b/tests/test-array-nr/Makefile.am @@ -0,0 +1,48 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-array-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-array-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-array-nr/Makefile.in b/tests/test-array-nr/Makefile.in new file mode 100644 index 0000000..8090100 --- /dev/null +++ b/tests/test-array-nr/Makefile.in @@ -0,0 +1,328 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-array-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-array-nr +subdir = tests/test-array-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-array-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-array-nr/scanner.l b/tests/test-array-nr/scanner.l new file mode 100644 index 0000000..068c674 --- /dev/null +++ b/tests/test-array-nr/scanner.l @@ -0,0 +1,55 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn array + + +%% + +.|\n { } + + +%% + +int main (void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-array-nr/test.input b/tests/test-array-nr/test.input new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/test-array-nr/test.input @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/test-array-r/Makefile.am b/tests/test-array-r/Makefile.am new file mode 100644 index 0000000..5a2fa21 --- /dev/null +++ b/tests/test-array-r/Makefile.am @@ -0,0 +1,45 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-array-r OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-array-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-array-r/Makefile.in b/tests/test-array-r/Makefile.in new file mode 100644 index 0000000..0800f37 --- /dev/null +++ b/tests/test-array-r/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-array-r OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-array-r +subdir = tests/test-array-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-array-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-array-r/scanner.l b/tests/test-array-r/scanner.l new file mode 100644 index 0000000..2d4c1b1 --- /dev/null +++ b/tests/test-array-r/scanner.l @@ -0,0 +1,62 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn array reentrant + + +%% + +.|\n { } + + +%% + +int main(void); + +int +main () +{ + yyscan_t lexer; + + yylex_init(&lexer); + yyset_in(stdin, lexer); + yyset_out(stdout, lexer); + + yylex( lexer ); + + yylex_destroy( lexer); + printf("TEST RETURNING OK.\n"); + + return 0; +} diff --git a/tests/test-array-r/test.input b/tests/test-array-r/test.input new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/test-array-r/test.input @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/test-basic-nr/Makefile.am b/tests/test-basic-nr/Makefile.am new file mode 100644 index 0000000..bdf6340 --- /dev/null +++ b/tests/test-basic-nr/Makefile.am @@ -0,0 +1,48 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-basic-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-basic-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-basic-nr/Makefile.in b/tests/test-basic-nr/Makefile.in new file mode 100644 index 0000000..ad73ad5 --- /dev/null +++ b/tests/test-basic-nr/Makefile.in @@ -0,0 +1,328 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-basic-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-basic-nr +subdir = tests/test-basic-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-basic-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-basic-nr/scanner.l b/tests/test-basic-nr/scanner.l new file mode 100644 index 0000000..c284884 --- /dev/null +++ b/tests/test-basic-nr/scanner.l @@ -0,0 +1,66 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* TEST scanner. + Basic non-reentrant scanner. + Compile with: flex scanner.l + + Sample Input: + # this is a comment + foo = true + bar = "string value" + integer = 43 +*/ +%{ +#include "config.h" +%} + +%option prefix="test" outfile="scanner.c" +%option nounput noyywrap noyylineno warn nodefault + +IDENT [[:alnum:]_-] +WS [[:blank:]] +%% + +^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} +^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} +^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} +^{WS}*#.*\r?\n { } +^{WS}*\r?\n { } +.|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} + +%% + +int main(void); + +int main () +{ + yyin = stdin; + yyout = stdout; + while( yylex() ) + { + } + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/test-basic-nr/test.input b/tests/test-basic-nr/test.input new file mode 100644 index 0000000..642e0fb --- /dev/null +++ b/tests/test-basic-nr/test.input @@ -0,0 +1,5 @@ +# this is a comment +foo = "bar" +num = 43 +setting = false + diff --git a/tests/test-basic-r/Makefile.am b/tests/test-basic-r/Makefile.am new file mode 100644 index 0000000..2907190 --- /dev/null +++ b/tests/test-basic-r/Makefile.am @@ -0,0 +1,48 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-basic-r OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-basic-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-basic-r/Makefile.in b/tests/test-basic-r/Makefile.in new file mode 100644 index 0000000..2ab47f4 --- /dev/null +++ b/tests/test-basic-r/Makefile.in @@ -0,0 +1,328 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-basic-r OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-basic-r +subdir = tests/test-basic-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-basic-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-basic-r/scanner.l b/tests/test-basic-r/scanner.l new file mode 100644 index 0000000..6e3510f --- /dev/null +++ b/tests/test-basic-r/scanner.l @@ -0,0 +1,68 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* A reentrant scanner. + This file will not compile under flex version <= 2.5.4. + Sample Input: + # this is a comment + foo = true + bar = "string value" + integer = 43 +*/ +%{ +#include "config.h" +%} + +%option prefix="test" outfile="scanner.c" +%option nounput noyywrap noyylineno warn nodefault +%option reentrant + +IDENT [[:alnum:]_-] +WS [[:blank:]] +%% + +^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} +^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} +^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} +^{WS}*#.*\r?\n { } +^{WS}*\r?\n { } +.|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} + +%% + +int main(void); + +int main () +{ + yyscan_t lexer; + yylex_init( &lexer ); + yyset_out ( stdout,lexer); + yyset_in ( stdin, lexer); + while( yylex(lexer) ) + { + } + yylex_destroy( lexer ); + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/test-basic-r/test.input b/tests/test-basic-r/test.input new file mode 100644 index 0000000..2160628 --- /dev/null +++ b/tests/test-basic-r/test.input @@ -0,0 +1,4 @@ +# this is a comment +foo = "bar" +num = 43 +setting = false diff --git a/tests/test-bison-nr/Makefile.am b/tests/test-bison-nr/Makefile.am new file mode 100644 index 0000000..6874df6 --- /dev/null +++ b/tests/test-bison-nr/Makefile.am @@ -0,0 +1,53 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l parser.y test.input main.c +CLEANFILES = scanner.c scanner.h parser.c parser.h test-bison-nr $(OBJS) OUTPUT +OBJS = scanner.o parser.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +YFLAGS = --defines --output=parser.c --name-prefix="test" + +testname = test-bison-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +parser.h: parser.c +scanner.c main.o: parser.h diff --git a/tests/test-bison-nr/Makefile.in b/tests/test-bison-nr/Makefile.in new file mode 100644 index 0000000..2b9fd98 --- /dev/null +++ b/tests/test-bison-nr/Makefile.in @@ -0,0 +1,333 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l parser.y test.input main.c +CLEANFILES = scanner.c scanner.h parser.c parser.h test-bison-nr $(OBJS) OUTPUT +OBJS = scanner.o parser.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +YFLAGS = --defines --output=parser.c --name-prefix="test" + +testname = test-bison-nr +subdir = tests/test-bison-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-bison-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +parser.h: parser.c +scanner.c main.o: parser.h +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-bison-nr/main.c b/tests/test-bison-nr/main.c new file mode 100644 index 0000000..49dde7c --- /dev/null +++ b/tests/test-bison-nr/main.c @@ -0,0 +1,39 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "parser.h" +#include "scanner.h" + +extern int testparse(void); + +int main ( int argc, char** argv ) +{ + /*yydebug =1;*/ + testin = stdin; + testparse ( ); + return 0; +} + + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-bison-nr/parser.y b/tests/test-bison-nr/parser.y new file mode 100644 index 0000000..2cbf9aa --- /dev/null +++ b/tests/test-bison-nr/parser.y @@ -0,0 +1,96 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* + How to compile: + bison --defines --output-file="parser.c" --name-prefix="test" parser.y + */ +%{ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "config.h" + +#define YYERROR_VERBOSE 1 +/* #define YYPARSE_PARAM scanner */ +/* #define YYLEX_PARAM scanner */ + +int yyerror(char* msg); +extern int testget_lineno(void); + + +/* A dummy function. A check against seg-faults in yylval->str. */ +int process_text(char* s) { + int total =0; + while(*s) { + total += (int) *s; + ++s; + } + return total; +} + + +%} + +%pure_parser + +%union { + int lineno; + char * str; +} +%token <str> IDENT +%token <lineno> LINENO +%token EQUAL "=" +%token COLON ":" +%token SPACE " " +%% + +file: + line + | file line + ; + +line: + LINENO COLON SPACE IDENT EQUAL IDENT + { + process_text($4); + process_text($6); + /* Check lineno. */ + if( $1 != @1.first_line || $1 != testget_lineno()) + { + yyerror("Parse failed: Line numbers do not match."); + YYABORT; + } + + /* Recreate the line to stdout. */ + printf ( "%04d: %s=%s\n", @1.first_line, $4, $6); + } + ; + +%% + +int yyerror(char* msg) { + fprintf(stderr,"%s\n",msg); + return 0; +} + diff --git a/tests/test-bison-nr/scanner.l b/tests/test-bison-nr/scanner.l new file mode 100644 index 0000000..2510de6 --- /dev/null +++ b/tests/test-bison-nr/scanner.l @@ -0,0 +1,62 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The scanner expects to link to bison yylval . */ +#include <stdio.h> +#include <stdlib.h> +#include "parser.h" +#include "config.h" +static char* STRDUP(char* s1); +#define YY_EXTRA_TYPE int +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option bison-locations yylineno +%option nomain nounput noyy_top_state noyywrap nodefault warn +%option prefix="test" header="scanner.h" yylineno + + +%% + +^[[:digit:]]+ { + yylval->lineno = yylineno; + yylloc->first_line = (int)strtol(yytext,NULL,10); + return LINENO; + } +":" { return COLON; } +" " { return SPACE; } +"=" { return EQUAL; } +[[:alnum:]_]+ { yylval->str = STRDUP(yytext); return IDENT;} + +\r|\n { } +. { yyterminate();} +%% + + +static char* STRDUP(char* s1) +{ + char* s2 = (char*)malloc(strlen(s1)+1); + sprintf(s2,"%s",s1); + return s2; +} diff --git a/tests/test-bison-nr/test.input b/tests/test-bison-nr/test.input new file mode 100644 index 0000000..94adcb2 --- /dev/null +++ b/tests/test-bison-nr/test.input @@ -0,0 +1,4 @@ +0001: FIRSTNAME=firstname +0002: MIDDLENAME=middle +0003: LASTNAME=lastname +0004: ADDRESS=address diff --git a/tests/test-bison-yylloc/Makefile.am b/tests/test-bison-yylloc/Makefile.am new file mode 100644 index 0000000..7f26f4d --- /dev/null +++ b/tests/test-bison-yylloc/Makefile.am @@ -0,0 +1,53 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l parser.y test.input main.c +CLEANFILES = scanner.c scanner.h parser.c parser.h test-bison-yylloc $(OBJS) OUTPUT +OBJS = scanner.o parser.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +YFLAGS = --defines --output=parser.c --name-prefix="test" + +testname = test-bison-yylloc + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +parser.h: parser.c +scanner.c main.o: parser.h diff --git a/tests/test-bison-yylloc/Makefile.in b/tests/test-bison-yylloc/Makefile.in new file mode 100644 index 0000000..c4bda5a --- /dev/null +++ b/tests/test-bison-yylloc/Makefile.in @@ -0,0 +1,333 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l parser.y test.input main.c +CLEANFILES = scanner.c scanner.h parser.c parser.h test-bison-yylloc $(OBJS) OUTPUT +OBJS = scanner.o parser.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +YFLAGS = --defines --output=parser.c --name-prefix="test" + +testname = test-bison-yylloc +subdir = tests/test-bison-yylloc +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-bison-yylloc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +parser.h: parser.c +scanner.c main.o: parser.h +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-bison-yylloc/main.c b/tests/test-bison-yylloc/main.c new file mode 100644 index 0000000..082c88c --- /dev/null +++ b/tests/test-bison-yylloc/main.c @@ -0,0 +1,42 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "parser.h" +#include "scanner.h" + +extern int testparse(yyscan_t); + +int main ( int argc, char** argv ) +{ + yyscan_t scanner; + /*yydebug =1;*/ + testlex_init ( &scanner ); + testset_in(stdin,scanner); + testparse ( scanner ); + testlex_destroy ( scanner ); + return 0; +} + + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-bison-yylloc/parser.y b/tests/test-bison-yylloc/parser.y new file mode 100644 index 0000000..aaee976 --- /dev/null +++ b/tests/test-bison-yylloc/parser.y @@ -0,0 +1,96 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* + How to compile: + bison --defines --output-file="parser.c" --name-prefix="test" parser.y + */ +%{ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "config.h" + +#define YYERROR_VERBOSE 1 +#define YYPARSE_PARAM scanner +#define YYLEX_PARAM scanner + +int yyerror(char* msg); +extern int testget_lineno(void*); + + +/* A dummy function. A check against seg-faults in yylval->str. */ +int process_text(char* s) { + int total =0; + while(*s) { + total += (int) *s; + ++s; + } + return total; +} + + +%} + +%pure_parser + +%union { + int lineno; + char * str; +} +%token <str> IDENT +%token <lineno> LINENO +%token EQUAL "=" +%token COLON ":" +%token SPACE " " +%% + +file: + line + | file line + ; + +line: + LINENO COLON SPACE IDENT EQUAL IDENT + { + process_text($4); + process_text($6); + /* Check lineno. */ + if( $1 != @1.first_line || $1 != testget_lineno(scanner)) + { + yyerror("Parse failed: Line numbers do not match."); + YYABORT; + } + + /* Recreate the line to stdout. */ + printf ( "%04d: %s=%s\n", @1.first_line, $4, $6); + } + ; + +%% + +int yyerror(char* msg) { + fprintf(stderr,"%s\n",msg); + return 0; +} + diff --git a/tests/test-bison-yylloc/scanner.l b/tests/test-bison-yylloc/scanner.l new file mode 100644 index 0000000..aaf6fd7 --- /dev/null +++ b/tests/test-bison-yylloc/scanner.l @@ -0,0 +1,65 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The scanner expects to link to bison yylval . */ +#include <stdio.h> +#include <stdlib.h> +#include "parser.h" +#include "config.h" +static char* STRDUP(char* s1); +#define YY_EXTRA_TYPE int +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option reentrant bison-bridge bison-locations yylineno +%option nomain nounput noyy_top_state noyywrap nodefault warn +%option prefix="test" header="scanner.h" + + +%% + + if ( !yyextra) + yyextra = 1; + +^[[:digit:]]+ { + yylval->lineno = yyextra++; + yylloc->first_line = (int)strtol(yytext,NULL,10); + return LINENO; + } +":" { return COLON; } +" " { return SPACE; } +"=" { return EQUAL; } +[[:alnum:]_]+ { yylval->str = STRDUP(yytext); return IDENT;} + +\r|\n { } +. { yyterminate();} +%% + + +static char* STRDUP(char* s1) +{ + char* s2 = (char*)malloc(strlen(s1)+1); + sprintf(s2,"%s",s1); + return s2; +} diff --git a/tests/test-bison-yylloc/test.input b/tests/test-bison-yylloc/test.input new file mode 100644 index 0000000..94adcb2 --- /dev/null +++ b/tests/test-bison-yylloc/test.input @@ -0,0 +1,4 @@ +0001: FIRSTNAME=firstname +0002: MIDDLENAME=middle +0003: LASTNAME=lastname +0004: ADDRESS=address diff --git a/tests/test-bison-yylval/Makefile.am b/tests/test-bison-yylval/Makefile.am new file mode 100644 index 0000000..de3071a --- /dev/null +++ b/tests/test-bison-yylval/Makefile.am @@ -0,0 +1,53 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l parser.y test.input main.c +CLEANFILES = scanner.c scanner.h parser.c parser.h test-bison-yylval $(OBJS) OUTPUT +OBJS = parser.o scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +YFLAGS = --defines --output=parser.c --name-prefix="test" + +testname = test-bison-yylval + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +parser.h: parser.c +main.o: parser.h diff --git a/tests/test-bison-yylval/Makefile.in b/tests/test-bison-yylval/Makefile.in new file mode 100644 index 0000000..c94a1ed --- /dev/null +++ b/tests/test-bison-yylval/Makefile.in @@ -0,0 +1,333 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l parser.y test.input main.c +CLEANFILES = scanner.c scanner.h parser.c parser.h test-bison-yylval $(OBJS) OUTPUT +OBJS = parser.o scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +YFLAGS = --defines --output=parser.c --name-prefix="test" + +testname = test-bison-yylval +subdir = tests/test-bison-yylval +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-bison-yylval/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +parser.h: parser.c +main.o: parser.h +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-bison-yylval/main.c b/tests/test-bison-yylval/main.c new file mode 100644 index 0000000..165e672 --- /dev/null +++ b/tests/test-bison-yylval/main.c @@ -0,0 +1,41 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "parser.h" +#include "scanner.h" + +extern int testparse(yyscan_t); + +int main ( int argc, char** argv ) +{ + yyscan_t scanner; + /*yydebug =1;*/ + testlex_init ( &scanner ); + testset_in(stdin,scanner); + testparse ( scanner ); + testlex_destroy ( scanner ); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-bison-yylval/parser.y b/tests/test-bison-yylval/parser.y new file mode 100644 index 0000000..77bac87 --- /dev/null +++ b/tests/test-bison-yylval/parser.y @@ -0,0 +1,82 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* Accepts html-like input. + How to compile: + bison --defines --output-file="parser.c" --name-prefix="test" parser.y + */ +%{ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "config.h" + +#define YYERROR_VERBOSE 1 +#define YYPARSE_PARAM scanner +#define YYLEX_PARAM scanner + +int yyerror(char* msg); + + +/* A dummy function. A check against seg-faults in yylval->str. */ +int process_text(char* s) { + int total =0; + while(*s) { + total += (int) *s; + ++s; + } + return total; +} + + +%} + +%pure_parser + +%union { + long unused; + char * str; +} + +%token <str> TAGNAME TEXT +%token LT +%token GT +%token LTSLASH "</" + +%% + +html: + TEXT { process_text($1); free($1);} + | starttag html endtag + | html TEXT { process_text($2); free($2);} + | html starttag html endtag + ; + +starttag: LT TAGNAME GT { process_text($2); free($2);} ; +endtag: LTSLASH TAGNAME GT { process_text($2);free($2);} ; +%% + +int yyerror(char* msg) { + fprintf(stderr,"%s\n",msg); + return 0; +} diff --git a/tests/test-bison-yylval/scanner.l b/tests/test-bison-yylval/scanner.l new file mode 100644 index 0000000..7e902f7 --- /dev/null +++ b/tests/test-bison-yylval/scanner.l @@ -0,0 +1,81 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The scanner expects to link to bison yylval . */ +#include <stdio.h> +#include <stdlib.h> +#include "parser.h" +#include "config.h" +static char* STRDUP(char* s1); + +enum yesno_t { no=0, yes=1 }; +#define YY_EXTRA_TYPE enum yesno_t +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option reentrant bison-bridge +%option noyywrap nomain nounput noyy_top_state noyywrap nodefault warn +%option prefix="test" header="scanner.h" +%option stack + + +%x IN_TAG +%x DISCARD_THRU_GT +%% + + #define YY_USER_INIT yyextra = no; + #define NEED_TAG_NAME yyextra + + +<INITIAL>{ +"</" { NEED_TAG_NAME= yes; yy_push_state( IN_TAG, yyscanner); return LTSLASH;} +"<"[^[:alpha:]] { yy_push_state(DISCARD_THRU_GT,yyscanner); } +"<" { NEED_TAG_NAME= yes; yy_push_state( IN_TAG, yyscanner); return LT; } +[^<]{1,512} { yyget_lval(yyscanner)->str = STRDUP(yytext); return TEXT;} +} +<IN_TAG>{ +">" { yy_pop_state( yyscanner ); return GT; } +[[:alpha:]][[:alnum:]]* { + if( NEED_TAG_NAME == yes){ + NEED_TAG_NAME=no; + yylval->str = STRDUP(yytext); + return TAGNAME; + } + } + +.|\r|\n { } +} +<DISCARD_THRU_GT>{ +[^>]{1,512} { } +">" { yy_pop_state(yyscanner);} +} +%% + + +static char* STRDUP(char* s1) +{ + char* s2 = (char*)malloc(strlen(s1)+1); + sprintf(s2,"%s",s1); + return s2; +} diff --git a/tests/test-bison-yylval/test.input b/tests/test-bison-yylval/test.input new file mode 100644 index 0000000..846f206 --- /dev/null +++ b/tests/test-bison-yylval/test.input @@ -0,0 +1,5 @@ +<html> +<body bgcolor="white"> + This is a <b>test</b> +</body> +</html> diff --git a/tests/test-c++-basic/Makefile.am b/tests/test-c++-basic/Makefile.am new file mode 100644 index 0000000..1fc579d --- /dev/null +++ b/tests/test-c++-basic/Makefile.am @@ -0,0 +1,45 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.cpp scanner.h test-c++-basic OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +LFLAGS = -+ +#LDFLAGS = + +testname = test-c++-basic + +scanner.cpp: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CXX) -o $@ $(LDFLAGS) $(OBJS) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.cpp.o: + $(CXX) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-c++-basic/Makefile.in b/tests/test-c++-basic/Makefile.in new file mode 100644 index 0000000..92b5b66 --- /dev/null +++ b/tests/test-c++-basic/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.cpp scanner.h test-c++-basic OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +LFLAGS = -+ + +#LDFLAGS = +testname = test-c++-basic +subdir = tests/test-c++-basic +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-c++-basic/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.cpp: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CXX) -o $@ $(LDFLAGS) $(OBJS) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.cpp.o: + $(CXX) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-c++-basic/scanner.l b/tests/test-c++-basic/scanner.l new file mode 100644 index 0000000..48baf00 --- /dev/null +++ b/tests/test-c++-basic/scanner.l @@ -0,0 +1,51 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ + +#include "config.h" + +%} + +%option 8bit outfile="scanner.cpp" prefix="test" +%option nounput nomain noyywrap +%option warn c++ + + +%% + +. { } + +%% + +int main(void); + +int +main (void) +{ + yyFlexLexer f; + f.switch_streams(&std::cin, &std::cout); + f.yylex(); + std::cout << "TEST RETURNING OK." << std::endl; + return 0; +} diff --git a/tests/test-c++-basic/test.input b/tests/test-c++-basic/test.input new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/test-c++-basic/test.input @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/test-c++-multiple-scanners/Makefile.am b/tests/test-c++-multiple-scanners/Makefile.am new file mode 100644 index 0000000..97f863c --- /dev/null +++ b/tests/test-c++-multiple-scanners/Makefile.am @@ -0,0 +1,53 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex +builddir = @builddir@ + +EXTRA_DIST = scanner-1.l scanner-2.l main.cpp test.input +CLEANFILES = scanner-1.cpp test-c++-multiple-scanners OUTPUT $(OBJS) scanner-2.cpp +OBJS = scanner-1.o scanner-2.o main.o + +AM_CXXFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-c++-multiple-scanners + +scanner-1.cpp: $(srcdir)/scanner-1.l + $(FLEX) -+ $(LFLAGS) $< + +scanner-2.cpp: $(srcdir)/scanner-2.l + $(FLEX) -+ $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + $(builddir)/$(testname)$(EXEEXT) < $(srcdir)/test.input + +.cpp.o: + $(CXX) -c -o $@ $(AM_CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< + +main.o: scanner-1.h scanner-2.h +scanner-1.h: scanner-1.cpp +scanner-2.h: scanner-2.cpp diff --git a/tests/test-c++-multiple-scanners/Makefile.in b/tests/test-c++-multiple-scanners/Makefile.in new file mode 100644 index 0000000..289ea56 --- /dev/null +++ b/tests/test-c++-multiple-scanners/Makefile.in @@ -0,0 +1,333 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex +builddir = @builddir@ + +EXTRA_DIST = scanner-1.l scanner-2.l main.cpp test.input +CLEANFILES = scanner-1.cpp test-c++-multiple-scanners OUTPUT $(OBJS) scanner-2.cpp +OBJS = scanner-1.o scanner-2.o main.o + +AM_CXXFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-c++-multiple-scanners +subdir = tests/test-c++-multiple-scanners +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-c++-multiple-scanners/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner-1.cpp: $(srcdir)/scanner-1.l + $(FLEX) -+ $(LFLAGS) $< + +scanner-2.cpp: $(srcdir)/scanner-2.l + $(FLEX) -+ $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + $(builddir)/$(testname)$(EXEEXT) < $(srcdir)/test.input + +.cpp.o: + $(CXX) -c -o $@ $(AM_CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< + +main.o: scanner-1.h scanner-2.h +scanner-1.h: scanner-1.cpp +scanner-2.h: scanner-2.cpp +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-c++-multiple-scanners/main.cpp b/tests/test-c++-multiple-scanners/main.cpp new file mode 100644 index 0000000..aa89949 --- /dev/null +++ b/tests/test-c++-multiple-scanners/main.cpp @@ -0,0 +1,54 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include <stdio.h> + +#undef yyFlexLexer +#define yyFlexLexer S1_FlexLexer +#include <FlexLexer.h> + +#undef yyFlexLexer +#define yyFlexLexer S2_FlexLexer +#include <FlexLexer.h> + +int +main ( int argc, char** argv ) +{ + int S1_ok=1, S2_ok=1; + S1_FlexLexer* S1 = new S1_FlexLexer; + S2_FlexLexer* S2 = new S2_FlexLexer; + + // scan simultaneously. + while(S1_ok || S2_ok) + { + if (S1_ok) + S1_ok = S1->yylex(); + if (S2_ok) + S2_ok = S2->yylex(); + } + printf("TEST RETURNING OK.\n"); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-c++-multiple-scanners/scanner-1.l b/tests/test-c++-multiple-scanners/scanner-1.l new file mode 100644 index 0000000..38cc5d7 --- /dev/null +++ b/tests/test-c++-multiple-scanners/scanner-1.l @@ -0,0 +1,44 @@ + // This file is part of flex. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions + // are met: + // + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // Neither the name of the University nor the names of its contributors + // may be used to endorse or promote products derived from this software + // without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + // PURPOSE. + +%{ +#include "config.h" + +%} + +%option 8bit outfile="scanner-1.cpp" prefix="S1_" +%option nounput nomain noyywrap +%option warn stack noyy_top_state + +%x ON +%x OFF +%% +<INITIAL>{ +on yy_push_state(ON); return 10; +off yy_push_state(OFF); return 11; +.|\n return 12; +} +<ON>.|\n yy_pop_state(); return 13; + +<OFF>.|\n yy_pop_state(); return 14; + +%% + diff --git a/tests/test-c++-multiple-scanners/scanner-2.l b/tests/test-c++-multiple-scanners/scanner-2.l new file mode 100644 index 0000000..db84402 --- /dev/null +++ b/tests/test-c++-multiple-scanners/scanner-2.l @@ -0,0 +1,43 @@ + // This file is part of flex. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions + // are met: + // + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // Neither the name of the University nor the names of its contributors + // may be used to endorse or promote products derived from this software + // without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + // PURPOSE. + +%{ +#include "config.h" + +%} + +%option 8bit outfile="scanner-2.cpp" prefix="S2_" +%option nounput nomain noyywrap +%option warn stack noyy_top_state + +%x OFF +%x ON +%% +<INITIAL>{ +on yy_push_state(ON); return 3; +off yy_push_state(OFF); return 4; +.|\n return 5; +} +<ON>.|\n yy_pop_state(); return 6; + +<OFF>.|\n yy_pop_state(); return 7; +%% + diff --git a/tests/test-c++-multiple-scanners/test.input b/tests/test-c++-multiple-scanners/test.input new file mode 100644 index 0000000..08498fa --- /dev/null +++ b/tests/test-c++-multiple-scanners/test.input @@ -0,0 +1 @@ +foo on bar off diff --git a/tests/test-c-cpp-nr/Makefile.am b/tests/test-c-cpp-nr/Makefile.am new file mode 100644 index 0000000..6e17e09 --- /dev/null +++ b/tests/test-c-cpp-nr/Makefile.am @@ -0,0 +1,45 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.cpp test-c-cpp-nr $(OBJS) OUTPUT +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-c-cpp-nr + +scanner.cpp: $(srcdir)/scanner.l + $(FLEX) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.cpp.o: + $(CXX) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< diff --git a/tests/test-c-cpp-nr/Makefile.in b/tests/test-c-cpp-nr/Makefile.in new file mode 100644 index 0000000..a8b7da8 --- /dev/null +++ b/tests/test-c-cpp-nr/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.cpp test-c-cpp-nr $(OBJS) OUTPUT +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-c-cpp-nr +subdir = tests/test-c-cpp-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-c-cpp-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.cpp: $(srcdir)/scanner.l + $(FLEX) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.cpp.o: + $(CXX) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-c-cpp-nr/scanner.l b/tests/test-c-cpp-nr/scanner.l new file mode 100644 index 0000000..63543e4 --- /dev/null +++ b/tests/test-c-cpp-nr/scanner.l @@ -0,0 +1,56 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + The scanner is not really important -- we only care if + it compiles under a c++ compiler, and runs. */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit outfile="scanner.cpp" prefix="test" +%option nounput nomain noyywrap +%option warn + + +%% + +. { } + +%% + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-c-cpp-nr/test.input b/tests/test-c-cpp-nr/test.input new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/test-c-cpp-nr/test.input @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/test-c-cpp-r/Makefile.am b/tests/test-c-cpp-r/Makefile.am new file mode 100644 index 0000000..a0b9299 --- /dev/null +++ b/tests/test-c-cpp-r/Makefile.am @@ -0,0 +1,45 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.cpp test-c-cpp-r $(OBJS) OUTPUT +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-c-cpp-r + +scanner.cpp: $(srcdir)/scanner.l + $(FLEX) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.cpp.o: + $(CXX) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< diff --git a/tests/test-c-cpp-r/Makefile.in b/tests/test-c-cpp-r/Makefile.in new file mode 100644 index 0000000..a74cf9b --- /dev/null +++ b/tests/test-c-cpp-r/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.cpp test-c-cpp-r $(OBJS) OUTPUT +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-c-cpp-r +subdir = tests/test-c-cpp-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-c-cpp-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.cpp: $(srcdir)/scanner.l + $(FLEX) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.cpp.o: + $(CXX) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-c-cpp-r/scanner.l b/tests/test-c-cpp-r/scanner.l new file mode 100644 index 0000000..3182d1b --- /dev/null +++ b/tests/test-c-cpp-r/scanner.l @@ -0,0 +1,61 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + The scanner is not really important -- we only care if + it compiles under a c++ compiler, and runs. */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +/*#include "parser.h" */ + +%} + +%option 8bit outfile="scanner.cpp" prefix="test" +%option nounput nomain noyywrap +%option warn reentrant + + +%% + +. { } + +%% + +int main(void); + +int +main () +{ + yyscan_t lexer; + yylex_init( &lexer ); + yyset_out ( stdout,lexer); + yyset_in ( stdin, lexer); + while( yylex(lexer) ) + { + } + yylex_destroy( lexer ); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-c-cpp-r/test.input b/tests/test-c-cpp-r/test.input new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/test-c-cpp-r/test.input @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/test-debug-nr/Makefile.am b/tests/test-debug-nr/Makefile.am new file mode 100644 index 0000000..40d59e8 --- /dev/null +++ b/tests/test-debug-nr/Makefile.am @@ -0,0 +1,44 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h test-debug-nr OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a + +testname = test-debug-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-debug-nr/Makefile.in b/tests/test-debug-nr/Makefile.in new file mode 100644 index 0000000..c42d2eb --- /dev/null +++ b/tests/test-debug-nr/Makefile.in @@ -0,0 +1,324 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h test-debug-nr OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +testname = test-debug-nr +subdir = tests/test-debug-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-debug-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-debug-nr/scanner.l b/tests/test-debug-nr/scanner.l new file mode 100644 index 0000000..13d11d6 --- /dev/null +++ b/tests/test-debug-nr/scanner.l @@ -0,0 +1,52 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn debug + +%% +.+ { } +\n { } +%% + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + yy_flex_debug = 1; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-debug-nr/test.input b/tests/test-debug-nr/test.input new file mode 100644 index 0000000..8d6476c --- /dev/null +++ b/tests/test-debug-nr/test.input @@ -0,0 +1,2 @@ +Any input will do for this test. +We are only testing if it actually runs in debug mode. diff --git a/tests/test-debug-r/Makefile.am b/tests/test-debug-r/Makefile.am new file mode 100644 index 0000000..1937139 --- /dev/null +++ b/tests/test-debug-r/Makefile.am @@ -0,0 +1,44 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-debug-r OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a + +testname = test-debug-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-debug-r/Makefile.in b/tests/test-debug-r/Makefile.in new file mode 100644 index 0000000..2fcec8d --- /dev/null +++ b/tests/test-debug-r/Makefile.in @@ -0,0 +1,324 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-debug-r OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +testname = test-debug-r +subdir = tests/test-debug-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-debug-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-debug-r/scanner.l b/tests/test-debug-r/scanner.l new file mode 100644 index 0000000..14a335e --- /dev/null +++ b/tests/test-debug-r/scanner.l @@ -0,0 +1,59 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn debug reentrant + +%% +.+ { } +\n { } +%% + +int main(void); + +int main () +{ + yyscan_t lexer; + yylex_init( &lexer ); + yyset_out ( stdout,lexer); + yyset_in ( stdin, lexer); + + /* Just see if the next line compiles. */ + testset_debug (testget_debug(lexer), lexer); + + while( yylex(lexer) ) + { + } + yylex_destroy( lexer ); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-debug-r/test.input b/tests/test-debug-r/test.input new file mode 100644 index 0000000..8d6476c --- /dev/null +++ b/tests/test-debug-r/test.input @@ -0,0 +1,2 @@ +Any input will do for this test. +We are only testing if it actually runs in debug mode. diff --git a/tests/test-header-nr/Makefile.am b/tests/test-header-nr/Makefile.am new file mode 100644 index 0000000..2227acd --- /dev/null +++ b/tests/test-header-nr/Makefile.am @@ -0,0 +1,53 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l test.input main.c +CLEANFILES = scanner.c scanner.h test-header-nr $(OBJS) OUTPUT +OBJS = scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-header-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +scanner.h: scanner.c +main.o: scanner.h diff --git a/tests/test-header-nr/Makefile.in b/tests/test-header-nr/Makefile.in new file mode 100644 index 0000000..d7aa724 --- /dev/null +++ b/tests/test-header-nr/Makefile.in @@ -0,0 +1,333 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l test.input main.c +CLEANFILES = scanner.c scanner.h test-header-nr $(OBJS) OUTPUT +OBJS = scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-header-nr +subdir = tests/test-header-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-header-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +scanner.h: scanner.c +main.o: scanner.h +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-header-nr/main.c b/tests/test-header-nr/main.c new file mode 100644 index 0000000..b03fe30 --- /dev/null +++ b/tests/test-header-nr/main.c @@ -0,0 +1,37 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "scanner.h" + +int +main ( int argc, char** argv ) +{ + testin = stdin; + testout = stdout; + testlex(); + printf("TEST RETURNING OK.\n"); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-header-nr/scanner.l b/tests/test-header-nr/scanner.l new file mode 100644 index 0000000..a768f72 --- /dev/null +++ b/tests/test-header-nr/scanner.l @@ -0,0 +1,42 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit outfile="scanner.c" prefix="test" header="scanner.h" +%option nounput nomain noyywrap +%option warn + + +%% + +.|\n { } + +%% + diff --git a/tests/test-header-nr/test.input b/tests/test-header-nr/test.input new file mode 100644 index 0000000..2ce5001 --- /dev/null +++ b/tests/test-header-nr/test.input @@ -0,0 +1,3 @@ +Any input is ok for this scanner. +We only care if it links. + diff --git a/tests/test-header-r/Makefile.am b/tests/test-header-r/Makefile.am new file mode 100644 index 0000000..aa86bc1 --- /dev/null +++ b/tests/test-header-r/Makefile.am @@ -0,0 +1,54 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l test.input main.c +CLEANFILES = scanner.c scanner.h test-header-r OUTPUT $(OBJS) +OBJS = scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-header-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +scanner.h: scanner.c +main.o: scanner.h diff --git a/tests/test-header-r/Makefile.in b/tests/test-header-r/Makefile.in new file mode 100644 index 0000000..91bb2fa --- /dev/null +++ b/tests/test-header-r/Makefile.in @@ -0,0 +1,334 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l test.input main.c +CLEANFILES = scanner.c scanner.h test-header-r OUTPUT $(OBJS) +OBJS = scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +LFLAGS = --header="scanner.h" + +#YFLAGS = --defines --output=parser.c +testname = test-header-r +subdir = tests/test-header-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-header-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +scanner.h: scanner.c +main.o: scanner.h +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-header-r/main.c b/tests/test-header-r/main.c new file mode 100644 index 0000000..353a63e --- /dev/null +++ b/tests/test-header-r/main.c @@ -0,0 +1,63 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "scanner.h" + +/* The scanner itself is not important here. + * We simply try to use all the functions that are exported in the + * header, to see if we get any compiler warnings. + */ +int +main ( int argc, char** argv ) +{ + yyscan_t scanner; + FILE *fp; + char * extra = "EXTRA"; + + testlex_init(&scanner); + testset_in(stdin,scanner); + testset_out(stdout,scanner); + testset_extra(extra,scanner); + + fp = testget_in(scanner); + fp = testget_out(scanner); + + while(testlex(scanner)) { + char * text; + int line; + line = testget_lineno(scanner); + text = testget_text(scanner); + + if( (char*)testget_extra(scanner) != extra) + break; + + if ( !text || line < 0) + continue; + } + testlex_destroy(scanner); + printf("TEST RETURNING OK.\n"); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-header-r/scanner.l b/tests/test-header-r/scanner.l new file mode 100644 index 0000000..9f565c9 --- /dev/null +++ b/tests/test-header-r/scanner.l @@ -0,0 +1,46 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Build "scanner.c". + The scanner is not important. + This test is really about compilation. See "main.c". +*/ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option reentrant +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn + + +%% + +.|\n { } + +%% + diff --git a/tests/test-header-r/test.input b/tests/test-header-r/test.input new file mode 100644 index 0000000..2ce5001 --- /dev/null +++ b/tests/test-header-r/test.input @@ -0,0 +1,3 @@ +Any input is ok for this scanner. +We only care if it links. + diff --git a/tests/test-include-by-buffer/Makefile.am b/tests/test-include-by-buffer/Makefile.am new file mode 100644 index 0000000..9274823 --- /dev/null +++ b/tests/test-include-by-buffer/Makefile.am @@ -0,0 +1,49 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test-1.input test-2.input test-3.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-include-by-buffer OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-include-by-buffer + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) $(srcdir)/test-1.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-include-by-buffer/Makefile.in b/tests/test-include-by-buffer/Makefile.in new file mode 100644 index 0000000..dc8301a --- /dev/null +++ b/tests/test-include-by-buffer/Makefile.in @@ -0,0 +1,329 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test-1.input test-2.input test-3.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-include-by-buffer OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-include-by-buffer +subdir = tests/test-include-by-buffer +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-include-by-buffer/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) $(srcdir)/test-1.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-include-by-buffer/scanner.l b/tests/test-include-by-buffer/scanner.l new file mode 100644 index 0000000..3224543 --- /dev/null +++ b/tests/test-include-by-buffer/scanner.l @@ -0,0 +1,102 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A scanner file to build "scanner.c". + Input language is any text. + "#include <filename>" causes a buffer switch. + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn + +%x GET_FILENAME +%{ + +#define MAX_INCLUDE_DEPTH 10 +YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; +int include_stack_ptr = 0; +%} +%% + +<INITIAL>{ +^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } +.|\n { ECHO; } +} + +<GET_FILENAME>{ +[[:alnum:]_.-]+> { + /* recurse */ + yytext[yyleng-1]='\0'; + include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; + if((yyin=fopen(yytext,"r"))==NULL) { + fprintf(stderr,"*** Error: Could not open include file \"%s\".\n",yytext); + yyterminate(); + } + yy_switch_to_buffer( yy_create_buffer( yyin, YY_BUF_SIZE )); + BEGIN(0); + } +.|\n { + fprintf(stderr,"Invalid input \"%s\".\n", yytext); + yyterminate(); + } +} + +<<EOF>> { + if ( --include_stack_ptr < 0 ) { + yyterminate(); + } + else { + fclose(yyin); + yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_switch_to_buffer( include_stack[include_stack_ptr] ); + } + } + +%% + +int main(int argc, char** argv); + +int +main ( int argc, char** argv ) +{ + FILE * fp; + if( argc != 2 ) { + fprintf(stderr,"*** Error: Must specifiy one filename.\n"); + exit(-1); + } + if((fp=fopen(argv[1],"r"))==NULL) { + fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); + exit(-1); + } + yyin = fp; + yyout = stdout; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-include-by-buffer/test-1.input b/tests/test-include-by-buffer/test-1.input new file mode 100644 index 0000000..355beaa --- /dev/null +++ b/tests/test-include-by-buffer/test-1.input @@ -0,0 +1,3 @@ +Beginning of "test-1.input". +#include <test-2.input> +End of "test-1.input". diff --git a/tests/test-include-by-buffer/test-2.input b/tests/test-include-by-buffer/test-2.input new file mode 100644 index 0000000..45f11f9 --- /dev/null +++ b/tests/test-include-by-buffer/test-2.input @@ -0,0 +1,3 @@ +Beginning of "test-2.input". +#include <test-3.input> +End of "test-2.input". diff --git a/tests/test-include-by-buffer/test-3.input b/tests/test-include-by-buffer/test-3.input new file mode 100644 index 0000000..6a2d055 --- /dev/null +++ b/tests/test-include-by-buffer/test-3.input @@ -0,0 +1,2 @@ +Beginning of "test-3.input". +End of "test-3.input". diff --git a/tests/test-include-by-push/Makefile.am b/tests/test-include-by-push/Makefile.am new file mode 100644 index 0000000..46f700d --- /dev/null +++ b/tests/test-include-by-push/Makefile.am @@ -0,0 +1,49 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test-1.input test-2.input test-3.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-include-by-push OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-include-by-push + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) $(srcdir)/test-1.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-include-by-push/Makefile.in b/tests/test-include-by-push/Makefile.in new file mode 100644 index 0000000..cdbbe3f --- /dev/null +++ b/tests/test-include-by-push/Makefile.in @@ -0,0 +1,329 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test-1.input test-2.input test-3.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-include-by-push OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-include-by-push +subdir = tests/test-include-by-push +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-include-by-push/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) $(srcdir)/test-1.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-include-by-push/scanner.l b/tests/test-include-by-push/scanner.l new file mode 100644 index 0000000..8556152 --- /dev/null +++ b/tests/test-include-by-push/scanner.l @@ -0,0 +1,92 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A scanner file to build "scanner.c". + Input language is any text. + "#include <filename>" causes a buffer switch. + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn + +%x GET_FILENAME + +%% + +<INITIAL>{ +^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } +.|\n { ECHO; } +} + +<GET_FILENAME>{ +[[:alnum:]_.-]+> { + /* recurse */ + yytext[yyleng-1]='\0'; + if((yyin=fopen(yytext,"r"))==NULL) { + fprintf(stderr,"*** Error: Could not open include file \"%s\".\n",yytext); + yyterminate(); + } + yypush_buffer_state( yy_create_buffer( yyin, YY_BUF_SIZE )); + BEGIN(0); + } +.|\n { + fprintf(stderr,"Invalid input \"%s\".\n", yytext); + yyterminate(); + } +} + +<<EOF>> { + fclose(yyin); + yypop_buffer_state(); + if(!YY_CURRENT_BUFFER) + yyterminate(); + } + +%% + +int main(int argc, char** argv); + +int +main ( int argc, char** argv ) +{ + FILE * fp; + if( argc != 2 ) { + fprintf(stderr,"*** Error: Must specifiy one filename.\n"); + exit(-1); + } + if((fp=fopen(argv[1],"r"))==NULL) { + fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); + exit(-1); + } + yyin = fp; + yyout = stdout; + yylex(); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-include-by-push/test-1.input b/tests/test-include-by-push/test-1.input new file mode 100644 index 0000000..355beaa --- /dev/null +++ b/tests/test-include-by-push/test-1.input @@ -0,0 +1,3 @@ +Beginning of "test-1.input". +#include <test-2.input> +End of "test-1.input". diff --git a/tests/test-include-by-push/test-2.input b/tests/test-include-by-push/test-2.input new file mode 100644 index 0000000..45f11f9 --- /dev/null +++ b/tests/test-include-by-push/test-2.input @@ -0,0 +1,3 @@ +Beginning of "test-2.input". +#include <test-3.input> +End of "test-2.input". diff --git a/tests/test-include-by-push/test-3.input b/tests/test-include-by-push/test-3.input new file mode 100644 index 0000000..6a2d055 --- /dev/null +++ b/tests/test-include-by-push/test-3.input @@ -0,0 +1,2 @@ +Beginning of "test-3.input". +End of "test-3.input". diff --git a/tests/test-include-by-reentrant/Makefile.am b/tests/test-include-by-reentrant/Makefile.am new file mode 100644 index 0000000..1ce6346 --- /dev/null +++ b/tests/test-include-by-reentrant/Makefile.am @@ -0,0 +1,49 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test-1.input test-2.input test-3.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-include-by-reentrant OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-include-by-reentrant + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname) $(srcdir)/test-1.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-include-by-reentrant/Makefile.in b/tests/test-include-by-reentrant/Makefile.in new file mode 100644 index 0000000..8a20111 --- /dev/null +++ b/tests/test-include-by-reentrant/Makefile.in @@ -0,0 +1,329 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test-1.input test-2.input test-3.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-include-by-reentrant OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-include-by-reentrant +subdir = tests/test-include-by-reentrant +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-include-by-reentrant/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname) $(srcdir)/test-1.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-include-by-reentrant/scanner.l b/tests/test-include-by-reentrant/scanner.l new file mode 100644 index 0000000..8d23681 --- /dev/null +++ b/tests/test-include-by-reentrant/scanner.l @@ -0,0 +1,101 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A scanner file to build "scanner.c". + Input language is any text. + "#include <filename>" causes a new scanner to be created. + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option reentrant +%option warn + +%x GET_FILENAME + +%% + +<INITIAL>{ +^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } +.|\n { ECHO; } +} + +<GET_FILENAME>{ +[[:alnum:]_.-]+> { + /* recurse */ + yyscan_t scanner; + FILE * fp; + yytext[yyleng-1]='\0'; + if((fp=fopen(yytext,"r"))==NULL) { + fprintf(stderr,"*** Error: Could not open include file \"%s\".\n", + yytext); + yyterminate(); + } + yylex_init(&scanner); + yyset_in( fp, scanner); + yyset_out( stdout, scanner); + yylex(scanner); + yylex_destroy(scanner); + + BEGIN(0); + } +.|\n { + fprintf(stderr,"Invalid input \"%s\".\n", yytext); + yyterminate(); + } +} + +<<EOF>> { fclose(yyin); yyterminate();} + +%% + +int main (int argc, char** argv); + +int +main ( argc, argv ) + int argc; + char ** argv; +{ + FILE * fp; + yyscan_t scanner; + if( argc != 2 ) { + fprintf(stderr,"*** Error: Must specifiy one filename.\n"); + exit(-1); + } + if((fp=fopen(argv[1],"r"))==NULL) { + fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); + exit(-1); + } + yylex_init(&scanner); + yyset_in( fp, scanner); + yyset_out( stdout, scanner); + yylex(scanner); + yylex_destroy(scanner); + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-include-by-reentrant/test-1.input b/tests/test-include-by-reentrant/test-1.input new file mode 100644 index 0000000..355beaa --- /dev/null +++ b/tests/test-include-by-reentrant/test-1.input @@ -0,0 +1,3 @@ +Beginning of "test-1.input". +#include <test-2.input> +End of "test-1.input". diff --git a/tests/test-include-by-reentrant/test-2.input b/tests/test-include-by-reentrant/test-2.input new file mode 100644 index 0000000..45f11f9 --- /dev/null +++ b/tests/test-include-by-reentrant/test-2.input @@ -0,0 +1,3 @@ +Beginning of "test-2.input". +#include <test-3.input> +End of "test-2.input". diff --git a/tests/test-include-by-reentrant/test-3.input b/tests/test-include-by-reentrant/test-3.input new file mode 100644 index 0000000..6a2d055 --- /dev/null +++ b/tests/test-include-by-reentrant/test-3.input @@ -0,0 +1,2 @@ +Beginning of "test-3.input". +End of "test-3.input". diff --git a/tests/test-linedir-r/Makefile.am b/tests/test-linedir-r/Makefile.am new file mode 100644 index 0000000..746f5ab --- /dev/null +++ b/tests/test-linedir-r/Makefile.am @@ -0,0 +1,56 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l test.input main.c check-lines.awk +CLEANFILES = scanner.c scanner.h test-linedir-r OUTPUT $(OBJS) +OBJS = scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-linedir-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + cat -n scanner.c | grep '#line' | grep scanner.c | awk -f $(srcdir)/check-lines.awk + cat -n scanner.h | grep '#line' | grep scanner.h | awk -f $(srcdir)/check-lines.awk + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +scanner.h: scanner.c +main.o: scanner.h diff --git a/tests/test-linedir-r/Makefile.in b/tests/test-linedir-r/Makefile.in new file mode 100644 index 0000000..27ead4d --- /dev/null +++ b/tests/test-linedir-r/Makefile.in @@ -0,0 +1,336 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l test.input main.c check-lines.awk +CLEANFILES = scanner.c scanner.h test-linedir-r OUTPUT $(OBJS) +OBJS = scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +LFLAGS = --header="scanner.h" + +#YFLAGS = --defines --output=parser.c +testname = test-linedir-r +subdir = tests/test-linedir-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-linedir-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + cat -n scanner.c | grep '#line' | grep scanner.c | awk -f $(srcdir)/check-lines.awk + cat -n scanner.h | grep '#line' | grep scanner.h | awk -f $(srcdir)/check-lines.awk + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +scanner.h: scanner.c +main.o: scanner.h +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-linedir-r/check-lines.awk b/tests/test-linedir-r/check-lines.awk new file mode 100644 index 0000000..6a1e5ec --- /dev/null +++ b/tests/test-linedir-r/check-lines.awk @@ -0,0 +1,7 @@ +{ + if( /#line/ && $1 != ($3 - 1)) { + printf "Line directive mismatch at line %d: %s\n", NR, $0; + exit 1; + } +} + diff --git a/tests/test-linedir-r/main.c b/tests/test-linedir-r/main.c new file mode 100644 index 0000000..6ba9808 --- /dev/null +++ b/tests/test-linedir-r/main.c @@ -0,0 +1,58 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "scanner.h" + +int +main ( int argc, char** argv ) +{ + yyscan_t scanner; + FILE *fp; + char * extra = "EXTRA"; + + testlex_init(&scanner); + testset_in(stdin,scanner); + testset_out(stdout,scanner); + testset_extra(extra,scanner); + + fp = testget_in(scanner); + fp = testget_out(scanner); + + while(testlex(scanner)) { + char * text; + int line; + line = testget_lineno(scanner); + text = testget_text(scanner); + + if( (char*)testget_extra(scanner) != extra) + break; + + if ( !text || line < 0) + continue; + } + testlex_destroy(scanner); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-linedir-r/scanner.l b/tests/test-linedir-r/scanner.l new file mode 100644 index 0000000..e87cc60 --- /dev/null +++ b/tests/test-linedir-r/scanner.l @@ -0,0 +1,45 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Build "scanner.c". + The scanner is not important. + This test is really about getting the line directives correct. +*/ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option reentrant +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn + +%% + +.|\n { } + +%% + diff --git a/tests/test-linedir-r/test.input b/tests/test-linedir-r/test.input new file mode 100644 index 0000000..2ce5001 --- /dev/null +++ b/tests/test-linedir-r/test.input @@ -0,0 +1,3 @@ +Any input is ok for this scanner. +We only care if it links. + diff --git a/tests/test-lineno-nr/Makefile.am b/tests/test-lineno-nr/Makefile.am new file mode 100644 index 0000000..8ccf49d --- /dev/null +++ b/tests/test-lineno-nr/Makefile.am @@ -0,0 +1,45 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-lineno-nr OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +testname = test-lineno-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + test `./$(testname)$(EXEEXT) < $(srcdir)/test.input` -eq \ + `./$(testname)$(EXEEXT) 1 < $(srcdir)/test.input` || exit 1 + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-lineno-nr/Makefile.in b/tests/test-lineno-nr/Makefile.in new file mode 100644 index 0000000..e5fa855 --- /dev/null +++ b/tests/test-lineno-nr/Makefile.in @@ -0,0 +1,324 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-lineno-nr OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +testname = test-lineno-nr +subdir = tests/test-lineno-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-lineno-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + test `./$(testname)$(EXEEXT) < $(srcdir)/test.input` -eq \ + `./$(testname)$(EXEEXT) 1 < $(srcdir)/test.input` || exit 1 + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-lineno-nr/scanner.l b/tests/test-lineno-nr/scanner.l new file mode 100644 index 0000000..4341335 --- /dev/null +++ b/tests/test-lineno-nr/scanner.l @@ -0,0 +1,94 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + Run as: + test-lineno-nr # report flex's yylineno + test-lineno-nr 1 # report count_newlines(stdin) +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap yylineno +%option warn + +WORD [[:alpha:]]+ +DIGIT [[:digit:]] + +%% + /* The goal here is to test the yylineno processing by: + - providing some rules than CAN match newlines and + other rules that can NOT match newlines, + - matching several newlines in one rule, + - directly modifying yylineno. + */ + +"yylineno++" yylineno++; +"yylineno--" yylineno--; +[[:blank:]]+ +{WORD} +{DIGIT}+(\n{DIGIT}+)* +\n +. +<<EOF>> { printf("%d\n", yylineno); + yyterminate(); + } + +%% + +/* returns number of '\n' characters in input, plus one. + This is what flex does, essentially. */ + +static int +count_newlines (FILE* in) +{ + int n=1,c; + while ((c=fgetc(in)) != EOF) + if( c == '\n') + n++; + return n; +} + +int main ( int, char**); + +int +main ( argc, argv ) + int argc; + char** argv; +{ + if( argc > 1 ) + printf("%d\n", count_newlines(stdin)); + + else{ + yyin = stdin; + yyout = stdout; + yylex(); + } + return 0; +} diff --git a/tests/test-lineno-nr/test.input b/tests/test-lineno-nr/test.input new file mode 100644 index 0000000..c1eb961 --- /dev/null +++ b/tests/test-lineno-nr/test.input @@ -0,0 +1,19 @@ +These words +are separated +by newlines +and sometimes + spaces +too. +The next three lines are numbers with only intervening newlines +01123 +581321 +34 +And now for some blank lines.... + + +Finally, we directly modify yylineno, but then change it back afterwards +(see scanner.l): + +yylineno++ + +yylineno-- diff --git a/tests/test-lineno-r/Makefile.am b/tests/test-lineno-r/Makefile.am new file mode 100644 index 0000000..2ea85f6 --- /dev/null +++ b/tests/test-lineno-r/Makefile.am @@ -0,0 +1,45 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-lineno-r OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +testname = test-lineno-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + test `./$(testname)$(EXEEXT) < $(srcdir)/test.input` -eq \ + `./$(testname)$(EXEEXT) 1 < $(srcdir)/test.input` || exit 1 + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-lineno-r/Makefile.in b/tests/test-lineno-r/Makefile.in new file mode 100644 index 0000000..7c0835c --- /dev/null +++ b/tests/test-lineno-r/Makefile.in @@ -0,0 +1,324 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-lineno-r OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +testname = test-lineno-r +subdir = tests/test-lineno-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-lineno-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + test `./$(testname)$(EXEEXT) < $(srcdir)/test.input` -eq \ + `./$(testname)$(EXEEXT) 1 < $(srcdir)/test.input` || exit 1 + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-lineno-r/scanner.l b/tests/test-lineno-r/scanner.l new file mode 100644 index 0000000..8933f5f --- /dev/null +++ b/tests/test-lineno-r/scanner.l @@ -0,0 +1,97 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + Run as: + test-lineno-r # report flex's yylineno + test-lineno-r 1 # report count_newlines(stdin) +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap yylineno reentrant +%option warn + +WORD [[:alpha:]]+ +DIGIT [[:digit:]] + +%% + /* The goal here is to test the yylineno processing by: + - providing some rules than CAN match newlines and + other rules that can NOT match newlines, + - matching several newlines in one rule, + - directly modifying yylineno. + */ + +"yylineno++" yylineno++; +"yylineno--" yylineno--; +[[:blank:]]+ +{WORD} +{DIGIT}+(\n{DIGIT}+)* +\n +. +<<EOF>> { printf("%d\n", yylineno); + yyterminate(); + } + +%% + +/* returns number of '\n' characters in input, plus one. + This is what flex does, essentially. */ + +static int +count_newlines (FILE* in) +{ + int n=1,c; + while ((c=fgetc(in)) != EOF) + if( c == '\n') + n++; + return n; +} + +int main ( int argc, char** argv ); + +int +main (argc, argv) + int argc; + char ** argv; +{ + if( argc > 1 ) + printf("%d\n", count_newlines(stdin)); + + else{ + yyscan_t s; + yylex_init(&s); + yyset_in(stdin,s); + yyset_out(stdout,s); + yylex(s); + yylex_destroy(s); + } + return 0; +} diff --git a/tests/test-lineno-r/test.input b/tests/test-lineno-r/test.input new file mode 100644 index 0000000..c1eb961 --- /dev/null +++ b/tests/test-lineno-r/test.input @@ -0,0 +1,19 @@ +These words +are separated +by newlines +and sometimes + spaces +too. +The next three lines are numbers with only intervening newlines +01123 +581321 +34 +And now for some blank lines.... + + +Finally, we directly modify yylineno, but then change it back afterwards +(see scanner.l): + +yylineno++ + +yylineno-- diff --git a/tests/test-mem-nr/Makefile.am b/tests/test-mem-nr/Makefile.am new file mode 100644 index 0000000..a79fe07 --- /dev/null +++ b/tests/test-mem-nr/Makefile.am @@ -0,0 +1,44 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h test-mem-nr OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a + +testname = test-mem-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-mem-nr/Makefile.in b/tests/test-mem-nr/Makefile.in new file mode 100644 index 0000000..bb25883 --- /dev/null +++ b/tests/test-mem-nr/Makefile.in @@ -0,0 +1,324 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h test-mem-nr OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +testname = test-mem-nr +subdir = tests/test-mem-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-mem-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-mem-nr/scanner.l b/tests/test-mem-nr/scanner.l new file mode 100644 index 0000000..42a2355 --- /dev/null +++ b/tests/test-mem-nr/scanner.l @@ -0,0 +1,180 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + * The whole idea is to cause memory realloc by + * 1. pushing a lot on the condition stack, and + * 2. eating input greater than YY_BUF_SIZE + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +/* Insanely small read buffer. This pretty much guarantees at least one realloc. */ +#ifdef YY_BUF_SIZE +#undef YY_BUF_SIZE +#endif +#define YY_BUF_SIZE 8 + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn stack nodefault +%option noyyalloc noyyrealloc noyyfree + +%x parens + +%% + +<INITIAL>{ +"(" { printf("yy_push_state(parens)\n"); yy_push_state(parens); } +len=[0-9]+ { printf("About read token where %s\n",yytext); } +0+ { } +.|\n { } +} + +<parens>{ +"(" { printf("yy_push_state(parens)\n"); yy_push_state(parens); } +")" { printf("yy_pop_state()\n");yy_pop_state();} +[^()\n]+ { } +.|\n { } +} + +%% +/* total memory allocated */ +static size_t total_mem=0; + +/* track the amount of memory for ptr. */ +struct memsz { + void* p; + size_t sz; +}; + +static struct memsz * ptrs=0; /* Array of pairs. */ +static int nptrs=0; /* Number of pairs in array. */ +static int arrsz=0; /* Capacity of array. */ + +static void dump_mem(FILE* fp){ + int i; + fprintf(fp,"\tptrs[%d] = {", nptrs); + for (i=0; i < arrsz; i++) + fprintf(fp," {%#lx,%ld},", (long)ptrs[i].p, (long)ptrs[i].sz); + + fprintf(fp,"}\n"); +} + +void * yyalloc(yy_size_t n) +{ + void * p; + struct memsz * old; + int i; + + total_mem += n; + p = (void*)malloc(n); + + if( nptrs >= arrsz){ + /* increase array size by 1 */ + arrsz++; + ptrs = (struct memsz*)realloc( ptrs, arrsz * sizeof(struct memsz)); + ptrs[nptrs].p = 0; + ptrs[nptrs].sz = 0; + } + + /* find a null slot */ + for(i=0; i < arrsz ; i++) + if (ptrs[i].p == 0) { + ptrs[i].p = p; + ptrs[i].sz = n; + } + + nptrs++; + printf("yyflex_alloc(%8ld) total=%8ld return=%#10lx\n",(long)n,(long)total_mem,(long)p); + dump_mem(stdout); + return p; +} + +void * yyrealloc(void* p, yy_size_t n) +{ + int i; + for (i=0; i < arrsz; i++) + if ( ptrs[i].p == p){ + total_mem -= ptrs[i].sz; + total_mem += n; + ptrs[i].p = (void*)realloc(p,n); + ptrs[i].sz = n; + + printf("yyflex_realloc(%#10lx,%8ld) total=%8ld return=%8lx\n", + (long)p,(long)n,(long)total_mem,(long)ptrs[i].p); + dump_mem(stdout); + return ptrs[i].p; + } + + fprintf(stderr,"ERROR: yyflex_realloc could not locate pointer %#lx.\n",(long)p); + dump_mem(stdout); + exit(1); +} + +void yyfree(void* p) +{ + int i; + for (i=0; i < arrsz; i++) + if ( ptrs[i].p == p){ + total_mem -= ptrs[i].sz; + free(p); + ptrs[i].p = 0; + ptrs[i].sz = 0; + nptrs--; + printf("yyflex_free(%#10lx) total=%8ld\n",(long)p,(long)total_mem); + dump_mem(stdout); + return; + } + + fprintf(stderr,"ERROR: yyflex_free could not locate pointer %#lx.\n",(long)p); + dump_mem(stdout); + exit(1); +} + +int main(void); + +int +main () +{ + arrsz = 1; + ptrs = (struct memsz*)calloc(1,sizeof(struct memsz)); + nptrs = 0; + + yyin = stdin; + yyout = stdout; + yylex(); + yylex_destroy(); + free(ptrs); + + if ( nptrs > 0 || total_mem > 0){ + fprintf(stderr,"Oops. Looks like a memory leak: nptrs=%d, unfreed memory=%ld\n",nptrs,(long)total_mem); + exit(1); + } + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-mem-nr/test.input b/tests/test-mem-nr/test.input new file mode 100644 index 0000000..79aa16a --- /dev/null +++ b/tests/test-mem-nr/test.input @@ -0,0 +1,25 @@ +First we push a lot on the stack by nesting parenthesis: + +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +((((((((((((((((((((((((((((((((((((((((((( + +(should be 200 states pushed here) + +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +))))))))))))))))))))))))))))))))))))))))))) + +Now we match progressively bigger tokens to increase the read buffer: + +len=1 0 +len=2 00 +len=4 0000 +len=8 00000000 +len=16 0000000000000000 +len=32 00000000000000000000000000000000 +len=64 0000000000000000000000000000000000000000000000000000000000000000 +len=128 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=256 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=512 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=1024 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/tests/test-mem-r/Makefile.am b/tests/test-mem-r/Makefile.am new file mode 100644 index 0000000..85db163 --- /dev/null +++ b/tests/test-mem-r/Makefile.am @@ -0,0 +1,44 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h test-mem-r OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a + +testname = test-mem-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-mem-r/Makefile.in b/tests/test-mem-r/Makefile.in new file mode 100644 index 0000000..4508ce7 --- /dev/null +++ b/tests/test-mem-r/Makefile.in @@ -0,0 +1,324 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h test-mem-r OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +testname = test-mem-r +subdir = tests/test-mem-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-mem-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-mem-r/scanner.l b/tests/test-mem-r/scanner.l new file mode 100644 index 0000000..c478edf --- /dev/null +++ b/tests/test-mem-r/scanner.l @@ -0,0 +1,182 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". + * The whole idea is to cause memory realloc by + * 1. pushing a lot on the condition stack, and + * 2. eating input greater than YY_BUF_SIZE + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +/* Insanely small read buffer. This pretty much guarantees at least one realloc. */ +#ifdef YY_BUF_SIZE +#undef YY_BUF_SIZE +#endif +#define YY_BUF_SIZE 8 + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn stack nodefault reentrant +%option noyyalloc noyyrealloc noyyfree + +%x parens + +%% + +<INITIAL>{ +"(" { printf("yy_push_state(parens)\n"); yy_push_state(parens,yyscanner); } +len=[0-9]+ { printf("About read token where %s\n",yytext); } +0+ { } +.|\n { } +} + +<parens>{ +"(" { printf("yy_push_state(parens)\n"); yy_push_state(parens,yyscanner); } +")" { printf("yy_pop_state()\n");yy_pop_state(yyscanner);} +[^()\n]+ { } +.|\n { } +} + +%% +/* total memory allocated */ +static size_t total_mem=0; + +/* track the amount of memory for ptr. */ +struct memsz { + void* p; + size_t sz; +}; + +static struct memsz * ptrs=0; /* Array of pairs. */ +static int nptrs=0; /* Number of pairs in array. */ +static int arrsz=0; /* Capacity of array. */ + +static void dump_mem(FILE* fp){ + int i; + fprintf(fp,"\tptrs[%d] = {", nptrs); + for (i=0; i < arrsz; i++) + fprintf(fp," {%#lx,%ld},", (long)ptrs[i].p, (long)ptrs[i].sz); + + fprintf(fp,"}\n"); +} + +void * yyalloc(yy_size_t n , void* yyscanner) +{ + void * p; + struct memsz * old; + int i; + + total_mem += n; + p = (void*)malloc(n); + + if( nptrs >= arrsz){ + /* increase array size by 1 */ + arrsz++; + ptrs = (struct memsz*)realloc( ptrs, arrsz * sizeof(struct memsz)); + ptrs[nptrs].p = 0; + ptrs[nptrs].sz = 0; + } + + /* find a null slot */ + for(i=0; i < arrsz ; i++) + if (ptrs[i].p == 0) { + ptrs[i].p = p; + ptrs[i].sz = n; + } + + nptrs++; + printf("yyflex_alloc(%8ld) total=%8ld return=%#10lx\n",(long)n,(long)total_mem,(long)p); + dump_mem(stdout); + return p; +} + +void * yyrealloc(void* p, yy_size_t n , void* yyscanner) +{ + int i; + for (i=0; i < arrsz; i++) + if ( ptrs[i].p == p){ + total_mem -= ptrs[i].sz; + total_mem += n; + ptrs[i].p = (void*)realloc(p,n); + ptrs[i].sz = n; + + printf("yyflex_realloc(%#10lx,%8ld) total=%8ld return=%8lx\n", + (long)p,(long)n,(long)total_mem,(long)ptrs[i].p); + dump_mem(stdout); + return ptrs[i].p; + } + + fprintf(stderr,"ERROR: yyflex_realloc could not locate pointer %#lx.\n",(long)p); + dump_mem(stdout); + exit(1); +} + +void yyfree(void* p , void* yyscanner) +{ + int i; + for (i=0; i < arrsz; i++) + if ( ptrs[i].p == p){ + total_mem -= ptrs[i].sz; + free(p); + ptrs[i].p = 0; + ptrs[i].sz = 0; + nptrs--; + printf("yyflex_free(%#10lx) total=%8ld\n",(long)p,(long)total_mem); + dump_mem(stdout); + return; + } + + fprintf(stderr,"ERROR: yyflex_free could not locate pointer %#lx.\n",(long)p); + dump_mem(stdout); + exit(1); +} + +int main(void); + +int +main () +{ + yyscan_t scanner; + arrsz = 1; + ptrs = (struct memsz*)calloc(1,sizeof(struct memsz)); + nptrs = 0; + + yylex_init(&scanner); + yyset_in(stdin,scanner); + yyset_out(stdout,scanner); + yylex(scanner); + yylex_destroy(scanner); + free(ptrs); + + if ( nptrs > 0 || total_mem > 0){ + fprintf(stderr,"Oops. Looks like a memory leak: nptrs=%d, unfreed memory=%ld\n",nptrs,(long)total_mem); + exit(1); + } + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-mem-r/test.input b/tests/test-mem-r/test.input new file mode 100644 index 0000000..79aa16a --- /dev/null +++ b/tests/test-mem-r/test.input @@ -0,0 +1,25 @@ +First we push a lot on the stack by nesting parenthesis: + +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +((((((((((((((((((((((((((((((((((((((((((( + +(should be 200 states pushed here) + +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +))))))))))))))))))))))))))))))))))))))))))) + +Now we match progressively bigger tokens to increase the read buffer: + +len=1 0 +len=2 00 +len=4 0000 +len=8 00000000 +len=16 0000000000000000 +len=32 00000000000000000000000000000000 +len=64 0000000000000000000000000000000000000000000000000000000000000000 +len=128 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=256 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=512 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +len=1024 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/tests/test-multiple-scanners-nr/Makefile.am b/tests/test-multiple-scanners-nr/Makefile.am new file mode 100644 index 0000000..52ef100 --- /dev/null +++ b/tests/test-multiple-scanners-nr/Makefile.am @@ -0,0 +1,54 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner-1.l scanner-2.l main.c +CLEANFILES = scanner-1.c scanner-1.h test-multiple-scanners-nr OUTPUT $(OBJS) scanner-2.c scanner-2.h +OBJS = scanner-1.o scanner-2.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-multiple-scanners-nr + +scanner-1.c: $(srcdir)/scanner-1.l + $(FLEX) $(LFLAGS) --header=scanner-1.h $< + +scanner-2.c: $(srcdir)/scanner-2.l + $(FLEX) $(LFLAGS) --header=scanner-2.h $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +main.o: scanner-1.h scanner-2.h +scanner-1.h: scanner-1.c +scanner-2.h: scanner-2.c diff --git a/tests/test-multiple-scanners-nr/Makefile.in b/tests/test-multiple-scanners-nr/Makefile.in new file mode 100644 index 0000000..32ee0e3 --- /dev/null +++ b/tests/test-multiple-scanners-nr/Makefile.in @@ -0,0 +1,334 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner-1.l scanner-2.l main.c +CLEANFILES = scanner-1.c scanner-1.h test-multiple-scanners-nr OUTPUT $(OBJS) scanner-2.c scanner-2.h +OBJS = scanner-1.o scanner-2.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-multiple-scanners-nr +subdir = tests/test-multiple-scanners-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-multiple-scanners-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner-1.c: $(srcdir)/scanner-1.l + $(FLEX) $(LFLAGS) --header=scanner-1.h $< + +scanner-2.c: $(srcdir)/scanner-2.l + $(FLEX) $(LFLAGS) --header=scanner-2.h $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +main.o: scanner-1.h scanner-2.h +scanner-1.h: scanner-1.c +scanner-2.h: scanner-2.c +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-multiple-scanners-nr/main.c b/tests/test-multiple-scanners-nr/main.c new file mode 100644 index 0000000..a83bec6 --- /dev/null +++ b/tests/test-multiple-scanners-nr/main.c @@ -0,0 +1,51 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "scanner-1.h" +#include "scanner-2.h" + +int +main ( int argc, char** argv ) +{ + int S1_ok=1, S2_ok=1; + YY_BUFFER_STATE buff1, buff2; + S1_out = S2_out = stdout; + buff1 = S1__scan_string("foo on bar off"); + buff2 = S2__scan_string("on blah blah off foo on bar off"); + + /* scan simultaneously. */ + while(S1_ok || S2_ok) + { + if (S1_ok) + S1_ok = S1_lex(); + if (S2_ok) + S2_ok = S2_lex(); + } + S1__delete_buffer(buff1); + S2__delete_buffer(buff2); + printf("TEST RETURNING OK.\n"); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-multiple-scanners-nr/scanner-1.l b/tests/test-multiple-scanners-nr/scanner-1.l new file mode 100644 index 0000000..0d520b1 --- /dev/null +++ b/tests/test-multiple-scanners-nr/scanner-1.l @@ -0,0 +1,50 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner-1.c" and "scanner-1.h". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option header="scanner-1.h" +%option 8bit outfile="scanner-1.c" prefix="S1_" +%option nounput nomain noyywrap +%option warn stack noyy_top_state + +%x ON +%x OFF +%% +<INITIAL>{ +on yy_push_state(ON); return 10; +off yy_push_state(OFF); return 11; +.|\n return 12; +} +<ON>.|\n yy_pop_state(); return 13; + +<OFF>.|\n yy_pop_state(); return 14; + +%% + diff --git a/tests/test-multiple-scanners-nr/scanner-2.l b/tests/test-multiple-scanners-nr/scanner-2.l new file mode 100644 index 0000000..88bd799 --- /dev/null +++ b/tests/test-multiple-scanners-nr/scanner-2.l @@ -0,0 +1,49 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner-2.c" and "scanner-2.h". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option header="scanner-2.h" +%option 8bit outfile="scanner-2.c" prefix="S2_" +%option nounput nomain noyywrap +%option warn stack noyy_top_state + +%x OFF +%x ON +%% +<INITIAL>{ +on yy_push_state(ON); return 3; +off yy_push_state(OFF); return 4; +.|\n return 5; +} +<ON>.|\n yy_pop_state(); return 6; + +<OFF>.|\n yy_pop_state(); return 7; +%% + diff --git a/tests/test-multiple-scanners-r/Makefile.am b/tests/test-multiple-scanners-r/Makefile.am new file mode 100644 index 0000000..6ece425 --- /dev/null +++ b/tests/test-multiple-scanners-r/Makefile.am @@ -0,0 +1,56 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner-1.l scanner-2.l main.c +CLEANFILES = scanner-1.c scanner-1.h test-multiple-scanners-r OUTPUT\ + $(OBJS) scanner-2.c scanner-2.h scanner-1.tables \ + scanner-2.tables +OBJS = scanner-1.o scanner-2.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-multiple-scanners-r + +scanner-1.c: $(srcdir)/scanner-1.l + $(FLEX) $(LFLAGS) --header=scanner-1.h $< + +scanner-2.c: $(srcdir)/scanner-2.l + $(FLEX) $(LFLAGS) --header=scanner-2.h $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +main.o: scanner-1.h scanner-2.h +scanner-1.h: scanner-1.c +scanner-2.h: scanner-2.c diff --git a/tests/test-multiple-scanners-r/Makefile.in b/tests/test-multiple-scanners-r/Makefile.in new file mode 100644 index 0000000..4641938 --- /dev/null +++ b/tests/test-multiple-scanners-r/Makefile.in @@ -0,0 +1,337 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner-1.l scanner-2.l main.c +CLEANFILES = scanner-1.c scanner-1.h test-multiple-scanners-r OUTPUT\ + $(OBJS) scanner-2.c scanner-2.h scanner-1.tables \ + scanner-2.tables + +OBJS = scanner-1.o scanner-2.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-multiple-scanners-r +subdir = tests/test-multiple-scanners-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-multiple-scanners-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner-1.c: $(srcdir)/scanner-1.l + $(FLEX) $(LFLAGS) --header=scanner-1.h $< + +scanner-2.c: $(srcdir)/scanner-2.l + $(FLEX) $(LFLAGS) --header=scanner-2.h $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +main.o: scanner-1.h scanner-2.h +scanner-1.h: scanner-1.c +scanner-2.h: scanner-2.c +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-multiple-scanners-r/main.c b/tests/test-multiple-scanners-r/main.c new file mode 100644 index 0000000..3c07266 --- /dev/null +++ b/tests/test-multiple-scanners-r/main.c @@ -0,0 +1,85 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "scanner-1.h" +#include "scanner-2.h" + +int +main ( int argc, char** argv ) +{ + int S1_ok=1, S2_ok=1; + FILE * fp; + YY_BUFFER_STATE buff1, buff2; + yyscan_t scan1, scan2; + + S1_lex_init(&scan1); + S2_lex_init(&scan2); + + if((fp = fopen("scanner-1.tables","r")) == 0){ + fprintf(stderr,"Could not open scanner-1.tables.\n"); + exit(1); + } + if(S1_tables_fload(fp,scan1) != 0){ + fprintf(stderr,"Could not load scanner-1.tables.\n"); + exit(1); + } + fclose(fp); + + if((fp = fopen("scanner-2.tables","r")) == 0){ + fprintf(stderr,"Could not open scanner-2.tables.\n"); + exit(1); + } + if(S2_tables_fload(fp,scan2) != 0){ + fprintf(stderr,"Could not load scanner-2.tables.\n"); + exit(1); + } + fclose(fp); + + S1_set_out(stdout,scan1); + S2_set_out(S1_get_out(scan1),scan2); + + buff1 = S1__scan_string("foo on bar off", scan1); + buff2 = S2__scan_string("on blah blah off foo on bar off", scan2); + + /* scan simultaneously. */ + while(S1_ok || S2_ok) + { + if (S1_ok) + S1_ok = S1_lex(scan1); + if (S2_ok) + S2_ok = S2_lex(scan2); + } + S1__delete_buffer(buff1, scan1); + S2__delete_buffer(buff2, scan2); + + S1_tables_destroy(scan1); + S2_tables_destroy(scan2); + + S1_lex_destroy(scan1); + S2_lex_destroy(scan2); + printf("TEST RETURNING OK.\n"); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-multiple-scanners-r/scanner-1.l b/tests/test-multiple-scanners-r/scanner-1.l new file mode 100644 index 0000000..84f8719 --- /dev/null +++ b/tests/test-multiple-scanners-r/scanner-1.l @@ -0,0 +1,51 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner-1.c" and "scanner-1.h". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option header="scanner-1.h" +%option 8bit outfile="scanner-1.c" prefix="S1_" +%option nounput nomain noyywrap noyy_top_state +%option warn stack reentrant +%option tables-file="scanner-1.tables" + +%x ON +%x OFF +%% +<INITIAL>{ +on yy_push_state(ON, yyscanner); return 10; +off yy_push_state(OFF, yyscanner); return 11; +.|\n return 12; +} +<ON>.|\n yy_pop_state(yyscanner); return 13; + +<OFF>.|\n yy_pop_state(yyscanner); return 14; + +%% + diff --git a/tests/test-multiple-scanners-r/scanner-2.l b/tests/test-multiple-scanners-r/scanner-2.l new file mode 100644 index 0000000..f0d5c2d --- /dev/null +++ b/tests/test-multiple-scanners-r/scanner-2.l @@ -0,0 +1,50 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner-2.c" and "scanner-2.h". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option header="scanner-2.h" +%option 8bit outfile="scanner-2.c" prefix="S2_" +%option nounput nomain noyywrap +%option warn stack reentrant noyy_top_state +%option tables-file="scanner-2.tables" + +%x OFF +%x ON +%% +<INITIAL>{ +on yy_push_state(ON, yyscanner); return 3; +off yy_push_state(OFF, yyscanner); return 4; +.|\n return 5; +} +<ON>.|\n yy_pop_state(yyscanner); return 6; + +<OFF>.|\n yy_pop_state(yyscanner); return 7; +%% + diff --git a/tests/test-noansi-nr/Makefile.am b/tests/test-noansi-nr/Makefile.am new file mode 100644 index 0000000..e357503 --- /dev/null +++ b/tests/test-noansi-nr/Makefile.am @@ -0,0 +1,48 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-noansi-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-noansi-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-noansi-nr/Makefile.in b/tests/test-noansi-nr/Makefile.in new file mode 100644 index 0000000..3635a7f --- /dev/null +++ b/tests/test-noansi-nr/Makefile.in @@ -0,0 +1,328 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-noansi-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-noansi-nr +subdir = tests/test-noansi-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-noansi-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-noansi-nr/scanner.l b/tests/test-noansi-nr/scanner.l new file mode 100644 index 0000000..4afc8c2 --- /dev/null +++ b/tests/test-noansi-nr/scanner.l @@ -0,0 +1,67 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* TEST scanner. + Basic non-reentrant scanner, but with non-ansi function defs. + Compile with: flex scanner.l + + Sample Input: + # this is a comment + foo = true + bar = "string value" + integer = 43 +*/ +%{ +#include "config.h" +%} + +%option prefix="test" outfile="scanner.c" +%option nounput noyywrap noyylineno warn nodefault +%option noansi-prototypes noansi-definitions + +IDENT [[:alnum:]_-] +WS [[:blank:]] +%% + +^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} +^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} +^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} +^{WS}*#.*\r?\n { } +^{WS}*\r?\n { } +.|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} + +%% + +int main(void); + +int main () +{ + yyin = stdin; + yyout = stdout; + while( yylex() ) + { + } + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/test-noansi-nr/test.input b/tests/test-noansi-nr/test.input new file mode 100644 index 0000000..642e0fb --- /dev/null +++ b/tests/test-noansi-nr/test.input @@ -0,0 +1,5 @@ +# this is a comment +foo = "bar" +num = 43 +setting = false + diff --git a/tests/test-noansi-r/Makefile.am b/tests/test-noansi-r/Makefile.am new file mode 100644 index 0000000..c0a33df --- /dev/null +++ b/tests/test-noansi-r/Makefile.am @@ -0,0 +1,48 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-noansi-r OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c + +testname = test-noansi-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-noansi-r/Makefile.in b/tests/test-noansi-r/Makefile.in new file mode 100644 index 0000000..ae3f896 --- /dev/null +++ b/tests/test-noansi-r/Makefile.in @@ -0,0 +1,328 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c parser.c parser.h test-noansi-r OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#YFLAGS = --defines --output=parser.c +testname = test-noansi-r +subdir = tests/test-noansi-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-noansi-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-noansi-r/scanner.l b/tests/test-noansi-r/scanner.l new file mode 100644 index 0000000..e0b3ffb --- /dev/null +++ b/tests/test-noansi-r/scanner.l @@ -0,0 +1,69 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/* A reentrant scanner. + This file will not compile under flex version <= 2.5.4. + Sample Input: + # this is a comment + foo = true + bar = "string value" + integer = 43 +*/ +%{ +#include "config.h" +%} + +%option prefix="test" outfile="scanner.c" +%option nounput noyywrap noyylineno warn nodefault +%option reentrant +%option noansi-definitions noansi-prototypes + +IDENT [[:alnum:]_-] +WS [[:blank:]] +%% + +^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} +^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} +^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} +^{WS}*#.*\r?\n { } +^{WS}*\r?\n { } +.|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} + +%% + +int main(void); + +int main () +{ + yyscan_t lexer; + yylex_init( &lexer ); + yyset_out ( stdout,lexer); + yyset_in ( stdin, lexer); + while( yylex(lexer) ) + { + } + yylex_destroy( lexer ); + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/test-noansi-r/test.input b/tests/test-noansi-r/test.input new file mode 100644 index 0000000..2160628 --- /dev/null +++ b/tests/test-noansi-r/test.input @@ -0,0 +1,4 @@ +# this is a comment +foo = "bar" +num = 43 +setting = false diff --git a/tests/test-posix/Makefile.am b/tests/test-posix/Makefile.am new file mode 100644 index 0000000..ffdc15e --- /dev/null +++ b/tests/test-posix/Makefile.am @@ -0,0 +1,45 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l +CLEANFILES = scanner.c scanner.h test-posix OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" + +testname = test-posix + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-posix/Makefile.in b/tests/test-posix/Makefile.in new file mode 100644 index 0000000..b002c5f --- /dev/null +++ b/tests/test-posix/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l +CLEANFILES = scanner.c scanner.h test-posix OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +testname = test-posix +subdir = tests/test-posix +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-posix/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-posix/scanner.l b/tests/test-posix/scanner.l new file mode 100644 index 0000000..c6c0b51 --- /dev/null +++ b/tests/test-posix/scanner.l @@ -0,0 +1,79 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The goal of this test is to verify that we are getting the counter-intuitive + * posix behavior of the repeat operator `{}'. + * + * ab{3} - In traditional flex, this matches "abbb". + * In posix, this matches "ababab". + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define NUM_TESTS 1 +char * tests[NUM_TESTS] = { "ababab"}; +int main(void); + +int tests_ok[NUM_TESTS] = { 0 }; + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn posix-compat + + +%% + +ab{3} tests_ok[0] = 1; return 0; +.|\n return 0; + +%% + + +int main () +{ + YY_BUFFER_STATE state; + int i; + + yyin = stdin; + yyout = stdout; + + /* Run the tests */ + for (i=0; i < NUM_TESTS; i++){ + printf("Testing: yy_scan_string(%s): ", tests[i]); + state = yy_scan_string(tests[i]); + yylex(); + yy_delete_buffer(state); + printf("... %s\n", tests_ok[i] ? "OK" : "FAILED"); + } + + for (i=0; i < NUM_TESTS; i++) + if (!tests_ok[i]) + exit(1); + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-posixly-correct/Makefile.am b/tests/test-posixly-correct/Makefile.am new file mode 100644 index 0000000..5ccbea0 --- /dev/null +++ b/tests/test-posixly-correct/Makefile.am @@ -0,0 +1,45 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l +CLEANFILES = scanner.c scanner.h test-posixly-correct OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" + +testname = test-posixly-correct + +scanner.c: $(srcdir)/scanner.l + POSIXLY_CORRECT=1 $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-posixly-correct/Makefile.in b/tests/test-posixly-correct/Makefile.in new file mode 100644 index 0000000..d545273 --- /dev/null +++ b/tests/test-posixly-correct/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l +CLEANFILES = scanner.c scanner.h test-posixly-correct OUTPUT $(OBJS) +OBJS = scanner.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +testname = test-posixly-correct +subdir = tests/test-posixly-correct +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-posixly-correct/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + POSIXLY_CORRECT=1 $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-posixly-correct/scanner.l b/tests/test-posixly-correct/scanner.l new file mode 100644 index 0000000..20912df --- /dev/null +++ b/tests/test-posixly-correct/scanner.l @@ -0,0 +1,79 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* The goal of this test is to verify that we are getting the counter-intuitive + * posix behavior of the repeat operator `{}'. + * + * ab{3} - In traditional flex, this matches "abbb". + * In posix, this matches "ababab". + */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define NUM_TESTS 1 +char * tests[NUM_TESTS] = { "ababab"}; +int main(void); + +int tests_ok[NUM_TESTS] = { 0 }; + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn + + +%% + +ab{3} tests_ok[0] = 1; return 0; +.|\n return 0; + +%% + + +int main () +{ + YY_BUFFER_STATE state; + int i; + + yyin = stdin; + yyout = stdout; + + /* Run the tests */ + for (i=0; i < NUM_TESTS; i++){ + printf("Testing: yy_scan_string(%s): ", tests[i]); + state = yy_scan_string(tests[i]); + yylex(); + yy_delete_buffer(state); + printf("... %s\n", tests_ok[i] ? "OK" : "FAILED"); + } + + for (i=0; i < NUM_TESTS; i++) + if (!tests_ok[i]) + exit(1); + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-prefix-nr/Makefile.am b/tests/test-prefix-nr/Makefile.am new file mode 100644 index 0000000..2fcdcaf --- /dev/null +++ b/tests/test-prefix-nr/Makefile.am @@ -0,0 +1,49 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-prefix-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-prefix-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-prefix-nr/Makefile.in b/tests/test-prefix-nr/Makefile.in new file mode 100644 index 0000000..5fb50dd --- /dev/null +++ b/tests/test-prefix-nr/Makefile.in @@ -0,0 +1,329 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-prefix-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-prefix-nr +subdir = tests/test-prefix-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = README Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-prefix-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-prefix-nr/README b/tests/test-prefix-nr/README new file mode 100644 index 0000000..91f75c9 --- /dev/null +++ b/tests/test-prefix-nr/README @@ -0,0 +1,2 @@ +This check is to make sure the prefix "yy" is substituted where it should be. + diff --git a/tests/test-prefix-nr/scanner.l b/tests/test-prefix-nr/scanner.l new file mode 100644 index 0000000..4497aa1 --- /dev/null +++ b/tests/test-prefix-nr/scanner.l @@ -0,0 +1,75 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Builds "scanner.c". */ +/* The scanner itself is a no-op. A successful compilation is all we want. */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit outfile="scanner.c" prefix="FOO" +%option nounput nomain noyywrap +%option warn + + +%% + +.|\n|\r { + + /* Compile, but do not execute the following code. */ + if( 0) { + FOO_create_buffer((FILE*)0,0); + FOO_delete_buffer((YY_BUFFER_STATE)0); + FOO_flush_buffer((YY_BUFFER_STATE)0); + FOO_init_buffer((YY_BUFFER_STATE)0,(FILE*)0); + FOO_load_buffer_state(); + FOO_scan_buffer((char*)0,(yy_size_t)0); + FOO_scan_bytes((yyconst char*)0, 0); + FOO_scan_string((yyconst char*)0); + FOO_switch_to_buffer((YY_BUFFER_STATE)0); + yyin = (FILE*)0; + yyout = (FILE*)0; + yyleng = 0; + yylex(); + yyrestart((FILE*)0); + yytext = (char*)0; + } + } +%% + + +int main(void); + +int +main () +{ + yyin = stdin; + yyout = stdout; + FOOlex(); + printf("TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/test-prefix-nr/test.input b/tests/test-prefix-nr/test.input new file mode 100644 index 0000000..0e6c88f --- /dev/null +++ b/tests/test-prefix-nr/test.input @@ -0,0 +1 @@ +Dummy input. diff --git a/tests/test-prefix-r/Makefile.am b/tests/test-prefix-r/Makefile.am new file mode 100644 index 0000000..531c919 --- /dev/null +++ b/tests/test-prefix-r/Makefile.am @@ -0,0 +1,49 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-prefix-r OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-prefix-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-prefix-r/Makefile.in b/tests/test-prefix-r/Makefile.in new file mode 100644 index 0000000..d110331 --- /dev/null +++ b/tests/test-prefix-r/Makefile.in @@ -0,0 +1,329 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-prefix-r OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-prefix-r +subdir = tests/test-prefix-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = README Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-prefix-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-prefix-r/README b/tests/test-prefix-r/README new file mode 100644 index 0000000..91f75c9 --- /dev/null +++ b/tests/test-prefix-r/README @@ -0,0 +1,2 @@ +This check is to make sure the prefix "yy" is substituted where it should be. + diff --git a/tests/test-prefix-r/scanner.l b/tests/test-prefix-r/scanner.l new file mode 100644 index 0000000..4c25982 --- /dev/null +++ b/tests/test-prefix-r/scanner.l @@ -0,0 +1,83 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Builds "scanner.c". */ +/* The scanner itself is a no-op. A successful compilation is all we want. */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} +%option reentrant +%option 8bit outfile="scanner.c" prefix="FOO" +%option nounput nomain noyywrap +%option warn + + +%% + + +.|\n|\r { + + /* Compile, but do not execute the following code. */ + if( 0 ) { + FOO_create_buffer( (FILE*)0, 0, yyscanner); + FOO_delete_buffer( (YY_BUFFER_STATE)0, yyscanner); + FOO_flush_buffer( (YY_BUFFER_STATE)0, yyscanner); + FOO_init_buffer( (YY_BUFFER_STATE)0, (FILE*)0, yyscanner); + FOO_load_buffer_state( yyscanner); + FOO_scan_buffer( (char*)0, (yy_size_t)0, yyscanner); + FOO_scan_bytes( (yyconst char*)0, 0, yyscanner); + FOO_scan_string( (yyconst char*)0, yyscanner); + FOO_switch_to_buffer( (YY_BUFFER_STATE)0, yyscanner); + FOOrestart( (FILE*)0, (yyscan_t )0); + + FOOget_extra( (yyscan_t )0 ); + FOOget_in( (yyscan_t )0 ); + FOOget_leng( (yyscan_t )0 ); + FOOget_out( (yyscan_t )0 ); + FOOget_text( (yyscan_t )0 ); + FOOlex( (yyscan_t )0 ); + FOOlex_destroy( (yyscan_t )0 ); + FOOlex_init( (yyscan_t *)0 ); + FOOset_extra( (void *)0, (yyscan_t )0 ); + FOOset_in( (FILE*)0, (yyscan_t )0 ); + FOOset_out( (FILE*)0, (yyscan_t )0 ); + } + } +%% + +int main(void); + +int +main () +{ + yyscan_t scanner; + FOOlex_init( &scanner); + FOOlex( scanner); + FOOlex_destroy( scanner); + printf( "TEST RETURNING OK.\n"); + return 0; +} + diff --git a/tests/test-prefix-r/test.input b/tests/test-prefix-r/test.input new file mode 100644 index 0000000..0e6c88f --- /dev/null +++ b/tests/test-prefix-r/test.input @@ -0,0 +1 @@ +Dummy input. diff --git a/tests/test-pthread/Makefile.am b/tests/test-pthread/Makefile.am new file mode 100644 index 0000000..e011ebd --- /dev/null +++ b/tests/test-pthread/Makefile.am @@ -0,0 +1,46 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test-1.input test-2.input test-3.input test-4.input test-5.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-pthread OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +LDFLAGS = -lpthread +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-pthread + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname) $(srcdir)/test-*.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-pthread/Makefile.in b/tests/test-pthread/Makefile.in new file mode 100644 index 0000000..90ab314 --- /dev/null +++ b/tests/test-pthread/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = -lpthread +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test-1.input test-2.input test-3.input test-4.input test-5.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-pthread OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-pthread +subdir = tests/test-pthread +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-pthread/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname) $(srcdir)/test-*.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-pthread/scanner.l b/tests/test-pthread/scanner.l new file mode 100644 index 0000000..9207a9d --- /dev/null +++ b/tests/test-pthread/scanner.l @@ -0,0 +1,204 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A scanner file to build "scanner.c". + Input language is any text made of spaces, newlines, and alphanumerics. + + We create N_THREADS number of threads. Each thread has it's own scanner. + Each thread selects one of the files specified in ARGV, scans it, then + closes it. This is repeated N_SCANS numebr of times for each thread. + + The idea is to press the scanner to break under threads. + If we see "Scanner Jammed", then we know + +*/ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#ifdef HAVE_LIBPTHREAD +#include <pthread.h> +#endif + +/* A naive test for segfaults when accessing yytext. */ +static int process_text(char* s, yyscan_t scanner); + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain nodefault +%option yywrap +%option reentrant +%option warn + + /* Arbitrary states.*/ +%x STATE_1 +%x STATE_2 + +%% + + #define NUMBER 200 + #define WORD 201 + +<INITIAL>[[:digit:]]+ { BEGIN(STATE_1); process_text(yytext,yyscanner); return NUMBER; } +<INITIAL>[[:alpha:]]+ { BEGIN(STATE_2); process_text(yytext,yyscanner); return WORD; } + +<STATE_1>[[:alpha:]]+ { BEGIN(0); process_text(yytext,yyscanner); return WORD; } +<STATE_1>[[:digit:]]+ { BEGIN(0); process_text(yytext,yyscanner); return NUMBER; } + +<STATE_2>[[:alpha:]]+ { BEGIN(0); process_text(yytext,yyscanner); return WORD; } +<STATE_2>[[:digit:]]+ { BEGIN(0); process_text(yytext,yyscanner); return NUMBER; } + +<INITIAL,STATE_1,STATE_2>" "|\t|\r|\n { process_text(yytext,yyscanner); } +<INITIAL,STATE_1,STATE_2>[^[:alnum:][:space:]\t\r\n] { + /*fprintf(stderr,"*** Error: bad input char '%c'.\n", yytext[0]); */ + yyterminate(); + } +<INITIAL,STATE_1,STATE_2>[[:space:]\r\n]+ { } +%% + +int yywrap( yyscan_t scanner) { return 1; } +static int process_text(char* s, yyscan_t scanner) +{ + return (int)(*s) + (int) *(s + yyget_leng(scanner)-1); +} + +int main(void); + +#ifndef HAVE_LIBPTHREAD + int main () { + printf( + "TEST ABORTED because pthread library not available \n" + "-- This is expected on some systems. It is not a flex error.\n" ); + return 0; + } +#else + +#define N_THREADS 4 +#define N_SCANS 20 +#define INPUT_FILE "test.input" + +/* Each thread selects the next file to scan in round-robin fashion. + If there are less files than threads, some threads may block. */ + +static pthread_mutex_t next_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t go_ahead = PTHREAD_MUTEX_INITIALIZER; +static int n_files, next_file; + +static pthread_mutex_t *file_locks; +static char **filenames; + + +void * thread_func ( void* arg ) +{ + int i; + + /* Wait for go-ahead. */ + pthread_mutex_lock( &go_ahead); + pthread_mutex_unlock(&go_ahead); + + for( i =0 ; i < N_SCANS ; i++ ) + { + int main(void); + + int next; + yyscan_t scanner; + FILE * fp; + + pthread_mutex_lock ( &next_lock ); + next = (next_file++) % n_files; + pthread_mutex_unlock ( &next_lock ); + + pthread_mutex_lock ( &file_locks[ next ] ); + + yylex_init( &scanner ); + /*printf("Scanning file %s #%d\n",filenames[next],i); fflush(stdout); */ + if((fp = fopen(filenames[next],"r"))==NULL) { + perror("fopen"); + return NULL; + } + yyset_in(fp,scanner); + + while( yylex( scanner) != 0) + { + } + fclose(fp); + yylex_destroy(scanner); + pthread_mutex_unlock ( &file_locks[ next ] ); + } + return NULL; +} + +int main () +{ + int i; + pthread_t threads[N_THREADS]; + + if( argc < 2 ) { + fprintf(stderr,"*** Error: No filenames specified.\n"); + exit(-1); + } + + /* Allocate and initialize the locks. One for each filename in ARGV. */ + file_locks = (pthread_mutex_t*)malloc( (argc-1) * sizeof(pthread_mutex_t)); + for( i = 0; i < argc-1; i++) + pthread_mutex_init( &file_locks[i], NULL ); + + n_files = argc -1; + filenames = argv + 1; + next_file = 0; + + /* prevent threads from starting until all threads have been created. */ + pthread_mutex_lock(&go_ahead); + + /* Create N threads then wait for them. */ + for(i =0; i < N_THREADS ; i++ ) { + if( pthread_create( &threads[i], NULL, thread_func, NULL) != 0) + { + fprintf(stderr, "*** Error: pthread_create failed.\n"); + exit(-1); + } + printf("Created thread %d.\n",i); fflush(stdout); + } + + /* Tell threads to begin. */ + pthread_mutex_unlock(&go_ahead); + + for(i =0; i < N_THREADS ; i++ ) { + pthread_join ( threads[i], NULL ); + printf("Thread %d done.\n", i ); fflush(stdout); + } + + for( i = 0; i < argc-1; i++) + pthread_mutex_destroy( &file_locks[i] ); + + pthread_mutex_destroy( &next_lock ); + pthread_mutex_destroy( &go_ahead ); + free( file_locks ); + printf("TEST RETURNING OK.\n"); + return 0; +} + +#endif /* HAVE_LIBPTHREAD */ + diff --git a/tests/test-pthread/test-1.input b/tests/test-pthread/test-1.input new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/test-pthread/test-1.input @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/test-pthread/test-2.input b/tests/test-pthread/test-2.input new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/test-pthread/test-2.input @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/test-pthread/test-3.input b/tests/test-pthread/test-3.input new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/test-pthread/test-3.input @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/test-pthread/test-4.input b/tests/test-pthread/test-4.input new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/test-pthread/test-4.input @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/test-pthread/test-5.input b/tests/test-pthread/test-5.input new file mode 100644 index 0000000..234774b --- /dev/null +++ b/tests/test-pthread/test-5.input @@ -0,0 +1,847 @@ +Many lines of numbers and words +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar +0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar +foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar diff --git a/tests/test-reject/Makefile.am b/tests/test-reject/Makefile.am new file mode 100644 index 0000000..2a9c3e2 --- /dev/null +++ b/tests/test-reject/Makefile.am @@ -0,0 +1,69 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-reject-* OUTPUT $(OBJS) +OBJS = test-reject-nr.o test-reject-r.o test-reject-ver.o \ + test-reject-ser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +tests = test-reject-nr$(EXEEXT) test-reject-r$(EXEEXT) \ + test-reject-ser$(EXEEXT) test-reject-ver$(EXEEXT) +testname = test-reject + +test-reject-nr.c: $(srcdir)/scanner.l + $(FLEX) -o $@ $(LFLAGS) $< + +test-reject-ver.c: $(srcdir)/scanner.l + $(FLEX) -o $@ --tables-verify --tables-file=`basename $@ .c`.tables $(LFLAGS) $< + +test-reject-ser.c: $(srcdir)/scanner.l + $(FLEX) -o $@ --tables-file=`basename $@ .c`.tables $(LFLAGS) $< + +test-reject-r.c: $(srcdir)/scanner.l + $(FLEX) --reentrant -o $@ $(LFLAGS) $< + +test-reject-nr$(EXEEXT): test-reject-nr.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-reject-ver$(EXEEXT): test-reject-ver.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-reject-ser$(EXEEXT): test-reject-ser.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-reject-r$(EXEEXT): test-reject-r.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +$(testname)$(EXEEXT): $(OBJS) + +test: $(tests) + ./$(testname)-nr$(EXEEXT) < $(srcdir)/test.input + ./$(testname)-r$(EXEEXT) < $(srcdir)/test.input + ./$(testname)-ver$(EXEEXT) $(testname)-ver.tables < $(srcdir)/test.input + ./$(testname)-ser$(EXEEXT) $(testname)-ser.tables < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-reject/Makefile.in b/tests/test-reject/Makefile.in new file mode 100644 index 0000000..9bd8f66 --- /dev/null +++ b/tests/test-reject/Makefile.in @@ -0,0 +1,351 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c test-reject-* OUTPUT $(OBJS) +OBJS = test-reject-nr.o test-reject-r.o test-reject-ver.o \ + test-reject-ser.o + + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +tests = test-reject-nr$(EXEEXT) test-reject-r$(EXEEXT) \ + test-reject-ser$(EXEEXT) test-reject-ver$(EXEEXT) + +testname = test-reject +subdir = tests/test-reject +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-reject/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +test-reject-nr.c: $(srcdir)/scanner.l + $(FLEX) -o $@ $(LFLAGS) $< + +test-reject-ver.c: $(srcdir)/scanner.l + $(FLEX) -o $@ --tables-verify --tables-file=`basename $@ .c`.tables $(LFLAGS) $< + +test-reject-ser.c: $(srcdir)/scanner.l + $(FLEX) -o $@ --tables-file=`basename $@ .c`.tables $(LFLAGS) $< + +test-reject-r.c: $(srcdir)/scanner.l + $(FLEX) --reentrant -o $@ $(LFLAGS) $< + +test-reject-nr$(EXEEXT): test-reject-nr.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-reject-ver$(EXEEXT): test-reject-ver.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-reject-ser$(EXEEXT): test-reject-ser.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-reject-r$(EXEEXT): test-reject-r.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +$(testname)$(EXEEXT): $(OBJS) + +test: $(tests) + ./$(testname)-nr$(EXEEXT) < $(srcdir)/test.input + ./$(testname)-r$(EXEEXT) < $(srcdir)/test.input + ./$(testname)-ver$(EXEEXT) $(testname)-ver.tables < $(srcdir)/test.input + ./$(testname)-ser$(EXEEXT) $(testname)-ser.tables < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-reject/scanner.l b/tests/test-reject/scanner.l new file mode 100644 index 0000000..a90a1fa --- /dev/null +++ b/tests/test-reject/scanner.l @@ -0,0 +1,83 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +%} + +%option 8bit prefix="test" +%option nounput nomain noyywrap +%option warn reject + + +%% + +. { REJECT; } +.|\n ; + +%% + +int main ( int argc, char** argv ) +{ + FILE* fp = NULL; + void *yyscanner=0; + M4_YY_DECL_GUTS_VAR(); + +m4_ifdef( [[M4_YY_REENTRANT]], +[[ + yylex_init(&yyscanner); +]]) + +m4_ifdef( [[M4_YY_TABLES_EXTERNAL]], +[[ + if((fp = fopen(argv[1],"r"))== NULL) + yy_fatal_error("could not open tables file for reading" M4_YY_CALL_LAST_ARG); + + if(yytables_fload(fp M4_YY_CALL_LAST_ARG) < 0) + yy_fatal_error("yytables_fload returned < 0" M4_YY_CALL_LAST_ARG); + if(M4_YY_TABLES_VERIFY) + exit(0); +]]) + + if(argc > 2){ + if((fp = fopen(argv[2],"r"))== NULL) + yy_fatal_error("could not open input file for reading" M4_YY_CALL_LAST_ARG); + yyin = fp; + } + while(yylex(M4_YY_CALL_ONLY_ARG) != 0) + ; + +m4_ifdef( [[M4_YY_TABLES_EXTERNAL]], +[[ + yytables_destroy(M4_YY_CALL_ONLY_ARG); +]]) + yylex_destroy(M4_YY_CALL_ONLY_ARG); + + if(argc < 0) /* silence the compiler */ + yyscanner = (void*)fp; + + return 0; +} diff --git a/tests/test-reject/test.input b/tests/test-reject/test.input new file mode 100644 index 0000000..7288a40 --- /dev/null +++ b/tests/test-reject/test.input @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar +0000 foo 1111 foo 0000 bar diff --git a/tests/test-string-nr/Makefile.am b/tests/test-string-nr/Makefile.am new file mode 100644 index 0000000..3fd33bf --- /dev/null +++ b/tests/test-string-nr/Makefile.am @@ -0,0 +1,46 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l +CLEANFILES = scanner.c scanner.h parser.c parser.h test-string-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-string-nr + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-string-nr/Makefile.in b/tests/test-string-nr/Makefile.in new file mode 100644 index 0000000..afc0fbb --- /dev/null +++ b/tests/test-string-nr/Makefile.in @@ -0,0 +1,326 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l +CLEANFILES = scanner.c scanner.h parser.c parser.h test-string-nr OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-string-nr +subdir = tests/test-string-nr +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-string-nr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-string-nr/scanner.l b/tests/test-string-nr/scanner.l new file mode 100644 index 0000000..6ab5b54 --- /dev/null +++ b/tests/test-string-nr/scanner.l @@ -0,0 +1,96 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define NUMBER 200 +#define WORD 201 + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain nodefault noyywrap +%option warn + + +%% + +[[:space:]]+ { } +[[:digit:]]+ { printf("NUMBER "); fflush(stdout);} +[[:alpha:]]+ { printf("WORD "); fflush(stdout);} +. { + fprintf(stderr,"*** Error: Unrecognized character '%c' while scanning.\n", + yytext[0]); + yyterminate(); + } + +<<EOF>> { printf("<<EOF>>\n"); yyterminate();} + +%% + + +#define INPUT_STRING_1 "1234 foo bar" +#define INPUT_STRING_2 "1234 foo bar *@&@&###@^$#&#*" + +int main(void); + +int +main () +{ + char * buf; + int len; + YY_BUFFER_STATE state; + + + /* Scan a good string. */ + printf("Testing: yy_scan_string(%s): ",INPUT_STRING_1); fflush(stdout); + state = yy_scan_string ( INPUT_STRING_1 ); + yylex(); + yy_delete_buffer(state); + + /* Scan only the first 12 chars of a string. */ + printf("Testing: yy_scan_bytes(%s): ",INPUT_STRING_2); fflush(stdout); + state = yy_scan_bytes ( INPUT_STRING_2, 12 ); + yylex(); + yy_delete_buffer(state); + + /* Scan directly from a buffer. + We make a copy, since the buffer will be modified by flex.*/ + printf("Testing: yy_scan_buffer(%s): ",INPUT_STRING_1); fflush(stdout); + len = strlen(INPUT_STRING_1) + 2; + buf = (char*)malloc( len ); + strcpy( buf, INPUT_STRING_1); + buf[ len -2 ] = 0; /* Flex requires two NUL bytes at end of buffer. */ + buf[ len -1 ] =0; + + state = yy_scan_buffer( buf, len ); + yylex(); + yy_delete_buffer(state); + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-string-r/Makefile.am b/tests/test-string-r/Makefile.am new file mode 100644 index 0000000..e2c1e0f --- /dev/null +++ b/tests/test-string-r/Makefile.am @@ -0,0 +1,46 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l +CLEANFILES = scanner.c scanner.h parser.c parser.h test-string-r OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-string-r + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-string-r/Makefile.in b/tests/test-string-r/Makefile.in new file mode 100644 index 0000000..3bc7cae --- /dev/null +++ b/tests/test-string-r/Makefile.in @@ -0,0 +1,326 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l +CLEANFILES = scanner.c scanner.h parser.c parser.h test-string-r OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-string-r +subdir = tests/test-string-r +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-string-r/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-string-r/scanner.l b/tests/test-string-r/scanner.l new file mode 100644 index 0000000..6b594d7 --- /dev/null +++ b/tests/test-string-r/scanner.l @@ -0,0 +1,103 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#define NUMBER 200 +#define WORD 201 + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain nodefault noyywrap +%option warn reentrant + + +%% + +[[:space:]]+ { } +[[:digit:]]+ { printf("NUMBER "); fflush(stdout);} +[[:alpha:]]+ { printf("WORD "); fflush(stdout);} +. { + fprintf(stderr,"*** Error: Unrecognized character '%c' while scanning.\n", + yytext[0]); + yyterminate(); + } + +<<EOF>> { printf("<<EOF>>\n"); yyterminate();} + +%% + + +#define INPUT_STRING_1 "1234 foo bar" +#define INPUT_STRING_2 "1234 foo bar *@&@&###@^$#&#*" + +int main(void); + +int +main () +{ + char * buf; + int len; + YY_BUFFER_STATE state; + yyscan_t scanner=NULL; + + + /* Scan a good string. */ + printf("Testing: yy_scan_string(%s): ",INPUT_STRING_1); fflush(stdout); + yylex_init(&scanner); + state = yy_scan_string ( INPUT_STRING_1 ,scanner); + yylex(scanner); + yy_delete_buffer(state, scanner); + yylex_destroy(scanner); + + /* Scan only the first 12 chars of a string. */ + printf("Testing: yy_scan_bytes(%s): ",INPUT_STRING_2); fflush(stdout); + yylex_init(&scanner); + state = yy_scan_bytes ( INPUT_STRING_2, 12 ,scanner); + yylex(scanner); + yy_delete_buffer(state,scanner); + yylex_destroy(scanner); + + /* Scan directly from a buffer. + We make a copy, since the buffer will be modified by flex.*/ + printf("Testing: yy_scan_buffer(%s): ",INPUT_STRING_1); fflush(stdout); + len = strlen(INPUT_STRING_1) + 2; + buf = (char*)malloc( len ); + strcpy( buf, INPUT_STRING_1); + buf[ len -2 ] = 0; /* Flex requires two NUL bytes at end of buffer. */ + buf[ len -1 ] =0; + + yylex_init(&scanner); + state = yy_scan_buffer( buf, len ,scanner); + yylex(scanner); + yy_delete_buffer(state,scanner); + yylex_destroy(scanner); + + printf("TEST RETURNING OK.\n"); + return 0; +} diff --git a/tests/test-table-opts/Makefile.am b/tests/test-table-opts/Makefile.am new file mode 100644 index 0000000..4380e3d --- /dev/null +++ b/tests/test-table-opts/Makefile.am @@ -0,0 +1,129 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +# ------------------------------------------------ +# This test is really a set of tests, one for +# each compression flag. -Ca, -Cem, etc.. +# 'test-opt' builds non-serialized scanners with various table options. +# 'test-ver' verifies that the serialized tables match the in-code tables. +# 'test-ser' deserializes the tables at runtime. +# 'test-mul' checks that we can store multiple tables in a single file. +# ------------------------------------------------ + + +FLEX = $(top_builddir)/flex + +testname := test-table-opts +allopts := -Ca -Ce -Cf -CF -Cm -Cem -Cae -Caef -CaeF -Cam -Caem + +# the test names themselves +opttests := $(foreach opt,$(allopts), test-opt-nr$(opt) test-opt-r$(opt)) +sertests := $(foreach opt,$(allopts), test-ser-nr$(opt) test-ser-r$(opt)) +vertests := $(foreach opt,$(allopts), test-ver-nr$(opt) test-ver-r$(opt)) +alltests := $(opttests) $(vertests) $(sertests) test-mul + +# the executables to build +optexe := $(addsuffix $(EXEEXT),$(opttests)) +verexe := $(addsuffix $(EXEEXT),$(vertests)) +serexe := $(addsuffix $(EXEEXT),$(sertests)) +allexe := $(optexe) $(verexe) $(serexe) + +# the .c files +optsrc := $(addsuffix .c,$(opttests)) +versrc := $(addsuffix .c,$(vertests)) +sersrc := $(addsuffix .c,$(sertests)) +allsrc := $(optsrc) $(versrc) $(sersrc) + +# the .o files +optobj := $(addsuffix .o,$(opttests)) +verobj := $(addsuffix .o,$(vertests)) +serobj := $(addsuffix .o,$(sertests)) +allobj := $(optobj) $(verobj) $(serobj) + +# the .tables files +sertables := $(addsuffix .tables,$(sertests)) +alltables := $(addsuffix .tables,$(alltests)) + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c OUTPUT test-*.o test-*.c test-*.tables \ + all-ser.tables core $(alltests) +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +test: test-table-opts +test-table-opts: $(alltests) + +test-opt-r%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) --reentrant $* -o $@ $< + +test-opt-nr%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) $* -o $@ $< + +test-ser-r%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) -R --tables-file="test-ser-r$*.tables" $* -o $@ $< + +test-ser-nr%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) --tables-file="test-ser-nr$*.tables" $* -o $@ $< + +test-ver-r%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) -R --tables-file="test-ver-r$*.tables" --tables-verify $* -o $@ $< + +test-ver-nr%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) --tables-file="test-ver-nr$*.tables" --tables-verify $* -o $@ $< + +test-opt%$(EXEEXT): test-opt%.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-ser%$(EXEEXT): test-ser%.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-ver%$(EXEEXT): test-ver%.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-opt: $(optexe) + for t in $(optexe) ; do \ + ./$$t `basename $$t $(EXEEXT)`.tables < $(srcdir)/test.input \ + || { echo $t FAILED ; exit 1 ; } ; \ + done + +test-ver: $(verexe) + for t in $(verexe) ; do \ + ./$$t `basename $$t $(EXEEXT)`.tables < $(srcdir)/test.input \ + || { echo $t FAILED ; exit 1 ; } ; \ + done + +test-ser: $(serexe) + for t in $(serexe) ; do \ + ./$$t `basename $$t $(EXEEXT)`.tables < $(srcdir)/test.input \ + || { echo $t FAILED ; exit 1 ; } ; \ + done + +test-mul: $(serexe) + $(RM) all-ser.tables + cat $(sertables) > all-ser.tables + for t in $(serexe) ; do \ + ./$$t all-ser.tables < $(srcdir)/test.input || { echo $$t FAILED; exit 1; } ; \ + done + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +.PHONY: test-table-opts test test-opt test-ser test-ver test-mul +.SECONDARY: $(allobj) $(allsrc) diff --git a/tests/test-table-opts/Makefile.in b/tests/test-table-opts/Makefile.in new file mode 100644 index 0000000..c15ca8f --- /dev/null +++ b/tests/test-table-opts/Makefile.in @@ -0,0 +1,410 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +# ------------------------------------------------ +# This test is really a set of tests, one for +# each compression flag. -Ca, -Cem, etc.. +# 'test-opt' builds non-serialized scanners with various table options. +# 'test-ver' verifies that the serialized tables match the in-code tables. +# 'test-ser' deserializes the tables at runtime. +# 'test-mul' checks that we can store multiple tables in a single file. +# ------------------------------------------------ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +testname := test-table-opts +allopts := -Ca -Ce -Cf -CF -Cm -Cem -Cae -Caef -CaeF -Cam -Caem + +# the test names themselves +opttests := $(foreach opt,$(allopts), test-opt-nr$(opt) test-opt-r$(opt)) +sertests := $(foreach opt,$(allopts), test-ser-nr$(opt) test-ser-r$(opt)) +vertests := $(foreach opt,$(allopts), test-ver-nr$(opt) test-ver-r$(opt)) +alltests := $(opttests) $(vertests) $(sertests) test-mul + +# the executables to build +optexe := $(addsuffix $(EXEEXT),$(opttests)) +verexe := $(addsuffix $(EXEEXT),$(vertests)) +serexe := $(addsuffix $(EXEEXT),$(sertests)) +allexe := $(optexe) $(verexe) $(serexe) + +# the .c files +optsrc := $(addsuffix .c,$(opttests)) +versrc := $(addsuffix .c,$(vertests)) +sersrc := $(addsuffix .c,$(sertests)) +allsrc := $(optsrc) $(versrc) $(sersrc) + +# the .o files +optobj := $(addsuffix .o,$(opttests)) +verobj := $(addsuffix .o,$(vertests)) +serobj := $(addsuffix .o,$(sertests)) +allobj := $(optobj) $(verobj) $(serobj) + +# the .tables files +sertables := $(addsuffix .tables,$(sertests)) +alltables := $(addsuffix .tables,$(alltests)) + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c OUTPUT test-*.o test-*.c test-*.tables \ + all-ser.tables core $(alltests) + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +subdir = tests/test-table-opts +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-table-opts/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +test: test-table-opts +test-table-opts: $(alltests) + +test-opt-r%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) --reentrant $* -o $@ $< + +test-opt-nr%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) $* -o $@ $< + +test-ser-r%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) -R --tables-file="test-ser-r$*.tables" $* -o $@ $< + +test-ser-nr%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) --tables-file="test-ser-nr$*.tables" $* -o $@ $< + +test-ver-r%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) -R --tables-file="test-ver-r$*.tables" --tables-verify $* -o $@ $< + +test-ver-nr%.c: $(srcdir)/scanner.l + $(FLEX) -L -P $(subst -,_,$(basename $(@F))) --tables-file="test-ver-nr$*.tables" --tables-verify $* -o $@ $< + +test-opt%$(EXEEXT): test-opt%.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-ser%$(EXEEXT): test-ser%.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-ver%$(EXEEXT): test-ver%.o + $(CC) -o $@ $(LDFLAGS) $< $(LOADLIBES) + +test-opt: $(optexe) + for t in $(optexe) ; do \ + ./$$t `basename $$t $(EXEEXT)`.tables < $(srcdir)/test.input \ + || { echo $t FAILED ; exit 1 ; } ; \ + done + +test-ver: $(verexe) + for t in $(verexe) ; do \ + ./$$t `basename $$t $(EXEEXT)`.tables < $(srcdir)/test.input \ + || { echo $t FAILED ; exit 1 ; } ; \ + done + +test-ser: $(serexe) + for t in $(serexe) ; do \ + ./$$t `basename $$t $(EXEEXT)`.tables < $(srcdir)/test.input \ + || { echo $t FAILED ; exit 1 ; } ; \ + done + +test-mul: $(serexe) + $(RM) all-ser.tables + cat $(sertables) > all-ser.tables + for t in $(serexe) ; do \ + ./$$t all-ser.tables < $(srcdir)/test.input || { echo $$t FAILED; exit 1; } ; \ + done + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +.PHONY: test-table-opts test test-opt test-ser test-ver test-mul +.SECONDARY: $(allobj) $(allsrc) +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-table-opts/scanner.l b/tests/test-table-opts/scanner.l new file mode 100644 index 0000000..5b3255f --- /dev/null +++ b/tests/test-table-opts/scanner.l @@ -0,0 +1,85 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.c". */ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" +%} + +%option 8bit +%option nounput nomain noyywrap +%option warn yylineno + + + +%% + +foo|bar ; +[[:digit:]]+ ; +[[:blank:]]+ ; +.|\n ; +%% + +int main ( int argc, char** argv ) +{ + FILE* fp = NULL; + void *yyscanner=0; + M4_YY_DECL_GUTS_VAR(); + +m4_ifdef( [[M4_YY_REENTRANT]], +[[ + yylex_init(&yyscanner); +]]) + +m4_ifdef( [[M4_YY_TABLES_EXTERNAL]], +[[ + if((fp = fopen(argv[1],"r"))== NULL) + yy_fatal_error("could not open tables file for reading" M4_YY_CALL_LAST_ARG); + + if(yytables_fload(fp M4_YY_CALL_LAST_ARG) < 0) + yy_fatal_error("yytables_fload returned < 0" M4_YY_CALL_LAST_ARG); + if(M4_YY_TABLES_VERIFY) + exit(0); +]]) + + if(argc > 2){ + if((fp = fopen(argv[2],"r"))== NULL) + yy_fatal_error("could not open input file for reading" M4_YY_CALL_LAST_ARG); + yyin = fp; + } + while(yylex(M4_YY_CALL_ONLY_ARG) != 0) + ; + +m4_ifdef( [[YY_TABLES_EXTERNAL]], +[[ + yytables_destroy(M4_YY_CALL_ONLY_ARG); +]]) + yylex_destroy(M4_YY_CALL_ONLY_ARG); + + if(argc < 0) /* silence the compiler */ + yyscanner = (void*)fp; + + return 0; +} diff --git a/tests/test-table-opts/test.input b/tests/test-table-opts/test.input new file mode 100644 index 0000000..aec9276 --- /dev/null +++ b/tests/test-table-opts/test.input @@ -0,0 +1,2 @@ +0000 foo 1111 foo 0000 bar foobar +0000 foo 1111 foo 0000 bar foobar diff --git a/tests/test-top/Makefile.am b/tests/test-top/Makefile.am new file mode 100644 index 0000000..51e6d6b --- /dev/null +++ b/tests/test-top/Makefile.am @@ -0,0 +1,54 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l test.input main.c +CLEANFILES = scanner.c scanner.h test-top OUTPUT $(OBJS) +OBJS = scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-top + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +scanner.h: scanner.c +main.o: scanner.h diff --git a/tests/test-top/Makefile.in b/tests/test-top/Makefile.in new file mode 100644 index 0000000..29f120a --- /dev/null +++ b/tests/test-top/Makefile.in @@ -0,0 +1,334 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +builddir = @builddir@ + +EXTRA_DIST = scanner.l test.input main.c +CLEANFILES = scanner.c scanner.h test-top OUTPUT $(OBJS) +OBJS = scanner.o main.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) -I$(builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +LFLAGS = --header="scanner.h" + +#YFLAGS = --defines --output=parser.c +testname = test-top +subdir = tests/test-top +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-top/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< + +scanner.h: scanner.c +main.o: scanner.h +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-top/main.c b/tests/test-top/main.c new file mode 100644 index 0000000..353a63e --- /dev/null +++ b/tests/test-top/main.c @@ -0,0 +1,63 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +#include "scanner.h" + +/* The scanner itself is not important here. + * We simply try to use all the functions that are exported in the + * header, to see if we get any compiler warnings. + */ +int +main ( int argc, char** argv ) +{ + yyscan_t scanner; + FILE *fp; + char * extra = "EXTRA"; + + testlex_init(&scanner); + testset_in(stdin,scanner); + testset_out(stdout,scanner); + testset_extra(extra,scanner); + + fp = testget_in(scanner); + fp = testget_out(scanner); + + while(testlex(scanner)) { + char * text; + int line; + line = testget_lineno(scanner); + text = testget_text(scanner); + + if( (char*)testget_extra(scanner) != extra) + break; + + if ( !text || line < 0) + continue; + } + testlex_destroy(scanner); + printf("TEST RETURNING OK.\n"); + return 0; +} + + +/* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ diff --git a/tests/test-top/scanner.l b/tests/test-top/scanner.l new file mode 100644 index 0000000..be329b0 --- /dev/null +++ b/tests/test-top/scanner.l @@ -0,0 +1,53 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* Build "scanner.c". + The scanner is not important. + This test is really about compilation. See "main.c". +*/ +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + +#ifndef DEFINE_ME +#error "DEFINE_ME undefined!" +#endif +%} + +%top{ +#define DEFINE_ME 1 +} + +%option reentrant +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap +%option warn + + +%% + +.|\n { } + +%% + diff --git a/tests/test-top/test.input b/tests/test-top/test.input new file mode 100644 index 0000000..2ce5001 --- /dev/null +++ b/tests/test-top/test.input @@ -0,0 +1,3 @@ +Any input is ok for this scanner. +We only care if it links. + diff --git a/tests/test-yyextra/Makefile.am b/tests/test-yyextra/Makefile.am new file mode 100644 index 0000000..440c08b --- /dev/null +++ b/tests/test-yyextra/Makefile.am @@ -0,0 +1,49 @@ +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-yyextra OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c + +testname = test-yyextra + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< diff --git a/tests/test-yyextra/Makefile.in b/tests/test-yyextra/Makefile.in new file mode 100644 index 0000000..17cc2c9 --- /dev/null +++ b/tests/test-yyextra/Makefile.in @@ -0,0 +1,329 @@ +# Makefile.in generated by automake 1.7 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of flex. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BISON = @BISON@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +HELP2MAN = @HELP2MAN@ +INDENT = @INDENT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +M4 = @M4@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +FLEX = $(top_builddir)/flex + +EXTRA_DIST = scanner.l test.input +CLEANFILES = scanner.c scanner.h parser.c parser.h test-yyextra OUTPUT $(OBJS) +OBJS = scanner.o # parser.o + +AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir) -I$(top_builddir) + +#LDFLAGS = $(top_srcdir)/libfl.a +#LFLAGS = --header="scanner.h" +#YFLAGS = --defines --output=parser.c +testname = test-yyextra +subdir = tests/test-yyextra +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = Makefile.am Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/test-yyextra/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +scanner.c: $(srcdir)/scanner.l + $(FLEX) $(LFLAGS) $< + +parser.c: $(srcdir)/parser.y + $(BISON) $(YFLAGS) $< + +$(testname)$(EXEEXT): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LOADLIBES) + +test: $(testname)$(EXEEXT) + ./$(testname)$(EXEEXT) < $(srcdir)/test.input + +.c.o: + $(CC) -c -o $@ $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/test-yyextra/scanner.l b/tests/test-yyextra/scanner.l new file mode 100644 index 0000000..baba52b --- /dev/null +++ b/tests/test-yyextra/scanner.l @@ -0,0 +1,121 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A file to build "scanner.c". */ +/* This tests that we can use "yyextra". + We buffer all input into a growable array, then print it. + We run diff on the input and output. +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "config.h" + + +/* We'll store the entire input in this buffer, growing as necessary. */ +struct Buffer { + int curr_len; + int max_len; + int grow_len; + char * data; +}; +#define YY_EXTRA_TYPE struct Buffer * + +/* Save char into junk array at next position. */ +static void append_char (char c, yyscan_t scanner ); + +%} + +%option 8bit outfile="scanner.c" prefix="test" +%option nounput nomain noyywrap nodefault +%option warn +%option reentrant + + +%% + +.|\r|\n { append_char (yytext[0],yyscanner); } + +%% + +int main(void); + +int +main () +{ + yyscan_t scanner; + struct Buffer * buf; + int i; + + buf = (struct Buffer*) malloc(sizeof(struct Buffer)); + buf->curr_len =0; + buf->max_len = 4; + buf->grow_len = 100; + buf->data = (char*)malloc(buf->max_len); + + testlex_init(&scanner); + testset_in( stdin, scanner); + testset_out( stdout, scanner); + testset_extra( buf, scanner ); + testlex(scanner); + + buf = testget_extra(scanner); + for(i=0; i < buf->curr_len; i++) + fputc( buf->data[i], stdout ); + free( buf->data); + free( buf); + + testlex_destroy(scanner); + return 0; +} + +/* Save char into junk array at next position. */ +static void append_char (char c, yyscan_t scanner ) +{ + struct Buffer *buf, *new_buf; + buf = testget_extra(scanner); + + /* Grow buffer if necessary. */ + + if( buf->curr_len >= buf->max_len ) + { + new_buf = (struct Buffer*) malloc(sizeof(struct Buffer)); + new_buf->max_len = buf->max_len + buf->grow_len; + new_buf->grow_len = buf->grow_len; + new_buf->data = (char*)malloc(new_buf->max_len); + for( new_buf->curr_len = 0; + new_buf->curr_len < buf->curr_len; + new_buf->curr_len++ ) + { + new_buf->data[ new_buf->curr_len] = buf->data [ new_buf->curr_len]; + } + free( buf->data ); + free( buf ); + buf = new_buf; + testset_extra( buf, scanner ); + } + + + buf->data[ buf->curr_len++ ] = c; +} diff --git a/tests/test-yyextra/test.input b/tests/test-yyextra/test.input new file mode 100644 index 0000000..243df29 --- /dev/null +++ b/tests/test-yyextra/test.input @@ -0,0 +1,795 @@ + + THE UNITED STATES CONSTITUTION + _________________________________________________________________ + + (See Note 1) + + We the People of the United States, in Order to form a more perfect + Union, establish Justice, insure domestic Tranquility, provide for the + common defence, promote the general Welfare, and secure the Blessings + of Liberty to ourselves and our Posterity, do ordain and establish + this Constitution for the United States of America. + +Article. I. + + Section 1. + + All legislative Powers herein granted shall be vested in a Congress of + the United States, which shall consist of a Senate and House of + Representatives. + + Section. 2. + + Clause 1: The House of Representatives shall be composed of Members + chosen every second Year by the People of the several States, and the + Electors in each State shall have the Qualifications requisite for + Electors of the most numerous Branch of the State Legislature. + + Clause 2: No Person shall be a Representative who shall not have + attained to the Age of twenty five Years, and been seven Years a + Citizen of the United States, and who shall not, when elected, be an + Inhabitant of that State in which he shall be chosen. + + Clause 3: Representatives and direct Taxes shall be apportioned among + the several States which may be included within this Union, according + to their respective Numbers, which shall be determined by adding to + the whole Number of free Persons, including those bound to Service for + a Term of Years, and excluding Indians not taxed, three fifths of all + other Persons. (See Note 2) The actual Enumeration shall be made + within three Years after the first Meeting of the Congress of the + United States, and within every subsequent Term of ten Years, in such + Manner as they shall by Law direct. The Number of Representatives + shall not exceed one for every thirty Thousand, but each State shall + have at Least one Representative; and until such enumeration shall be + made, the State of New Hampshire shall be entitled to chuse three, + Massachusetts eight, Rhode-Island and Providence Plantations one, + Connecticut five, New-York six, New Jersey four, Pennsylvania eight, + Delaware one, Maryland six, Virginia ten, North Carolina five, South + Carolina five, and Georgia three. + + Clause 4: When vacancies happen in the Representation from any State, + the Executive Authority thereof shall issue Writs of Election to fill + such Vacancies. + + Clause 5: The House of Representatives shall chuse their Speaker and + other Officers; and shall have the sole Power of Impeachment. + + Section. 3. + + Clause 1: The Senate of the United States shall be composed of two + Senators from each State, chosen by the Legislature thereof, (See Note + 3) for six Years; and each Senator shall have one Vote. + + Clause 2: Immediately after they shall be assembled in Consequence of + the first Election, they shall be divided as equally as may be into + three Classes. The Seats of the Senators of the first Class shall be + vacated at the Expiration of the second Year, of the second Class at + the Expiration of the fourth Year, and of the third Class at the + Expiration of the sixth Year, so that one third may be chosen every + second Year; and if Vacancies happen by Resignation, or otherwise, + during the Recess of the Legislature of any State, the Executive + thereof may make temporary Appointments until the next Meeting of the + Legislature, which shall then fill such Vacancies. (See Note 4) + + Clause 3: No Person shall be a Senator who shall not have attained to + the Age of thirty Years, and been nine Years a Citizen of the United + States, and who shall not, when elected, be an Inhabitant of that + State for which he shall be chosen. + + Clause 4: The Vice President of the United States shall be President + of the Senate, but shall have no Vote, unless they be equally divided. + + Clause 5: The Senate shall chuse their other Officers, and also a + President pro tempore, in the Absence of the Vice President, or when + he shall exercise the Office of President of the United States. + + Clause 6: The Senate shall have the sole Power to try all + Impeachments. When sitting for that Purpose, they shall be on Oath or + Affirmation. When the President of the United States is tried, the + Chief Justice shall preside: And no Person shall be convicted without + the Concurrence of two thirds of the Members present. + + Clause 7: Judgment in Cases of Impeachment shall not extend further + than to removal from Office, and disqualification to hold and enjoy + any Office of honor, Trust or Profit under the United States: but the + Party convicted shall nevertheless be liable and subject to + Indictment, Trial, Judgment and Punishment, according to Law. + + Section. 4. + + Clause 1: The Times, Places and Manner of holding Elections for + Senators and Representatives, shall be prescribed in each State by the + Legislature thereof; but the Congress may at any time by Law make or + alter such Regulations, except as to the Places of chusing Senators. + + Clause 2: The Congress shall assemble at least once in every Year, and + such Meeting shall be on the first Monday in December, (See Note 5) + unless they shall by Law appoint a different Day. + + Section. 5. + + Clause 1: Each House shall be the Judge of the Elections, Returns and + Qualifications of its own Members, and a Majority of each shall + constitute a Quorum to do Business; but a smaller Number may adjourn + from day to day, and may be authorized to compel the Attendance of + absent Members, in such Manner, and under such Penalties as each House + may provide. + + Clause 2: Each House may determine the Rules of its Proceedings, + punish its Members for disorderly Behaviour, and, with the Concurrence + of two thirds, expel a Member. + + Clause 3: Each House shall keep a Journal of its Proceedings, and from + time to time publish the same, excepting such Parts as may in their + Judgment require Secrecy; and the Yeas and Nays of the Members of + either House on any question shall, at the Desire of one fifth of + those Present, be entered on the Journal. + + Clause 4: Neither House, during the Session of Congress, shall, + without the Consent of the other, adjourn for more than three days, + nor to any other Place than that in which the two Houses shall be + sitting. + + Section. 6. + + Clause 1: The Senators and Representatives shall receive a + Compensation for their Services, to be ascertained by Law, and paid + out of the Treasury of the United States. (See Note 6) They shall in + all Cases, except Treason, Felony and Breach of the Peace, + beprivileged from Arrest during their Attendance at the Session of + their respective Houses, and in going to and returning from the same; + and for any Speech or Debate in either House, they shall not be + questioned in any other Place. + + Clause 2: No Senator or Representative shall, during the Time for + which he was elected, be appointed to any civil Office under the + Authority of the United States, which shall have been created, or the + Emoluments whereof shall have been encreased during such time; and no + Person holding any Office under the United States, shall be a Member + of either House during his Continuance in Office. + + Section. 7. + + Clause 1: All Bills for raising Revenue shall originate in the House + of Representatives; but the Senate may propose or concur with + Amendments as on other Bills. + + Clause 2: Every Bill which shall have passed the House of + Representatives and the Senate, shall, before it become a Law, be + presented to the President of the United States; If he approve he + shall sign it, but if not he shall return it, with his Objections to + that House in which it shall have originated, who shall enter the + Objections at large on their Journal, and proceed to reconsider it. If + after such Reconsideration two thirds of that House shall agree to + pass the Bill, it shall be sent, together with the Objections, to the + other House, by which it shall likewise be reconsidered, and if + approved by two thirds of that House, it shall become a Law. But in + all such Cases the Votes of both Houses shall be determined by yeas + and Nays, and the Names of the Persons voting for and against the Bill + shall be entered on the Journal of each House respectively. If any + Bill shall not be returned by the President within ten Days (Sundays + excepted) after it shall have been presented to him, the Same shall be + a Law, in like Manner as if he had signed it, unless the Congress by + their Adjournment prevent its Return, in which Case it shall not be a + Law. + + Clause 3: Every Order, Resolution, or Vote to which the Concurrence of + the Senate and House of Representatives may be necessary (except on a + question of Adjournment) shall be presented to the President of the + United States; and before the Same shall take Effect, shall be + approved by him, or being disapproved by him, shall be repassed by two + thirds of the Senate and House of Representatives, according to the + Rules and Limitations prescribed in the Case of a Bill. + + Section. 8. + + Clause 1: The Congress shall have Power To lay and collect Taxes, + Duties, Imposts and Excises, to pay the Debts and provide for the + common Defence and general Welfare of the United States; but all + Duties, Imposts and Excises shall be uniform throughout the United + States; + + Clause 2: To borrow Money on the credit of the United States; + + Clause 3: To regulate Commerce with foreign Nations, and among the + several States, and with the Indian Tribes; + + Clause 4: To establish an uniform Rule of Naturalization, and uniform + Laws on the subject of Bankruptcies throughout the United States; + + Clause 5: To coin Money, regulate the Value thereof, and of foreign + Coin, and fix the Standard of Weights and Measures; + + Clause 6: To provide for the Punishment of counterfeiting the + Securities and current Coin of the United States; + + Clause 7: To establish Post Offices and post Roads; + + Clause 8: To promote the Progress of Science and useful Arts, by + securing for limited Times to Authors and Inventors the exclusive + Right to their respective Writings and Discoveries; + + Clause 9: To constitute Tribunals inferior to the supreme Court; + + Clause 10: To define and punish Piracies and Felonies committed on the + high Seas, and Offences against the Law of Nations; + + Clause 11: To declare War, grant Letters of Marque and Reprisal, and + make Rules concerning Captures on Land and Water; + + Clause 12: To raise and support Armies, but no Appropriation of Money + to that Use shall be for a longer Term than two Years; + + Clause 13: To provide and maintain a Navy; + + Clause 14: To make Rules for the Government and Regulation of the land + and naval Forces; + + Clause 15: To provide for calling forth the Militia to execute the + Laws of the Union, suppress Insurrections and repel Invasions; + + Clause 16: To provide for organizing, arming, and disciplining, the + Militia, and for governing such Part of them as may be employed in the + Service of the United States, reserving to the States respectively, + the Appointment of the Officers, and the Authority of training the + Militia according to the discipline prescribed by Congress; + + Clause 17: To exercise exclusive Legislation in all Cases whatsoever, + over such District (not exceeding ten Miles square) as may, byCession + of particular States, and the Acceptance of Congress, become the Seat + of the Government of the United States, and to exercise like Authority + over all Places purchased by the Consent of the Legislature of the + State in which the Same shall be, for the Erection of Forts, + Magazines, Arsenals, dock-Yards, and other needful Buildings;--And + + Clause 18: To make all Laws which shall be necessary and proper for + carrying into Execution the foregoing Powers, and all other Powers + vested by this Constitution in the Government of the United States, or + in any Department or Officer thereof. + + Section. 9. + + Clause 1: The Migration or Importation of such Persons as any of the + States now existing shall think proper to admit, shall not be + prohibited by the Congress prior to the Year one thousand eight + hundred and eight, but a Tax or duty may be imposed on such + Importation, not exceeding ten dollars for each Person. + + Clause 2: The Privilege of the Writ of Habeas Corpus shall not be + suspended, unless when in Cases of Rebellion or Invasion the public + Safety may require it. + + Clause 3: No Bill of Attainder or ex post facto Law shall be passed. + + Clause 4: No Capitation, or other direct, Tax shall be laid, unless in + Proportion to the Census or Enumeration herein before directed to be + taken. (See Note 7) + + Clause 5: No Tax or Duty shall be laid on Articles exported from any + State. + + Clause 6: No Preference shall be given by any Regulation of Commerce + or Revenue to the Ports of one State over those of another: nor shall + Vessels bound to, or from, one State, be obliged to enter, clear, or + pay Duties in another. + + Clause 7: No Money shall be drawn from the Treasury, but in + Consequence of Appropriations made by Law; and a regular Statement and + Account of the Receipts and Expenditures of all public Money shall be + published from time to time. + + Clause 8: No Title of Nobility shall be granted by the United States: + And no Person holding any Office of Profit or Trust under them, shall, + without the Consent of the Congress, accept of any present, Emolument, + Office, or Title, of any kind whatever, from any King, Prince, or + foreign State. + + Section. 10. + + Clause 1: No State shall enter into any Treaty, Alliance, or + Confederation; grant Letters of Marque and Reprisal; coin Money; emit + Bills of Credit; make any Thing but gold and silver Coin a Tender in + Payment of Debts; pass any Bill of Attainder, ex post facto Law, or + Law impairing the Obligation of Contracts, or grant any Title of + Nobility. + + Clause 2: No State shall, without the Consent of the Congress, lay any + Imposts or Duties on Imports or Exports, except what may be absolutely + necessary for executing it's inspection Laws: and the net Produce of + all Duties and Imposts, laid by any State on Imports or Exports, shall + be for the Use of the Treasury of the United States; and all such Laws + shall be subject to the Revision and Controul of the Congress. + + Clause 3: No State shall, without the Consent of Congress, lay any + Duty of Tonnage, keep Troops, or Ships of War in time of Peace, enter + into any Agreement or Compact with another State, or with a foreign + Power, or engage in War, unless actually invaded, or in such imminent + Danger as will not admit of delay. + +Article. II. + + Section. 1. + + Clause 1: The executive Power shall be vested in a President of the + United States of America. He shall hold his Office during the Term of + four Years, and, together with the Vice President, chosen for the same + Term, be elected, as follows + + Clause 2: Each State shall appoint, in such Manner as the Legislature + thereof may direct, a Number of Electors, equal to the whole Number of + Senators and Representatives to which the State may be entitled in the + Congress: but no Senator or Representative, or Person holding an + Office of Trust or Profit under the United States, shall be appointed + an Elector. + + Clause 3: The Electors shall meet in their respective States, and vote + by Ballot for two Persons, of whom one at least shall not be an + Inhabitant of the same State with themselves. And they shall make a + List of all the Persons voted for, and of the Number of Votes for + each; which List they shall sign and certify, and transmit sealed to + the Seat of the Government of the United States, directed to the + President of the Senate. The President of the Senate shall, in the + Presence of the Senate and House of Representatives, open all the + Certificates, and the Votes shall then be counted. The Person having + the greatest Number of Votes shall be the President, if such Number be + a Majority of the whole Number of Electors appointed; and if there be + more than one who have such Majority, and have an equal Number of + Votes, then the House of Representatives shall immediately chuse by + Ballot one of them for President; and if no Person have a Majority, + then from the five highest on the List the said House shall in like + Manner chuse the President. But in chusing the President, the Votes + shall be taken by States, the Representation from each State having + one Vote; A quorum for this Purpose shall consist of a Member or + Members from two thirds of the States, and a Majority of all the + States shall be necessary to a Choice. In every Case, after the Choice + of the President, the Person having the greatest Number of Votes of + the Electors shall be the Vice President. But if there should remain + two or more who have equal Votes, the Senate shall chuse from them by + Ballot the Vice President. (See Note 8) + + Clause 4: The Congress may determine the Time of chusing the Electors, + and the Day on which they shall give their Votes; which Day shall be + the same throughout the United States. + + Clause 5: No Person except a natural born Citizen, or a Citizen of the + United States, at the time of the Adoption of this Constitution, shall + be eligible to the Office of President; neither shall any Person be + eligible to that Office who shall not have attained to the Age of + thirty five Years, and been fourteen Years a Resident within the + United States. + + Clause 6: In Case of the Removal of the President from Office, or of + his Death, Resignation, or Inability to discharge the Powers and + Duties of the said Office, (See Note 9) the Same shall devolve on the + VicePresident, and the Congress may by Law provide for the Case of + Removal, Death, Resignation or Inability, both of the President and + Vice President, declaring what Officer shall then act as President, + and such Officer shall act accordingly, until the Disability be + removed, or a President shall be elected. + + Clause 7: The President shall, at stated Times, receive for his + Services, a Compensation, which shall neither be encreased nor + diminished during the Period for which he shall have been elected, and + he shall not receive within that Period any other Emolument from the + United States, or any of them. + + Clause 8: Before he enter on the Execution of his Office, he shall + take the following Oath or Affirmation:--"I do solemnly swear (or + affirm) that I will faithfully execute the Office of President of the + United States, and will to the best of my Ability, preserve, protect + and defend the Constitution of the United States." + + Section. 2. + + Clause 1: The President shall be Commander in Chief of the Army and + Navy of the United States, and of the Militia of the several States, + when called into the actual Service of the United States; he may + require the Opinion, in writing, of the principal Officer in each of + the executive Departments, upon any Subject relating to the Duties of + their respective Offices, and he shall have Power to grant Reprieves + and Pardons for Offences against the United States, except in Cases of + Impeachment. + + Clause 2: He shall have Power, by and with the Advice and Consent of + the Senate, to make Treaties, provided two thirds of the Senators + present concur; and he shall nominate, and by and with the Advice and + Consent of the Senate, shall appoint Ambassadors, other public + Ministers and Consuls, Judges of the supreme Court, and all other + Officers of the United States, whose Appointments are not herein + otherwise provided for, and which shall be established by Law: but the + Congress may by Law vest the Appointment of such inferior Officers, as + they think proper, in the President alone, in the Courts of Law, or in + the Heads of Departments. + + Clause 3: The President shall have Power to fill up all Vacancies that + may happen during the Recess of the Senate, by granting Commissions + which shall expire at the End of their next Session. + + Section. 3. + + He shall from time to time give to the Congress Information of the + State of the Union, and recommend to their Consideration such Measures + as he shall judge necessary and expedient; he may, on extraordinary + Occasions, convene both Houses, or either of them, and in Case of + Disagreement between them, with Respect to the Time of Adjournment, he + may adjourn them to such Time as he shall think proper; he shall + receive Ambassadors and other public Ministers; he shall take Care + that the Laws be faithfully executed, and shall Commission all the + Officers of the United States. + + Section. 4. + + The President, Vice President and all civil Officers of the United + States, shall be removed from Office on Impeachment for, and + Conviction of, Treason, Bribery, or other high Crimes and + Misdemeanors. + +Article. III. + + Section. 1. + + The judicial Power of the United States, shall be vested in one + supreme Court, and in such inferior Courts as the Congress may from + time to time ordain and establish. The Judges, both of the supreme and + inferior Courts, shall hold their Offices during good Behaviour, and + shall, at stated Times, receive for their Services, a Compensation, + which shall not be diminished during their Continuance in Office. + + Section. 2. + + Clause 1: The judicial Power shall extend to all Cases, in Law and + Equity, arising under this Constitution, the Laws of the United + States, and Treaties made, or which shall be made, under their + Authority;--to all Cases affecting Ambassadors, other public Ministers + and Consuls;--to all Cases of admiralty and maritime Jurisdiction;--to + Controversies to which the United States shall be a Party;--to + Controversies between two or more States;--between a State and + Citizens of another State; (See Note 10)--between Citizens of + different States, --between Citizens of the same State claiming Lands + under Grants of different States, and between a State, or the Citizens + thereof, and foreign States, Citizens or Subjects. + + Clause 2: In all Cases affecting Ambassadors, other public Ministers + and Consuls, and those in which a State shall be Party, the supreme + Court shall have original Jurisdiction. In all the other Cases before + mentioned, the supreme Court shall have appellate Jurisdiction, both + as to Law and Fact, with such Exceptions, and under such Regulations + as the Congress shall make. + + Clause 3: The Trial of all Crimes, except in Cases of Impeachment, + shall be by Jury; and such Trial shall be held in the State where the + said Crimes shall have been committed; but when not committed within + any State, the Trial shall be at such Place or Places as the Congress + may by Law have directed. + + Section. 3. + + Clause 1: Treason against the United States, shall consist only in + levying War against them, or in adhering to their Enemies, giving them + Aid and Comfort. No Person shall be convicted of Treason unless on the + Testimony of two Witnesses to the same overt Act, or on Confession in + open Court. + + Clause 2: The Congress shall have Power to declare the Punishment of + Treason, but no Attainder of Treason shall work Corruption of Blood, + or Forfeiture except during the Life of the Person attainted. + +Article. IV. + + Section. 1. + + Full Faith and Credit shall be given in each State to the public Acts, + Records, and judicial Proceedings of every other State. And the + Congress may by general Laws prescribe the Manner in which such Acts, + Records and Proceedings shall be proved, and the Effect thereof. + + Section. 2. + + Clause 1: The Citizens of each State shall be entitled to all + Privileges and Immunities of Citizens in the several States. + + Clause 2: A Person charged in any State with Treason, Felony, or other + Crime, who shall flee from Justice, and be found in another State, + shall on Demand of the executive Authority of the State from which he + fled, be delivered up, to be removed to the State having Jurisdiction + of the Crime. + + Clause 3: No Person held to Service or Labour in one State, under the + Laws thereof, escaping into another, shall, in Consequence of any Law + or Regulation therein, be discharged from such Service or Labour, but + shall be delivered up on Claim of the Party to whom such Service or + Labour may be due. (See Note 11) + + Section. 3. + + Clause 1: New States may be admitted by the Congress into this Union; + but no new State shall be formed or erected within the Jurisdiction of + any other State; nor any State be formed by the Junction of two or + more States, or Parts of States, without the Consent of the + Legislatures of the States concerned as well as of the Congress. + + Clause 2: The Congress shall have Power to dispose of and make all + needful Rules and Regulations respecting the Territory or other + Property belonging to the United States; and nothing in this + Constitution shall be so construed as to Prejudice any Claims of the + United States, or of any particular State. + + Section. 4. + + The United States shall guarantee to every State in this Union a + Republican Form of Government, and shall protect each of them against + Invasion; and on Application of the Legislature, or of the Executive + (when the Legislature cannot be convened) against domestic Violence. + +Article. V. + + The Congress, whenever two thirds of both Houses shall deem it + necessary, shall propose [1]Amendments to this Constitution, or, on + the Application of the Legislatures of two thirds of the several + States, shall call a Convention for proposing Amendments, which, in + either Case, shall be valid to all Intents and Purposes, as Part of + this Constitution, when ratified by the Legislatures of three fourths + of the several States, or by Conventions in three fourths thereof, as + the one or the other Mode of Ratification may be proposed by the + Congress; Provided that no Amendment which may be made prior to the + Year One thousand eight hundred and eight shall in any Manner affect + the first and fourth Clauses in the Ninth Section of the first + Article; and that no State, without its Consent, shall be deprived of + its equal Suffrage in the Senate. + +Article. VI. + + Clause 1: All Debts contracted and Engagements entered into, before + the Adoption of this Constitution, shall be as valid against the + United States under this Constitution, as under the Confederation. + + Clause 2: This Constitution, and the Laws of the United States which + shall be made in Pursuance thereof; and all Treaties made, or which + shall be made, under the Authority of the United States, shall be the + supreme Law of the Land; and the Judges in every State shall be bound + thereby, any Thing in the Constitution or Laws of any State to the + Contrary notwithstanding. + + Clause 3: The Senators and Representatives before mentioned, and the + Members of the several State Legislatures, and all executive and + judicial Officers, both of the United States and of the several + States, shall be bound by Oath or Affirmation, to support this + Constitution; but no religious Test shall ever be required as a + Qualification to any Office or public Trust under the United States. + +Article. VII. + + The Ratification of the Conventions of nine States, shall be + sufficient for the Establishment of this Constitution between the + States so ratifying the Same. + + done in Convention by the Unanimous Consent of the States present the + Seventeenth Day of September in the Year of our Lord one thousand + seven hundred and Eighty seven and of the Independence of the United + States of America the Twelfth In witness whereof We have hereunto + subscribed our Names, + + GO WASHINGTON--Presidt. and deputy from Virginia + + [Signed also by the deputies of twelve States.] + + Delaware + + Geo: Read + Gunning Bedford jun + John Dickinson + Richard Bassett + Jaco: Broom + + Maryland + + James MCHenry + Dan of ST ThoS. Jenifer + DanL Carroll. + + Virginia + + John Blair-- + James Madison Jr. + + North Carolina + + WM Blount + RichD. Dobbs Spaight. + Hu Williamson + + South Carolina + + J. Rutledge + Charles 1ACotesworth Pinckney + Charles Pinckney + Pierce Butler. + + Georgia + + William Few + Abr Baldwin + + New Hampshire + + John Langdon + Nicholas Gilman + + Massachusetts + + Nathaniel Gorham + Rufus King + + Connecticut + WM. SamL. Johnson + Roger Sherman + + New York + + Alexander Hamilton + + New Jersey + + Wil: Livingston + David Brearley. + WM. Paterson. + Jona: Dayton + + Pennsylvania + + B Franklin + Thomas Mifflin + RobT Morris + Geo. Clymer + ThoS. FitzSimons + Jared Ingersoll + James Wilson. + Gouv Morris + + Attest William Jackson Secretary + + NOTES + + Note 1: This text of the Constitution follows the engrossed copy + signed by Gen. Washington and the deputies from 12 States. The small + superior figures preceding the paragraphs designate Clauses, and were + not in the original and have no reference to footnotes. + + The Constitution was adopted by a convention of the States on + September 17, 1787, and was subsequently ratified by the several + States, on the following dates: Delaware, December 7, 1787; + Pennsylvania, December 12, 1787; New Jersey, December 18, 1787; + Georgia, January 2, 1788; Connecticut, January 9, 1788; Massachusetts, + February 6, 1788; Maryland, April 28, 1788; South Carolina, May 23, + 1788; New Hampshire, June 21, 1788. + + Ratification was completed on June 21, 1788. + + The Constitution was subsequently ratified by Virginia, June 25, 1788; + New York, July 26, 1788; North Carolina, November 21, 1789; Rhode + Island, May 29, 1790; and Vermont, January 10, 1791. + + In May 1785, a committee of Congress made a report recommending an + alteration in the Articles of Confederation, but no action was taken + on it, and it was left to the State Legislatures to proceed in the + matter. In January 1786, the Legislature of Virginia passed a + resolution providing for the appointment of five commissioners, who, + or any three of them, should meet such commissioners as might be + appointed in the other States of the Union, at a time and place to be + agreed upon, to take into consideration the trade of the United + States; to consider how far a uniform system in their commercial + regulations may be necessary to their common interest and their + permanent harmony; and to report to the several States such an act, + relative to this great object, as, when ratified by them, will enable + the United States in Congress effectually to provide for the same. The + Virginia commissioners, after some correspondence, fixed the first + Monday in September as the time, and the city of Annapolis as the + place for the meeting, but only four other States were represented, + viz: Delaware, New York, New Jersey, and Pennsylvania; the + commissioners appointed by Massachusetts, New Hampshire, North + Carolina, and Rhode Island failed to attend. Under the circumstances + of so partial a representation, the commissioners present agreed upon + a report, (drawn by Mr. Hamilton, of New York,) expressing their + unanimous conviction that it might essentially tend to advance the + interests of the Union if the States by which they were respectively + delegated would concur, and use their endeavors to procure the + concurrence of the other States, in the appointment of commissioners + to meet at Philadelphia on the Second Monday of May following, to take + into consideration the situation of the United States; to devise such + further provisions as should appear to them necessary to render the + Constitution of the Federal Government adequate to the exigencies of + the Union; and to report such an act for that purpose to the United + States in Congress assembled as, when agreed to by them and afterwards + confirmed by the Legislatures of every State, would effectually + provide for the same. + + Congress, on the 21st of February, 1787, adopted a resolution in favor + of a convention, and the Legislatures of those States which had not + already done so (with the exception of Rhode Island) promptly + appointed delegates. On the 25th of May, seven States having convened, + George Washington, of Virginia, was unanimously elected President, and + the consideration of the proposed constitution was commenced. On the + 17th of September, 1787, the Constitution as engrossed and agreed upon + was signed by all the members present, except Mr. Gerry of + Massachusetts, and Messrs. Mason and Randolph, of Virginia. The + president of the convention transmitted it to Congress, with a + resolution stating how the proposed Federal Government should be put + in operation, and an explanatory letter. Congress, on the 28th of + September, 1787, directed the Constitution so framed, with the + resolutions and letter concerning the same, to "be transmitted to the + several Legislatures in order to be submitted to a convention of + delegates chosen in each State by the people thereof, in conformity to + the resolves of the convention." + + On the 4th of March, 1789, the day which had been fixed for commencing + the operations of Government under the new Constitution, it had been + ratified by the conventions chosen in each State to consider it, as + follows: Delaware, December 7, 1787; Pennsylvania, December 12, 1787; + New Jersey, December 18, 1787; Georgia, January 2, 1788; Connecticut, + January 9, 1788; Massachusetts, February 6, 1788; Maryland, April 28, + 1788; South Carolina, May 23, 1788; New Hampshire, June 21, 1788; + Virginia, June 25, 1788; and New York, July 26, 1788. + + The President informed Congress, on the 28th of January, 1790, that + North Carolina had ratified the Constitution November 21, 1789; and he + informed Congress on the 1st of June, 1790, that Rhode Island had + ratified the Constitution May 29, 1790. Vermont, in convention, + ratified the Constitution January 10, 1791, and was, by an act of + Congress approved February 18, 1791, "received and admitted into this + Union as a new and entire member of the United States." + + Note 2: The part of this Clause relating to the mode of apportionment + of representatives among the several States has been affected by + Section 2 of amendment XIV, and as to taxes on incomes without + apportionment by amendment XVI. + + Note 3: This Clause has been affected by Clause 1 of amendment XVII. + + Note 4: This Clause has been affected by Clause 2 of amendment XVIII. + + Note 5: This Clause has been affected by amendment XX. + + Note 6: This Clause has been affected by amendment XXVII. + + Note 7: This Clause has been affected by amendment XVI. + + Note 8: This Clause has been superseded by amendment XII. + + Note 9: This Clause has been affected by amendment XXV. + + Note 10: This Clause has been affected by amendment XI. + + Note 11: This Clause has been affected by amendment XIII. + + Note 12: The first ten amendments to the Constitution of the United + States (and two others, one of which failed of ratification and the + other which later became the 27th amendment) were proposed to the + legislatures of the several States by the First Congress on September + 25, 1789. The first ten amendments were ratified by the following + States, and the notifications of ratification by the Governors thereof + were successively communicated by the President to Congress: New + Jersey, November 20, 1789; Maryland, December 19, 1789; North + Carolina, December 22, 1789; South Carolina, January 19, 1790; New + Hampshire, January 25, 1790; Delaware, January 28, 1790; New York, + February 24, 1790; Pennsylvania, March 10, 1790; Rhode Island, June 7, + 1790; Vermont, November 3, 1791; and Virginia, December 15, 1791. + + Ratification was completed on December 15, 1791. + + The amendments were subsequently ratified by the legislatures of + Massachusetts, March 2, 1939; Georgia, March 18, 1939; and + Connecticut, April 19, 1939. + + Note 13: Only the 13th, 14th, 15th, and 16th articles of amendment had + numbers assigned to them at the time of ratification. + + Note 14: This sentence has been superseded by section 3 of amendment + XX. + + Note 15: See amendment XIX and section 1 of amendment XXVI. + + Note 16: Repealed by section 1 of amendment XXI. + +References + + 1. http://www.house.gov/Constitution/Amend.html |