[pypy-svn] r34251 - in pypy/dist/pypy/rpython: . test
arigo at codespeak.net
arigo at codespeak.net
Sun Nov 5 18:12:43 CET 2006
Author: arigo
Date: Sun Nov 5 18:12:42 2006
New Revision: 34251
Modified:
pypy/dist/pypy/rpython/rtuple.py
pypy/dist/pypy/rpython/test/test_rtuple.py
Log:
Implemented == and != between tuples in RPython.
Modified: pypy/dist/pypy/rpython/rtuple.py
==============================================================================
--- pypy/dist/pypy/rpython/rtuple.py (original)
+++ pypy/dist/pypy/rpython/rtuple.py Sun Nov 5 18:12:42 2006
@@ -7,7 +7,7 @@
from pypy.rpython.rmodel import IteratorRepr
from pypy.rpython.rmodel import externalvsinternal
from pypy.rpython.rslice import AbstractSliceRepr
-from pypy.rpython.lltypesystem.lltype import Void, Signed
+from pypy.rpython.lltypesystem.lltype import Void, Signed, Bool
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.unroll import unrolling_iterable
@@ -194,6 +194,16 @@
return r_tup1.newtuple_cached(hop, vlist)
rtype_inplace_add = rtype_add
+ def rtype_eq((r_tup1, r_tup2), hop):
+ # XXX assumes that r_tup2 is convertible to r_tup1
+ v_tuple1, v_tuple2 = hop.inputargs(r_tup1, r_tup1)
+ ll_eq = r_tup1.get_ll_eq_function()
+ return hop.gendirectcall(ll_eq, v_tuple1, v_tuple2)
+
+ def rtype_ne(tup1tup2, hop):
+ v_res = tup1tup2.rtype_eq(hop)
+ return hop.genop('bool_not', [v_res], resulttype=Bool)
+
def convert_from_to((r_from, r_to), v, llops):
if len(r_from.items_r) == len(r_to.items_r):
if r_from.lowleveltype == r_to.lowleveltype:
Modified: pypy/dist/pypy/rpython/test/test_rtuple.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rtuple.py (original)
+++ pypy/dist/pypy/rpython/test/test_rtuple.py Sun Nov 5 18:12:42 2006
@@ -264,6 +264,28 @@
assert res[5] == "hello"
self.interpret(f, [9])
+ def test_tuple_eq(self):
+ def f(n):
+ return (n, 6) == (3, n*2)
+ res = self.interpret(f, [3])
+ assert res is True
+ res = self.interpret(f, [2])
+ assert res is False
+
+ def test_tuple_ne(self):
+ def f(n):
+ return (n, 6) != (3, n*2)
+ res = self.interpret(f, [3])
+ assert res is False
+ res = self.interpret(f, [2])
+ assert res is True
+
+ def test_tuple_hash(self):
+ def f(n):
+ return hash((n, 6)) == hash((3, n*2))
+ res = self.interpret(f, [3])
+ assert res is True
+
class TestLLtype(BaseTestRtuple, LLRtypeMixin):
pass
More information about the Pypy-commit
mailing list