svn commit: r223910 - in
user/gabor/tre-integration/tools/test/regex: . regmatch tests
Gabor Kovesdan
gabor at FreeBSD.org
Sun Jul 10 16:05:51 UTC 2011
Author: gabor
Date: Sun Jul 10 16:05:51 2011
New Revision: 223910
URL: http://svn.freebsd.org/changeset/base/223910
Log:
- Add a small test program and Makefile to test standard-conformance of the
regex code. It uses a simple file format to store a string, a pattern and
the expected matching offsets. The expected matches are compared to the
actual ones.
Added:
user/gabor/tre-integration/tools/test/regex/
user/gabor/tre-integration/tools/test/regex/Makefile (contents, props changed)
user/gabor/tre-integration/tools/test/regex/regmatch/
user/gabor/tre-integration/tools/test/regex/regmatch/Makefile (contents, props changed)
user/gabor/tre-integration/tools/test/regex/regmatch/regmatch.c (contents, props changed)
user/gabor/tre-integration/tools/test/regex/tests/
user/gabor/tre-integration/tools/test/regex/tests/basic.tests
Added: user/gabor/tre-integration/tools/test/regex/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gabor/tre-integration/tools/test/regex/Makefile Sun Jul 10 16:05:51 2011 (r223910)
@@ -0,0 +1,23 @@
+# $FreeBSD$
+
+SUBDIR= regmatch
+
+TESTS=basic.tests
+
+test: regmatch
+.for t in ${TESTS}
+ @echo "=== Running test ${t} ==="
+ @for l in `cat tests/${t} | grep -ve '^#'`; do \
+ str=`echo $${l} | cut -d \; -f 2`; \
+ pat=`echo $${l} | cut -d \; -f 1`; \
+ match=`echo $${l} | cut -d \; -f 3`; \
+ result=`./regmatch/regmatch $${pat} $${str}`; \
+ if [ "$${match}" != "$${result}" ]; then \
+ echo "Failed matching pattern $${pat} to string $${str}"; \
+ else \
+ echo "PASSED matching pattern $${pat} to string $${str}"; \
+ fi \
+ done
+.endfor
+
+.include <bsd.prog.mk>
Added: user/gabor/tre-integration/tools/test/regex/regmatch/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gabor/tre-integration/tools/test/regex/regmatch/Makefile Sun Jul 10 16:05:51 2011 (r223910)
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+PROG= regmatch
+NO_MAN= yes
+
+WARNS?= 6
+
+.include <bsd.prog.mk>
Added: user/gabor/tre-integration/tools/test/regex/regmatch/regmatch.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gabor/tre-integration/tools/test/regex/regmatch/regmatch.c Sun Jul 10 16:05:51 2011 (r223910)
@@ -0,0 +1,51 @@
+#include <err.h>
+#include <regex.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void
+usage(void)
+{
+ printf("Usage: %s pattern string\n", getprogname());
+ exit(EXIT_FAILURE);
+}
+
+int
+main(int argc, char *argv[])
+{
+ regex_t pattern;
+ regmatch_t pmatch;
+ ssize_t len;
+ int cflags = 0, ret;
+ int eflags = REG_STARTEND;
+
+ if (argc != 3)
+ usage();
+
+ ret = regcomp(&pattern, argv[1], cflags);
+ if (ret != 0)
+ errx(1, NULL);
+
+ len = strlen(argv[2]);
+ pmatch.rm_so = 0;
+ pmatch.rm_eo = len;
+ putchar('(');
+ for (bool first = true;;) {
+ ret = regexec(&pattern, argv[2], 1, &pmatch, eflags);
+ if (ret == REG_NOMATCH)
+ break;
+ if (!first)
+ putchar(',');
+ printf("(%lu,%lu)", (unsigned long)pmatch.rm_so,
+ (unsigned long)pmatch.rm_eo);
+ if (pmatch.rm_eo == len)
+ break;
+ pmatch.rm_so = pmatch.rm_eo;
+ pmatch.rm_eo = len;
+ first = false;
+ }
+ printf(")\n");
+ regfree(&pattern);
+}
Added: user/gabor/tre-integration/tools/test/regex/tests/basic.tests
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gabor/tre-integration/tools/test/regex/tests/basic.tests Sun Jul 10 16:05:51 2011 (r223910)
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+foo;foobarfoobar;((0,3),(6,9))
More information about the svn-src-user
mailing list