diff options
author | Peter A. Bigot <pabigot@users.sourceforge.net> | 2010-05-27 16:13:47 -0500 |
---|---|---|
committer | Peter A. Bigot <pabigot@users.sourceforge.net> | 2010-05-28 09:07:51 -0500 |
commit | 8057488cc1a7a8f7af53472f23214716bf45cd01 (patch) | |
tree | 570364115605e3e71297a81ce630e8f8cea1777b | |
parent | 731278c613475d87d1488a0b6061898e82144704 (diff) |
Test program, confirms parse time is exponential in length
-rw-r--r-- | tests/trac/trac-33/tread.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/trac/trac-33/tread.py b/tests/trac/trac-33/tread.py new file mode 100644 index 0000000..5eb7d79 --- /dev/null +++ b/tests/trac/trac-33/tread.py @@ -0,0 +1,47 @@ +import time +import pyxb.binding.generate +import pyxb.utils.domutils + +max_reps = 20 + +def buildTest (num_reps, constraint='minOccurs="0" maxOccurs="1"'): + edefs = [] + cdefs = [] + duse = [] + for r in xrange(num_reps): + edefs.append('<xs:element name="rep%d" type="xs:string"/>' % (r,)) + cdefs.append('<xs:element ref="rep%d" %s/>' % (r, constraint)) + duse.append('<rep%d>text</rep%d>' % (r, r)) + + schema = ''.join([ '''<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">''', + "\n".join(edefs), + '''<xs:element name="collection"> +<xs:complexType><xs:sequence>''', + "\n".join(cdefs), + '''</xs:sequence></xs:complexType> +</xs:element> +</xs:schema>''' ]) + + xmls = '<collection>' + ''.join(duse) + '</collection>' + + return (schema, xmls) + +for size in xrange(1, max_reps): + (schema, xmls) = buildTest(size) + + t0 = time.time() + code = pyxb.binding.generate.GeneratePython(schema_text=schema) + t1 = time.time() + rv = compile(code, 'test', 'exec') + t2 = time.time() + eval(rv) + t3 = time.time() + ct0 = time.time() + doc = CreateFromDocument(xmls) + ct1 = time.time() + + print "%d gen=%g cpl=%g ld=%g prs=%g" % (size, t1 - t0, t2 - t1, t3 - t2, ct1 - ct0) + #file('code.py', 'w').write(code) + + |