Simple test of operator overload. -builtin should shine in this test.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/szager-python-builtin@12451 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
3852ca8f44
commit
6bfc86dee7
9 changed files with 341 additions and 0 deletions
23
Examples/python/performance/operator/Makefile
Normal file
23
Examples/python/performance/operator/Makefile
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
TOP = ../../..
|
||||||
|
SWIG = $(TOP)/../preinst-swig
|
||||||
|
CXXSRCS =
|
||||||
|
TARGET = Simple
|
||||||
|
INTERFACE = Simple.i
|
||||||
|
|
||||||
|
default : all
|
||||||
|
|
||||||
|
all :
|
||||||
|
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG) -module Simple_baseline' \
|
||||||
|
TARGET='$(TARGET)_baseline' INTERFACE='$(INTERFACE)' python_cpp
|
||||||
|
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG) -O -module Simple_optimized' \
|
||||||
|
TARGET='$(TARGET)_optimized' INTERFACE='$(INTERFACE)' python_cpp
|
||||||
|
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG) -builtin -O -module Simple_builtin' \
|
||||||
|
TARGET='$(TARGET)_builtin' INTERFACE='$(INTERFACE)' python_cpp
|
||||||
|
|
||||||
|
static :
|
||||||
|
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
|
||||||
|
TARGET='mypython' INTERFACE='$(INTERFACE)' python_cpp_static
|
||||||
|
|
||||||
|
clean :
|
||||||
|
$(MAKE) -f $(TOP)/Makefile python_clean
|
||||||
|
rm -f $(TARGET).py
|
||||||
8
Examples/python/performance/operator/Simple.i
Normal file
8
Examples/python/performance/operator/Simple.i
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
%inline %{
|
||||||
|
class MyClass {
|
||||||
|
public:
|
||||||
|
MyClass () {}
|
||||||
|
~MyClass () {}
|
||||||
|
MyClass& operator+ (int i) { return *this; }
|
||||||
|
};
|
||||||
|
%}
|
||||||
86
Examples/python/performance/operator/Simple_baseline.py
Normal file
86
Examples/python/performance/operator/Simple_baseline.py
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
# This file was automatically generated by SWIG (http://www.swig.org).
|
||||||
|
# Version 2.0.2
|
||||||
|
#
|
||||||
|
# Do not make changes to this file unless you know what you are doing--modify
|
||||||
|
# the SWIG interface file instead.
|
||||||
|
# This file is compatible with both classic and new-style classes.
|
||||||
|
|
||||||
|
from sys import version_info
|
||||||
|
if version_info >= (2,6,0):
|
||||||
|
def swig_import_helper():
|
||||||
|
from os.path import dirname
|
||||||
|
import imp
|
||||||
|
fp = None
|
||||||
|
try:
|
||||||
|
fp, pathname, description = imp.find_module('_Simple_baseline', [dirname(__file__)])
|
||||||
|
except ImportError:
|
||||||
|
import _Simple_baseline
|
||||||
|
return _Simple_baseline
|
||||||
|
if fp is not None:
|
||||||
|
try:
|
||||||
|
_mod = imp.load_module('_Simple_baseline', fp, pathname, description)
|
||||||
|
finally:
|
||||||
|
fp.close()
|
||||||
|
return _mod
|
||||||
|
_Simple_baseline = swig_import_helper()
|
||||||
|
del swig_import_helper
|
||||||
|
else:
|
||||||
|
import _Simple_baseline
|
||||||
|
del version_info
|
||||||
|
try:
|
||||||
|
_swig_property = property
|
||||||
|
except NameError:
|
||||||
|
pass # Python < 2.2 doesn't have 'property'.
|
||||||
|
def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
|
||||||
|
if (name == "thisown"): return self.this.own(value)
|
||||||
|
if (name == "this"):
|
||||||
|
if type(value).__name__ == 'SwigPyObject':
|
||||||
|
self.__dict__[name] = value
|
||||||
|
return
|
||||||
|
method = class_type.__swig_setmethods__.get(name,None)
|
||||||
|
if method: return method(self,value)
|
||||||
|
if (not static) or hasattr(self,name):
|
||||||
|
self.__dict__[name] = value
|
||||||
|
else:
|
||||||
|
raise AttributeError("You cannot add attributes to %s" % self)
|
||||||
|
|
||||||
|
def _swig_setattr(self,class_type,name,value):
|
||||||
|
return _swig_setattr_nondynamic(self,class_type,name,value,0)
|
||||||
|
|
||||||
|
def _swig_getattr(self,class_type,name):
|
||||||
|
if (name == "thisown"): return self.this.own()
|
||||||
|
method = class_type.__swig_getmethods__.get(name,None)
|
||||||
|
if method: return method(self)
|
||||||
|
raise AttributeError(name)
|
||||||
|
|
||||||
|
def _swig_repr(self):
|
||||||
|
try: strthis = "proxy of " + self.this.__repr__()
|
||||||
|
except: strthis = ""
|
||||||
|
return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
|
||||||
|
|
||||||
|
try:
|
||||||
|
_object = object
|
||||||
|
_newclass = 1
|
||||||
|
except AttributeError:
|
||||||
|
class _object : pass
|
||||||
|
_newclass = 0
|
||||||
|
|
||||||
|
|
||||||
|
class MyClass(_object):
|
||||||
|
__swig_setmethods__ = {}
|
||||||
|
__setattr__ = lambda self, name, value: _swig_setattr(self, MyClass, name, value)
|
||||||
|
__swig_getmethods__ = {}
|
||||||
|
__getattr__ = lambda self, name: _swig_getattr(self, MyClass, name)
|
||||||
|
__repr__ = _swig_repr
|
||||||
|
def __init__(self):
|
||||||
|
this = _Simple_baseline.new_MyClass()
|
||||||
|
try: self.this.append(this)
|
||||||
|
except: self.this = this
|
||||||
|
__swig_destroy__ = _Simple_baseline.delete_MyClass
|
||||||
|
__del__ = lambda self : None;
|
||||||
|
def __add__(self, *args): return _Simple_baseline.MyClass___add__(self, *args)
|
||||||
|
MyClass_swigregister = _Simple_baseline.MyClass_swigregister
|
||||||
|
MyClass_swigregister(MyClass)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
81
Examples/python/performance/operator/Simple_builtin.py
Normal file
81
Examples/python/performance/operator/Simple_builtin.py
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
# This file was automatically generated by SWIG (http://www.swig.org).
|
||||||
|
# Version 2.0.2
|
||||||
|
#
|
||||||
|
# Do not make changes to this file unless you know what you are doing--modify
|
||||||
|
# the SWIG interface file instead.
|
||||||
|
|
||||||
|
from sys import version_info
|
||||||
|
if version_info >= (2,6,0):
|
||||||
|
def swig_import_helper():
|
||||||
|
from os.path import dirname
|
||||||
|
import imp
|
||||||
|
fp = None
|
||||||
|
try:
|
||||||
|
fp, pathname, description = imp.find_module('_Simple_builtin', [dirname(__file__)])
|
||||||
|
except ImportError:
|
||||||
|
import _Simple_builtin
|
||||||
|
return _Simple_builtin
|
||||||
|
if fp is not None:
|
||||||
|
try:
|
||||||
|
_mod = imp.load_module('_Simple_builtin', fp, pathname, description)
|
||||||
|
finally:
|
||||||
|
fp.close()
|
||||||
|
return _mod
|
||||||
|
_Simple_builtin = swig_import_helper()
|
||||||
|
del swig_import_helper
|
||||||
|
else:
|
||||||
|
import _Simple_builtin
|
||||||
|
del version_info
|
||||||
|
from _Simple_builtin import *
|
||||||
|
try:
|
||||||
|
_swig_property = property
|
||||||
|
except NameError:
|
||||||
|
pass # Python < 2.2 doesn't have 'property'.
|
||||||
|
def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
|
||||||
|
if (name == "thisown"): return self.this.own(value)
|
||||||
|
if (name == "this"):
|
||||||
|
if type(value).__name__ == 'SwigPyObject':
|
||||||
|
self.__dict__[name] = value
|
||||||
|
return
|
||||||
|
method = class_type.__swig_setmethods__.get(name,None)
|
||||||
|
if method: return method(self,value)
|
||||||
|
if (not static) or hasattr(self,name):
|
||||||
|
self.__dict__[name] = value
|
||||||
|
else:
|
||||||
|
raise AttributeError("You cannot add attributes to %s" % self)
|
||||||
|
|
||||||
|
def _swig_setattr(self,class_type,name,value):
|
||||||
|
return _swig_setattr_nondynamic(self,class_type,name,value,0)
|
||||||
|
|
||||||
|
def _swig_getattr(self,class_type,name):
|
||||||
|
if (name == "thisown"): return self.this.own()
|
||||||
|
method = class_type.__swig_getmethods__.get(name,None)
|
||||||
|
if method: return method(self)
|
||||||
|
raise AttributeError(name)
|
||||||
|
|
||||||
|
def _swig_repr(self):
|
||||||
|
try: strthis = "proxy of " + self.this.__repr__()
|
||||||
|
except: strthis = ""
|
||||||
|
return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
|
||||||
|
|
||||||
|
try:
|
||||||
|
_object = object
|
||||||
|
_newclass = 1
|
||||||
|
except AttributeError:
|
||||||
|
class _object : pass
|
||||||
|
_newclass = 0
|
||||||
|
|
||||||
|
|
||||||
|
def _swig_setattr_nondynamic_method(set):
|
||||||
|
def set_attr(self,name,value):
|
||||||
|
if (name == "thisown"): return self.this.own(value)
|
||||||
|
if hasattr(self,name) or (name == "this"):
|
||||||
|
set(self,name,value)
|
||||||
|
else:
|
||||||
|
raise AttributeError("You cannot add attributes to %s" % self)
|
||||||
|
return set_attr
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
93
Examples/python/performance/operator/Simple_optimized.py
Normal file
93
Examples/python/performance/operator/Simple_optimized.py
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
# This file was automatically generated by SWIG (http://www.swig.org).
|
||||||
|
# Version 2.0.2
|
||||||
|
#
|
||||||
|
# Do not make changes to this file unless you know what you are doing--modify
|
||||||
|
# the SWIG interface file instead.
|
||||||
|
|
||||||
|
from sys import version_info
|
||||||
|
if version_info >= (3,0,0):
|
||||||
|
new_instancemethod = lambda func, inst, cls: _Simple_optimized.SWIG_PyInstanceMethod_New(func)
|
||||||
|
else:
|
||||||
|
from new import instancemethod as new_instancemethod
|
||||||
|
if version_info >= (2,6,0):
|
||||||
|
def swig_import_helper():
|
||||||
|
from os.path import dirname
|
||||||
|
import imp
|
||||||
|
fp = None
|
||||||
|
try:
|
||||||
|
fp, pathname, description = imp.find_module('_Simple_optimized', [dirname(__file__)])
|
||||||
|
except ImportError:
|
||||||
|
import _Simple_optimized
|
||||||
|
return _Simple_optimized
|
||||||
|
if fp is not None:
|
||||||
|
try:
|
||||||
|
_mod = imp.load_module('_Simple_optimized', fp, pathname, description)
|
||||||
|
finally:
|
||||||
|
fp.close()
|
||||||
|
return _mod
|
||||||
|
_Simple_optimized = swig_import_helper()
|
||||||
|
del swig_import_helper
|
||||||
|
else:
|
||||||
|
import _Simple_optimized
|
||||||
|
del version_info
|
||||||
|
try:
|
||||||
|
_swig_property = property
|
||||||
|
except NameError:
|
||||||
|
pass # Python < 2.2 doesn't have 'property'.
|
||||||
|
def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
|
||||||
|
if (name == "thisown"): return self.this.own(value)
|
||||||
|
if (name == "this"):
|
||||||
|
if type(value).__name__ == 'SwigPyObject':
|
||||||
|
self.__dict__[name] = value
|
||||||
|
return
|
||||||
|
method = class_type.__swig_setmethods__.get(name,None)
|
||||||
|
if method: return method(self,value)
|
||||||
|
if (not static) or hasattr(self,name):
|
||||||
|
self.__dict__[name] = value
|
||||||
|
else:
|
||||||
|
raise AttributeError("You cannot add attributes to %s" % self)
|
||||||
|
|
||||||
|
def _swig_setattr(self,class_type,name,value):
|
||||||
|
return _swig_setattr_nondynamic(self,class_type,name,value,0)
|
||||||
|
|
||||||
|
def _swig_getattr(self,class_type,name):
|
||||||
|
if (name == "thisown"): return self.this.own()
|
||||||
|
method = class_type.__swig_getmethods__.get(name,None)
|
||||||
|
if method: return method(self)
|
||||||
|
raise AttributeError(name)
|
||||||
|
|
||||||
|
def _swig_repr(self):
|
||||||
|
try: strthis = "proxy of " + self.this.__repr__()
|
||||||
|
except: strthis = ""
|
||||||
|
return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
|
||||||
|
|
||||||
|
try:
|
||||||
|
_object = object
|
||||||
|
_newclass = 1
|
||||||
|
except AttributeError:
|
||||||
|
class _object : pass
|
||||||
|
_newclass = 0
|
||||||
|
|
||||||
|
|
||||||
|
def _swig_setattr_nondynamic_method(set):
|
||||||
|
def set_attr(self,name,value):
|
||||||
|
if (name == "thisown"): return self.this.own(value)
|
||||||
|
if hasattr(self,name) or (name == "this"):
|
||||||
|
set(self,name,value)
|
||||||
|
else:
|
||||||
|
raise AttributeError("You cannot add attributes to %s" % self)
|
||||||
|
return set_attr
|
||||||
|
|
||||||
|
|
||||||
|
class MyClass(object):
|
||||||
|
thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
|
||||||
|
__repr__ = _swig_repr
|
||||||
|
def __init__(self):
|
||||||
|
_Simple_optimized.MyClass_swiginit(self,_Simple_optimized.new_MyClass())
|
||||||
|
__swig_destroy__ = _Simple_optimized.delete_MyClass
|
||||||
|
MyClass.__add__ = new_instancemethod(_Simple_optimized.MyClass___add__,None,MyClass)
|
||||||
|
MyClass_swigregister = _Simple_optimized.MyClass_swigregister
|
||||||
|
MyClass_swigregister(MyClass)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
17
Examples/python/performance/operator/runme.py
Normal file
17
Examples/python/performance/operator/runme.py
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/usr/bin/env
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from subprocess import *
|
||||||
|
|
||||||
|
proc = Popen([sys.executable, 'runme_baseline.py'], stdout=PIPE)
|
||||||
|
(stdout, stderr) = proc.communicate()
|
||||||
|
print stdout
|
||||||
|
|
||||||
|
proc = Popen([sys.executable, 'runme_optimized.py'], stdout=PIPE)
|
||||||
|
(stdout, stderr) = proc.communicate()
|
||||||
|
print stdout
|
||||||
|
|
||||||
|
proc = Popen([sys.executable, 'runme_builtin.py'], stdout=PIPE)
|
||||||
|
(stdout, stderr) = proc.communicate()
|
||||||
|
print stdout
|
||||||
|
|
||||||
11
Examples/python/performance/operator/runme_baseline.py
Normal file
11
Examples/python/performance/operator/runme_baseline.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import Simple_baseline
|
||||||
|
import time
|
||||||
|
|
||||||
|
t1 = time.clock()
|
||||||
|
x = Simple_baseline.MyClass()
|
||||||
|
for i in range(10000000) :
|
||||||
|
x = x + i
|
||||||
|
t2 = time.clock()
|
||||||
|
print "Simple_baseline took %f seconds" % (t2 - t1)
|
||||||
11
Examples/python/performance/operator/runme_builtin.py
Normal file
11
Examples/python/performance/operator/runme_builtin.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import Simple_builtin
|
||||||
|
import time
|
||||||
|
|
||||||
|
t1 = time.clock()
|
||||||
|
x = Simple_builtin.MyClass()
|
||||||
|
for i in range(10000000) :
|
||||||
|
x = x + i
|
||||||
|
t2 = time.clock()
|
||||||
|
print "Simple_builtin took %f seconds" % (t2 - t1)
|
||||||
11
Examples/python/performance/operator/runme_optimized.py
Normal file
11
Examples/python/performance/operator/runme_optimized.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import Simple_optimized
|
||||||
|
import time
|
||||||
|
|
||||||
|
t1 = time.clock()
|
||||||
|
x = Simple_optimized.MyClass()
|
||||||
|
for i in range(10000000) :
|
||||||
|
x = x + i
|
||||||
|
t2 = time.clock()
|
||||||
|
print "Simple_optimized took %f seconds" % (t2 - t1)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue