[pypy-svn] r23793 - in pypy/dist/pypy/rpython: ootypesystem test
nik at codespeak.net
nik at codespeak.net
Tue Feb 28 23:20:32 CET 2006
Author: nik
Date: Tue Feb 28 23:20:24 2006
New Revision: 23793
Modified:
pypy/dist/pypy/rpython/ootypesystem/ootype.py
pypy/dist/pypy/rpython/test/test_rpbc.py
Log:
(pedronis, nik)
enabled more tests for ootypesystem. found and fixed a failure related
to default values for StaticMethods. the default for StaticMethods is
now null.
Modified: pypy/dist/pypy/rpython/ootypesystem/ootype.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/ootype.py (original)
+++ pypy/dist/pypy/rpython/ootypesystem/ootype.py Tue Feb 28 23:20:24 2006
@@ -134,6 +134,9 @@
def _example(self):
_retval = self.RESULT._example()
return _static_meth(self, _callable=lambda *args: _retval)
+
+ def _defl(self):
+ return null(self)
class Meth(StaticMethod):
Modified: pypy/dist/pypy/rpython/test/test_rpbc.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rpbc.py (original)
+++ pypy/dist/pypy/rpython/test/test_rpbc.py Tue Feb 28 23:20:24 2006
@@ -214,124 +214,136 @@
res = interpret(f, [1], type_system=self.ts)
assert res is True
-def test_unbound_method():
- def f():
- inst = MySubclass()
- inst.z = 40
- return MyBase.m(inst, 2)
- res = interpret(f, [])
- assert res == 42
-
-def test_call_defaults():
- def g(a, b=2, c=3):
- return a+b+c
- def f1():
- return g(1)
- def f2():
- return g(1, 10)
- def f3():
- return g(1, 10, 100)
- res = interpret(f1, [])
- assert res == 1+2+3
- res = interpret(f2, [])
- assert res == 1+10+3
- res = interpret(f3, [])
- assert res == 1+10+100
-
-def test_call_memoized_function():
- fr1 = Freezing()
- fr2 = Freezing()
- def getorbuild(key):
- a = 1
- if key is fr1:
- result = eval("a+2")
- else:
- result = eval("a+6")
- return result
- getorbuild._annspecialcase_ = "specialize:memo"
-
- def f1(i):
- if i > 0:
- fr = fr1
- else:
- fr = fr2
- return getorbuild(fr)
-
- res = interpret(f1, [0])
- assert res == 7
- res = interpret(f1, [1])
- assert res == 3
-
-def test_call_memoized_function_with_bools():
- fr1 = Freezing()
- fr2 = Freezing()
- def getorbuild(key, flag1, flag2):
- a = 1
- if key is fr1:
- result = eval("a+2")
- else:
- result = eval("a+6")
- if flag1:
- result += 100
- if flag2:
- result += 1000
- return result
- getorbuild._annspecialcase_ = "specialize:memo"
-
- def f1(i):
- if i > 0:
- fr = fr1
- else:
- fr = fr2
- return getorbuild(fr, i % 2 == 0, i % 3 == 0)
-
- for n in [0, 1, 2, -3, 6]:
- res = interpret(f1, [n])
- assert res == f1(n)
-
-def test_call_memoized_cache():
-
- # this test checks that we add a separate field
- # per specialization and also it uses a subclass of
- # the standard pypy.tool.cache.Cache
-
- from pypy.tool.cache import Cache
- fr1 = Freezing()
- fr2 = Freezing()
-
- class Cache1(Cache):
- def _build(self, key):
- "NOT_RPYTHON"
+ def test_unbound_method(self):
+ def f():
+ inst = MySubclass()
+ inst.z = 40
+ return MyBase.m(inst, 2)
+ res = interpret(f, [], type_system=self.ts)
+ assert res == 42
+
+ def test_call_defaults(self):
+ def g(a, b=2, c=3):
+ return a+b+c
+ def f1():
+ return g(1)
+ def f2():
+ return g(1, 10)
+ def f3():
+ return g(1, 10, 100)
+ res = interpret(f1, [], type_system=self.ts)
+ assert res == 1+2+3
+ res = interpret(f2, [], type_system=self.ts)
+ assert res == 1+10+3
+ res = interpret(f3, [], type_system=self.ts)
+ assert res == 1+10+100
+
+ def test_call_memoized_function(self):
+ fr1 = Freezing()
+ fr2 = Freezing()
+ def getorbuild(key):
+ a = 1
if key is fr1:
- return fr2
+ result = eval("a+2")
else:
- return fr1
+ result = eval("a+6")
+ return result
+ getorbuild._annspecialcase_ = "specialize:memo"
- class Cache2(Cache):
- def _build(self, key):
- "NOT_RPYTHON"
+ def f1(i):
+ if i > 0:
+ fr = fr1
+ else:
+ fr = fr2
+ return getorbuild(fr)
+
+ res = interpret(f1, [0], type_system=self.ts)
+ assert res == 7
+ res = interpret(f1, [1], type_system=self.ts)
+ assert res == 3
+
+ def test_call_memoized_function_with_bools(self):
+ fr1 = Freezing()
+ fr2 = Freezing()
+ def getorbuild(key, flag1, flag2):
a = 1
if key is fr1:
result = eval("a+2")
else:
result = eval("a+6")
+ if flag1:
+ result += 100
+ if flag2:
+ result += 1000
return result
+ getorbuild._annspecialcase_ = "specialize:memo"
- cache1 = Cache1()
- cache2 = Cache2()
-
- def f1(i):
- if i > 0:
- fr = fr1
- else:
- fr = fr2
- newfr = cache1.getorbuild(fr)
- return cache2.getorbuild(newfr)
+ def f1(i):
+ if i > 0:
+ fr = fr1
+ else:
+ fr = fr2
+ return getorbuild(fr, i % 2 == 0, i % 3 == 0)
- res = interpret(f1, [0], view=0, viewbefore=0)
- assert res == 3
- res = interpret(f1, [1])
- assert res == 7
+ for n in [0, 1, 2, -3, 6]:
+ res = interpret(f1, [n], type_system=self.ts)
+ assert res == f1(n)
+
+ def test_call_memoized_cache(self):
+
+ # this test checks that we add a separate field
+ # per specialization and also it uses a subclass of
+ # the standard pypy.tool.cache.Cache
+
+ from pypy.tool.cache import Cache
+ fr1 = Freezing()
+ fr2 = Freezing()
+
+ class Cache1(Cache):
+ def _build(self, key):
+ "NOT_RPYTHON"
+ if key is fr1:
+ return fr2
+ else:
+ return fr1
+
+ class Cache2(Cache):
+ def _build(self, key):
+ "NOT_RPYTHON"
+ a = 1
+ if key is fr1:
+ result = eval("a+2")
+ else:
+ result = eval("a+6")
+ return result
+
+ cache1 = Cache1()
+ cache2 = Cache2()
+
+ def f1(i):
+ if i > 0:
+ fr = fr1
+ else:
+ fr = fr2
+ newfr = cache1.getorbuild(fr)
+ return cache2.getorbuild(newfr)
+
+ res = interpret(f1, [0], type_system=self.ts)
+ assert res == 3
+ res = interpret(f1, [1], type_system=self.ts)
+ assert res == 7
+
+ def test_call_memo_with_single_value(self):
+ class A: pass
+ def memofn(cls):
+ return len(cls.__name__)
+ memofn._annspecialcase_ = "specialize:memo"
+
+ def f1():
+ A() # make sure we have a ClassDef
+ return memofn(A)
+ res = interpret(f1, [], type_system=self.ts)
+ assert res == 1
def test_call_memo_with_class():
class A: pass
@@ -352,18 +364,6 @@
res = interpret(f1, [2])
assert res == 6
-def test_call_memo_with_single_value():
- class A: pass
- def memofn(cls):
- return len(cls.__name__)
- memofn._annspecialcase_ = "specialize:memo"
-
- def f1():
- A() # make sure we have a ClassDef
- return memofn(A)
- res = interpret(f1, [])
- assert res == 1
-
def test_rpbc_bound_method_static_call():
class R:
def meth(self):
More information about the Pypy-commit
mailing list