# Twisted, the Framework of Your Internet
# Copyright (C) 2001-2002 Matthew W. Lefkowitz
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of version 2.1 of the GNU Lesser General Public
# License as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import cStringIO
import sys
import time
# Twisted Imports
from twisted.spread import banana
from twisted.internet import protocol
iterationCount = 10000
class BananaBench:
r = range( iterationCount )
def setUp(self, encClass):
self.io = cStringIO.StringIO()
self.enc = encClass()
self.enc.makeConnection(protocol.FileWrapper(self.io))
self.enc._selectDialect("none")
self.enc.expressionReceived = self.putResult
def putResult(self, result):
self.result = result
def tearDown(self):
self.enc.connectionLost()
del self.enc
def testEncode(self, value):
starttime = time.time()
for i in self.r:
self.enc.sendEncoded(value)
self.io.truncate(0)
endtime = time.time()
print ' Encode took %s seconds' % (endtime - starttime)
return endtime - starttime
def testDecode(self, value):
self.enc.sendEncoded(value)
encoded = self.io.getvalue()
starttime = time.time()
for i in self.r:
self.enc.dataReceived(encoded)
endtime = time.time()
print ' Decode took %s seconds' % (endtime - starttime)
return endtime - starttime
def performTest(self, method, data, encClass):
self.setUp(encClass)
method(data)
self.tearDown()
def runTests(self, testData):
print 'Test data is: %s' % testData
print ' Using Pure Python Banana:'
self.performTest(self.testEncode, testData, banana.Pynana)
self.performTest(self.testDecode, testData, banana.Pynana)
print ' Using Python/C Banana:'
self.performTest(self.testEncode, testData, banana.Canana)
self.performTest(self.testDecode, testData, banana.Canana)
bench = BananaBench()
print 'Doing %s iterations of each test.' % iterationCount
print ''
testData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
bench.runTests(testData)
testData = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
bench.runTests(testData)
testData = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
bench.runTests(testData)
testData = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
bench.runTests(testData)
testData = [1l, 2l, 3l, 4l, 5l, 6l, 7l, 8l, 9l, 10l]
bench.runTests(testData)
testData = [1, 2, [3, 4], [30.5, 40.2], 5, ["six", "seven", ["eight", 9]], [10], []]
bench.runTests(testData)
|