summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter A. Bigot <pabigot@users.sourceforge.net>2010-05-27 16:13:47 -0500
committerPeter A. Bigot <pabigot@users.sourceforge.net>2010-05-28 09:07:51 -0500
commit8057488cc1a7a8f7af53472f23214716bf45cd01 (patch)
tree570364115605e3e71297a81ce630e8f8cea1777b
parent731278c613475d87d1488a0b6061898e82144704 (diff)
Test program, confirms parse time is exponential in length
-rw-r--r--tests/trac/trac-33/tread.py47
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)
+
+