[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