diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | Makefile.am | 26 | ||||
-rwxr-xr-x | doc/apibuild.py | 1 | ||||
-rw-r--r-- | runtest.c | 250 | ||||
-rw-r--r-- | testAutomata.c | 309 | ||||
-rw-r--r-- | win32/Makefile.bcb | 1 | ||||
-rw-r--r-- | win32/Makefile.mingw | 1 | ||||
-rw-r--r-- | win32/Makefile.msvc | 1 |
9 files changed, 248 insertions, 343 deletions
@@ -96,7 +96,6 @@ runxmlconf.log stamp-h1 tags test.out -testAutomata testModule testThreads testapi diff --git a/CMakeLists.txt b/CMakeLists.txt index 9762e6af..bb3697d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -505,7 +505,6 @@ if(LIBXML2_WITH_TESTS) runxmlconf runsuite testapi - testAutomata testchar testdict testModule diff --git a/Makefile.am b/Makefile.am index 22e5856c..6b79dc9a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -15,7 +15,6 @@ check_PROGRAMS = \ runsuite \ runtest \ runxmlconf \ - testAutomata \ testModule \ testThreads \ testapi \ @@ -156,10 +155,6 @@ testThreads_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS) testThreads_DEPENDENCIES = $(DEPS) testThreads_LDADD= $(BASE_THREAD_LIBS) $(THREAD_LIBS) $(LDADDS) -testAutomata_SOURCES=testAutomata.c -testAutomata_DEPENDENCIES = $(DEPS) -testAutomata_LDADD= $(LDADDS) - testModule_SOURCES=testModule.c testModule_DEPENDENCIES = $(DEPS) testModule_LDADD= $(LDADDS) @@ -219,9 +214,6 @@ endif if WITH_DEBUG_SOURCES OLD_TESTS += Scripttests endif -if WITH_REGEXPS_SOURCES -OLD_TESTS += Automatatests -endif if WITH_SCHEMAS_SOURCES if WITH_PYTHON OLD_TESTS += RelaxNGPythonTests SchemasPythonTests @@ -311,24 +303,6 @@ Catatests : xmlcatalog$(EXEEXT) grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \ rm -f $(srcdir)/result/catalogs/mycatalog) -Automatatests: testAutomata$(EXEEXT) - @(echo > .memdump) - @echo "## Automata regression tests" - -@(for i in $(srcdir)/test/automata/* ; do \ - name=`basename $$i`; \ - if [ ! -d $$i ] ; then \ - if [ ! -f $(srcdir)/result/automata/$$name ] ; then \ - echo New test file $$name ; \ - $(CHECKER) $(top_builddir)/testAutomata $$i > $(srcdir)/result/automata/$$name; \ - grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\ - else \ - log=`$(CHECKER) $(top_builddir)/testAutomata $$i 2>&1 > result.$$name ; \ - grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\ - diff $(srcdir)/result/automata/$$name result.$$name` ; \ - if [ -n "$$log" ] ; then echo $$name result ; echo "$$log" ; fi ; \ - rm result.$$name ; \ - fi ; fi ; done) - dba100000.xml: dbgenattr.pl @echo "## generating dba100000.xml" @($(PERL) $(top_srcdir)/dbgenattr.pl 100000 > dba100000.xml) diff --git a/doc/apibuild.py b/doc/apibuild.py index dff5c573..00e0bc35 100755 --- a/doc/apibuild.py +++ b/doc/apibuild.py @@ -29,7 +29,6 @@ ignored_files = { "testOOMlib.h": "out of memory tester", "testOOMlib.c": "out of memory tester", "rngparser.c": "not yet integrated", - "testAutomata.c": "test tool", "testModule.c": "test tool", "testThreads.c": "test tool", "testapi.c": "generated regression tests", @@ -4323,7 +4323,9 @@ regexpTest(const char *filename, const char *result, const char *err, char expression[5000]; int len, ret, res = 0; - input = fopen(filename, "r"); + nb_tests++; + + input = fopen(filename, "rb"); if (input == NULL) { xmlGenericError(xmlGenericErrorContext, "Cannot open %s for reading\n", filename); @@ -4399,7 +4401,246 @@ regexpTest(const char *filename, const char *result, const char *err, return(res); } -#endif +#endif /* LIBXML_REGEXPS_ENABLED */ + +#ifdef LIBXML_AUTOMATA_ENABLED +/************************************************************************ + * * + * Automata tests * + * * + ************************************************************************/ + +static int scanNumber(char **ptr) { + int ret = 0; + char *cur; + + cur = *ptr; + while ((*cur >= '0') && (*cur <= '9')) { + ret = ret * 10 + (*cur - '0'); + cur++; + } + *ptr = cur; + return(ret); +} + +static int +automataTest(const char *filename, const char *result, + const char *err ATTRIBUTE_UNUSED, int options ATTRIBUTE_UNUSED) { + FILE *input, *output; + char *temp; + char expr[5000]; + int len; + int ret; + int i; + int res = 0; + xmlAutomataPtr am; + xmlAutomataStatePtr states[1000]; + xmlRegexpPtr regexp = NULL; + xmlRegExecCtxtPtr exec = NULL; + + nb_tests++; + + for (i = 0;i<1000;i++) + states[i] = NULL; + + input = fopen(filename, "rb"); + if (input == NULL) { + xmlGenericError(xmlGenericErrorContext, + "Cannot open %s for reading\n", filename); + return(-1); + } + temp = resultFilename(filename, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + output = fopen(temp, "wb"); + if (output == NULL) { + fprintf(stderr, "failed to open output file %s\n", temp); + free(temp); + return(-1); + } + + am = xmlNewAutomata(); + if (am == NULL) { + xmlGenericError(xmlGenericErrorContext, + "Cannot create automata\n"); + fclose(input); + return(-1); + } + states[0] = xmlAutomataGetInitState(am); + if (states[0] == NULL) { + xmlGenericError(xmlGenericErrorContext, + "Cannot get start state\n"); + xmlFreeAutomata(am); + fclose(input); + return(-1); + } + ret = 0; + + while (fgets(expr, 4500, input) != NULL) { + if (expr[0] == '#') + continue; + len = strlen(expr); + len--; + while ((len >= 0) && + ((expr[len] == '\n') || (expr[len] == '\t') || + (expr[len] == '\r') || (expr[len] == ' '))) len--; + expr[len + 1] = 0; + if (len >= 0) { + if ((am != NULL) && (expr[0] == 't') && (expr[1] == ' ')) { + char *ptr = &expr[2]; + int from, to; + + from = scanNumber(&ptr); + if (*ptr != ' ') { + xmlGenericError(xmlGenericErrorContext, + "Bad line %s\n", expr); + break; + } + if (states[from] == NULL) + states[from] = xmlAutomataNewState(am); + ptr++; + to = scanNumber(&ptr); + if (*ptr != ' ') { + xmlGenericError(xmlGenericErrorContext, + "Bad line %s\n", expr); + break; + } + if (states[to] == NULL) + states[to] = xmlAutomataNewState(am); + ptr++; + xmlAutomataNewTransition(am, states[from], states[to], + BAD_CAST ptr, NULL); + } else if ((am != NULL) && (expr[0] == 'e') && (expr[1] == ' ')) { + char *ptr = &expr[2]; + int from, to; + + from = scanNumber(&ptr); + if (*ptr != ' ') { + xmlGenericError(xmlGenericErrorContext, + "Bad line %s\n", expr); + break; + } + if (states[from] == NULL) + states[from] = xmlAutomataNewState(am); + ptr++; + to = scanNumber(&ptr); + if (states[to] == NULL) + states[to] = xmlAutomataNewState(am); + xmlAutomataNewEpsilon(am, states[from], states[to]); + } else if ((am != NULL) && (expr[0] == 'f') && (expr[1] == ' ')) { + char *ptr = &expr[2]; + int state; + + state = scanNumber(&ptr); + if (states[state] == NULL) { + xmlGenericError(xmlGenericErrorContext, + "Bad state %d : %s\n", state, expr); + break; + } + xmlAutomataSetFinalState(am, states[state]); + } else if ((am != NULL) && (expr[0] == 'c') && (expr[1] == ' ')) { + char *ptr = &expr[2]; + int from, to; + int min, max; + + from = scanNumber(&ptr); + if (*ptr != ' ') { + xmlGenericError(xmlGenericErrorContext, + "Bad line %s\n", expr); + break; + } + if (states[from] == NULL) + states[from] = xmlAutomataNewState(am); + ptr++; + to = scanNumber(&ptr); + if (*ptr != ' ') { + xmlGenericError(xmlGenericErrorContext, + "Bad line %s\n", expr); + break; + } + if (states[to] == NULL) + states[to] = xmlAutomataNewState(am); + ptr++; + min = scanNumber(&ptr); + if (*ptr != ' ') { + xmlGenericError(xmlGenericErrorContext, + "Bad line %s\n", expr); + break; + } + ptr++; + max = scanNumber(&ptr); + if (*ptr != ' ') { + xmlGenericError(xmlGenericErrorContext, + "Bad line %s\n", expr); + break; + } + ptr++; + xmlAutomataNewCountTrans(am, states[from], states[to], + BAD_CAST ptr, min, max, NULL); + } else if ((am != NULL) && (expr[0] == '-') && (expr[1] == '-')) { + /* end of the automata */ + regexp = xmlAutomataCompile(am); + xmlFreeAutomata(am); + am = NULL; + if (regexp == NULL) { + xmlGenericError(xmlGenericErrorContext, + "Failed to compile the automata"); + break; + } + } else if ((expr[0] == '=') && (expr[1] == '>')) { + if (regexp == NULL) { + fprintf(output, "=> failed not compiled\n"); + } else { + if (exec == NULL) + exec = xmlRegNewExecCtxt(regexp, NULL, NULL); + if (ret == 0) { + ret = xmlRegExecPushString(exec, NULL, NULL); + } + if (ret == 1) + fprintf(output, "=> Passed\n"); + else if ((ret == 0) || (ret == -1)) + fprintf(output, "=> Failed\n"); + else if (ret < 0) + fprintf(output, "=> Error\n"); + xmlRegFreeExecCtxt(exec); + exec = NULL; + } + ret = 0; + } else if (regexp != NULL) { + if (exec == NULL) + exec = xmlRegNewExecCtxt(regexp, NULL, NULL); + ret = xmlRegExecPushString(exec, BAD_CAST expr, NULL); + } else { + xmlGenericError(xmlGenericErrorContext, + "Unexpected line %s\n", expr); + } + } + } + fclose(output); + fclose(input); + if (regexp != NULL) + xmlRegFreeRegexp(regexp); + if (exec != NULL) + xmlRegFreeExecCtxt(exec); + if (am != NULL) + xmlFreeAutomata(am); + + ret = compareFiles(temp, result); + if (ret) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + res = 1; + } + if (temp != NULL) { + unlink(temp); + free(temp); + } + + return(res); +} + +#endif /* LIBXML_AUTOMATA_ENABLED */ /************************************************************************ * * @@ -4608,6 +4849,11 @@ testDesc testDescriptions[] = { regexpTest, "./test/regexp/*", "result/regexp/", "", ".err", 0 }, #endif +#if defined(LIBXML_AUTOMATA_ENABLED) + { "Automata regression tests" , + automataTest, "./test/automata/*", "result/automata/", "", NULL, + 0 }, +#endif {NULL, NULL, NULL, NULL, NULL, NULL, 0} }; diff --git a/testAutomata.c b/testAutomata.c deleted file mode 100644 index 8d3cb27a..00000000 --- a/testAutomata.c +++ /dev/null @@ -1,309 +0,0 @@ -/* - * testAutomata.c: simple module for testing regexp automata - * - * See Copyright for the status of this software. - * - * Daniel Veillard <veillard@redhat.com> - */ - -#include "libxml.h" -#ifdef LIBXML_AUTOMATA_ENABLED -#include <string.h> - -#include <libxml/tree.h> -#include <libxml/xmlautomata.h> - -static int scanNumber(char **ptr) { - int ret = 0; - char *cur; - - cur = *ptr; - while ((*cur >= '0') && (*cur <= '9')) { - ret = ret * 10 + (*cur - '0'); - cur++; - } - *ptr = cur; - return(ret); -} - -static void -testRegexpFile(const char *filename) { - FILE *input; - char expr[5000]; - int len; - int ret; - int i; - xmlAutomataPtr am; - xmlAutomataStatePtr states[1000]; - xmlRegexpPtr regexp = NULL; - xmlRegExecCtxtPtr exec = NULL; - - for (i = 0;i<1000;i++) - states[i] = NULL; - - input = fopen(filename, "rb"); - if (input == NULL) { - xmlGenericError(xmlGenericErrorContext, - "Cannot open %s for reading\n", filename); - return; - } - - am = xmlNewAutomata(); - if (am == NULL) { - xmlGenericError(xmlGenericErrorContext, - "Cannot create automata\n"); - fclose(input); - return; - } - states[0] = xmlAutomataGetInitState(am); - if (states[0] == NULL) { - xmlGenericError(xmlGenericErrorContext, - "Cannot get start state\n"); - xmlFreeAutomata(am); - fclose(input); - return; - } - ret = 0; - - while (fgets(expr, 4500, input) != NULL) { - if (expr[0] == '#') - continue; - len = strlen(expr); - len--; - while ((len >= 0) && - ((expr[len] == '\n') || (expr[len] == '\t') || - (expr[len] == '\r') || (expr[len] == ' '))) len--; - expr[len + 1] = 0; - if (len >= 0) { - if ((am != NULL) && (expr[0] == 't') && (expr[1] == ' ')) { - char *ptr = &expr[2]; - int from, to; - - from = scanNumber(&ptr); - if (*ptr != ' ') { - xmlGenericError(xmlGenericErrorContext, - "Bad line %s\n", expr); - break; - } - if (states[from] == NULL) - states[from] = xmlAutomataNewState(am); - ptr++; - to = scanNumber(&ptr); - if (*ptr != ' ') { - xmlGenericError(xmlGenericErrorContext, - "Bad line %s\n", expr); - break; - } - if (states[to] == NULL) - states[to] = xmlAutomataNewState(am); - ptr++; - xmlAutomataNewTransition(am, states[from], states[to], - BAD_CAST ptr, NULL); - } else if ((am != NULL) && (expr[0] == 'e') && (expr[1] == ' ')) { - char *ptr = &expr[2]; - int from, to; - - from = scanNumber(&ptr); - if (*ptr != ' ') { - xmlGenericError(xmlGenericErrorContext, - "Bad line %s\n", expr); - break; - } - if (states[from] == NULL) - states[from] = xmlAutomataNewState(am); - ptr++; - to = scanNumber(&ptr); - if (states[to] == NULL) - states[to] = xmlAutomataNewState(am); - xmlAutomataNewEpsilon(am, states[from], states[to]); - } else if ((am != NULL) && (expr[0] == 'f') && (expr[1] == ' ')) { - char *ptr = &expr[2]; - int state; - - state = scanNumber(&ptr); - if (states[state] == NULL) { - xmlGenericError(xmlGenericErrorContext, - "Bad state %d : %s\n", state, expr); - break; - } - xmlAutomataSetFinalState(am, states[state]); - } else if ((am != NULL) && (expr[0] == 'c') && (expr[1] == ' ')) { - char *ptr = &expr[2]; - int from, to; - int min, max; - - from = scanNumber(&ptr); - if (*ptr != ' ') { - xmlGenericError(xmlGenericErrorContext, - "Bad line %s\n", expr); - break; - } - if (states[from] == NULL) - states[from] = xmlAutomataNewState(am); - ptr++; - to = scanNumber(&ptr); - if (*ptr != ' ') { - xmlGenericError(xmlGenericErrorContext, - "Bad line %s\n", expr); - break; - } - if (states[to] == NULL) - states[to] = xmlAutomataNewState(am); - ptr++; - min = scanNumber(&ptr); - if (*ptr != ' ') { - xmlGenericError(xmlGenericErrorContext, - "Bad line %s\n", expr); - break; - } - ptr++; - max = scanNumber(&ptr); - if (*ptr != ' ') { - xmlGenericError(xmlGenericErrorContext, - "Bad line %s\n", expr); - break; - } - ptr++; - xmlAutomataNewCountTrans(am, states[from], states[to], - BAD_CAST ptr, min, max, NULL); - } else if ((am != NULL) && (expr[0] == '-') && (expr[1] == '-')) { - /* end of the automata */ - regexp = xmlAutomataCompile(am); - xmlFreeAutomata(am); - am = NULL; - if (regexp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "Failed to compile the automata"); - break; - } - } else if ((expr[0] == '=') && (expr[1] == '>')) { - if (regexp == NULL) { - printf("=> failed not compiled\n"); - } else { - if (exec == NULL) - exec = xmlRegNewExecCtxt(regexp, NULL, NULL); - if (ret == 0) { - ret = xmlRegExecPushString(exec, NULL, NULL); - } - if (ret == 1) - printf("=> Passed\n"); - else if ((ret == 0) || (ret == -1)) - printf("=> Failed\n"); - else if (ret < 0) - printf("=> Error\n"); - xmlRegFreeExecCtxt(exec); - exec = NULL; - } - ret = 0; - } else if (regexp != NULL) { - if (exec == NULL) - exec = xmlRegNewExecCtxt(regexp, NULL, NULL); - ret = xmlRegExecPushString(exec, BAD_CAST expr, NULL); - } else { - xmlGenericError(xmlGenericErrorContext, - "Unexpected line %s\n", expr); - } - } - } - fclose(input); - if (regexp != NULL) - xmlRegFreeRegexp(regexp); - if (exec != NULL) - xmlRegFreeExecCtxt(exec); - if (am != NULL) - xmlFreeAutomata(am); -} - -int main(int argc, char **argv) { - - xmlInitParser(); - - if (argc == 1) { - int ret; - xmlAutomataPtr am; - xmlAutomataStatePtr start, cur; - xmlRegexpPtr regexp; - xmlRegExecCtxtPtr exec; - - am = xmlNewAutomata(); - start = xmlAutomataGetInitState(am); - - /* generate a[ba]*a */ - cur = xmlAutomataNewTransition(am, start, NULL, BAD_CAST"a", NULL); - xmlAutomataNewTransition(am, cur, cur, BAD_CAST"b", NULL); - xmlAutomataNewTransition(am, cur, cur, BAD_CAST"a", NULL); - cur = xmlAutomataNewCountTrans(am, cur, NULL, BAD_CAST"a", 2, 3, NULL); - xmlAutomataSetFinalState(am, cur); - - /* compile it in a regexp and free the automata */ - regexp = xmlAutomataCompile(am); - xmlFreeAutomata(am); - - /* test the regexp */ - xmlRegexpPrint(stdout, regexp); - exec = xmlRegNewExecCtxt(regexp, NULL, NULL); - ret = xmlRegExecPushString(exec, BAD_CAST"a", NULL); - if (ret == 1) - printf("final\n"); - else if (ret < 0) - printf("error\n"); - ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); - if (ret == 1) - printf("final\n"); - else if (ret < 0) - printf("error\n"); - ret =xmlRegExecPushString(exec, BAD_CAST"b", NULL); - if (ret == 1) - printf("final\n"); - else if (ret < 0) - printf("error\n"); - ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); - if (ret == 1) - printf("final\n"); - else if (ret < 0) - printf("error\n"); - ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); - if (ret == 1) - printf("final\n"); - else if (ret < 0) - printf("error\n"); - ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); - if (ret == 1) - printf("final\n"); - else if (ret < 0) - printf("error\n"); - ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); - if (ret == 1) - printf("final\n"); - else if (ret < 0) - printf("error\n"); - if (ret == 0) { - ret = xmlRegExecPushString(exec, NULL, NULL); - if (ret == 1) - printf("final\n"); - else if (ret < 0) - printf("error\n"); - } - xmlRegFreeExecCtxt(exec); - - /* free the regexp */ - xmlRegFreeRegexp(regexp); - } else { - int i; - - for (i = 1;i < argc;i++) - testRegexpFile(argv[i]); - } - - xmlCleanupParser(); - xmlMemoryDump(); - return(0); -} - -#else -#include <stdio.h> -int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { - printf("%s : Automata support not compiled in\n", argv[0]); - return(0); -} -#endif /* LIBXML_AUTOMATA_ENABLED */ diff --git a/win32/Makefile.bcb b/win32/Makefile.bcb index 1064b807..43b5ab95 100644 --- a/win32/Makefile.bcb +++ b/win32/Makefile.bcb @@ -205,7 +205,6 @@ XML_OBJS_A = $(XML_INTDIR_A)\buf.obj\ # Xmllint and friends executables. UTILS = $(BINDIR)\xmllint.exe\ $(BINDIR)\xmlcatalog.exe\ - $(BINDIR)\testAutomata.exe\ $(BINDIR)\testModule.exe\ $(BINDIR)\runtest.exe\ $(BINDIR)\runsuite.exe\ diff --git a/win32/Makefile.mingw b/win32/Makefile.mingw index 81f261bc..b10738d2 100644 --- a/win32/Makefile.mingw +++ b/win32/Makefile.mingw @@ -201,7 +201,6 @@ XML_SRCS_A = $(subst .o,.c,$(subst $(XML_INTDIR_A)/,$(XML_SRCDIR)/,$(XML_OBJS_A) # Xmllint and friends executables. UTILS = $(BINDIR)/xmllint.exe\ $(BINDIR)/xmlcatalog.exe\ - $(BINDIR)/testAutomata.exe\ $(BINDIR)/testModule.exe\ $(BINDIR)/runtest.exe\ $(BINDIR)/runsuite.exe\ diff --git a/win32/Makefile.msvc b/win32/Makefile.msvc index 80e64e22..bd3e2ec1 100644 --- a/win32/Makefile.msvc +++ b/win32/Makefile.msvc @@ -255,7 +255,6 @@ XML_OBJS_A_DLL = $(XML_OBJS_A_DLL) $(XML_INTDIR_A_DLL)\xzlib.obj # Xmllint and friends executables. UTILS = $(BINDIR)\xmllint.exe\ $(BINDIR)\xmlcatalog.exe\ - $(BINDIR)\testAutomata.exe\ $(BINDIR)\testModule.exe\ $(BINDIR)\runtest.exe\ $(BINDIR)\runsuite.exe\ |