def test_empty_extend_with_any(self): empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(self.space, [self.space.wrap(1), self.space.wrap(2), self.space.wrap(3)])) assert isinstance(empty.strategy, IntegerListStrategy) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(self.space, [self.space.wrap("a"), self.space.wrap("b"), self.space.wrap("c")])) assert isinstance(empty.strategy, StringListStrategy) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) r = make_range_list(self.space, 1,3,7) empty.extend(r) assert isinstance(empty.strategy, RangeListStrategy) print empty.getitem(6) assert self.space.is_true(self.space.eq(empty.getitem(1), self.space.wrap(4))) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(self.space, [self.space.wrap(1), self.space.wrap(2), self.space.wrap(3)])) assert isinstance(empty.strategy, IntegerListStrategy) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(self.space, [])) assert isinstance(empty.strategy, EmptyListStrategy)
def test_setitem(self): space = self.space w = space.wrap # This should work if test_listobject.py passes l = W_ListObject(space, [w('a'),w('b'),w('c')]) assert space.eq_w(l.getitem(0), w('a')) l.setitem(0, w('d')) assert space.eq_w(l.getitem(0), w('d')) assert isinstance(l.strategy, BytesListStrategy) # IntStrategy to ObjectStrategy l = W_ListObject(space, [w(1),w(2),w(3)]) assert isinstance(l.strategy, IntegerListStrategy) l.setitem(0, w('d')) assert isinstance(l.strategy, ObjectListStrategy) # BytesStrategy to ObjectStrategy l = W_ListObject(space, [w('a'),w('b'),w('c')]) assert isinstance(l.strategy, BytesListStrategy) l.setitem(0, w(2)) assert isinstance(l.strategy, ObjectListStrategy) # UnicodeStrategy to ObjectStrategy l = W_ListObject(space, [w(u'a'),w(u'b'),w(u'c')]) assert isinstance(l.strategy, UnicodeListStrategy) l.setitem(0, w(2)) assert isinstance(l.strategy, ObjectListStrategy) # FloatStrategy to ObjectStrategy l = W_ListObject(space, [w(1.2),w(2.3),w(3.4)]) assert isinstance(l.strategy, FloatListStrategy) l.setitem(0, w("a")) assert isinstance(l.strategy, ObjectListStrategy)
def test_setitem(self): # This should work if test_listobject.py passes l = W_ListObject(self.space, [self.space.wrap('a'),self.space.wrap('b'),self.space.wrap('c')]) assert self.space.eq_w(l.getitem(0), self.space.wrap('a')) l.setitem(0, self.space.wrap('d')) assert self.space.eq_w(l.getitem(0), self.space.wrap('d')) assert isinstance(l.strategy, StringListStrategy) # IntStrategy to ObjectStrategy l = W_ListObject(self.space, [self.space.wrap(1),self.space.wrap(2),self.space.wrap(3)]) assert isinstance(l.strategy, IntegerListStrategy) l.setitem(0, self.space.wrap('d')) assert isinstance(l.strategy, ObjectListStrategy) # StringStrategy to ObjectStrategy l = W_ListObject(self.space, [self.space.wrap('a'),self.space.wrap('b'),self.space.wrap('c')]) assert isinstance(l.strategy, StringListStrategy) l.setitem(0, self.space.wrap(2)) assert isinstance(l.strategy, ObjectListStrategy) # FloatStrategy to ObjectStrategy l = W_ListObject(self.space, [self.space.wrap(1.2),self.space.wrap(2.3),self.space.wrap(3.4)]) assert isinstance(l.strategy, FloatListStrategy) l.setitem(0, self.space.wrap("a")) assert isinstance(l.strategy, ObjectListStrategy)
def test_setitem(self): space = self.space w = space.wrap wb = space.wrapbytes # This should work if test_listobject.py passes l = W_ListObject(space, [w('a'),w('b'),w('c')]) assert space.eq_w(l.getitem(0), w('a')) l.setitem(0, w('d')) assert space.eq_w(l.getitem(0), w('d')) assert isinstance(l.strategy, UnicodeListStrategy) # IntStrategy to ObjectStrategy l = W_ListObject(space, [w(1),w(2),w(3)]) assert isinstance(l.strategy, IntegerListStrategy) l.setitem(0, w('d')) assert isinstance(l.strategy, ObjectListStrategy) # BytesStrategy to ObjectStrategy l = W_ListObject(space, [wb('a'),wb('b'),wb('c')]) assert isinstance(l.strategy, BytesListStrategy) l.setitem(0, w(2)) assert isinstance(l.strategy, ObjectListStrategy) # FloatStrategy to ObjectStrategy l = W_ListObject(space, [w(1.2),w(2.3),w(3.4)]) assert isinstance(l.strategy, FloatListStrategy) l.setitem(0, w("a")) assert isinstance(l.strategy, ObjectListStrategy)
def test_int_or_float_from_float(self): space = self.space w = space.wrap w_l = W_ListObject(space, [space.wrap(-42.5)]) assert isinstance(w_l.strategy, FloatListStrategy) w_l.append(w(-15)) assert isinstance(w_l.strategy, IntOrFloatListStrategy) assert space.float_w(w_l.getitem(0)) == -42.5 assert space.int_w(w_l.getitem(1)) == -15 assert space.len_w(w_l) == 2
def test_int_or_float_from_integer(self): space = self.space w = space.wrap w_l = W_ListObject(space, [space.wrap(int(-2**31))]) assert isinstance(w_l.strategy, IntegerListStrategy) w_l.append(w(-5.1)) assert isinstance(w_l.strategy, IntOrFloatListStrategy) assert space.int_w(w_l.getitem(0)) == -2**31 assert space.float_w(w_l.getitem(1)) == -5.1 assert space.len_w(w_l) == 2
def test_empty_extend_with_any(self): empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend( W_ListObject( self.space, [self.space.wrap(1), self.space.wrap(2), self.space.wrap(3)])) assert isinstance(empty.strategy, IntegerListStrategy) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend( W_ListObject(self.space, [ self.space.wrap("a"), self.space.wrap("b"), self.space.wrap("c") ])) assert isinstance(empty.strategy, StringListStrategy) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) r = make_range_list(self.space, 1, 3, 7) empty.extend(r) assert isinstance(empty.strategy, RangeListStrategy) print empty.getitem(6) assert self.space.is_true( self.space.eq(empty.getitem(1), self.space.wrap(4))) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend( W_ListObject( self.space, [self.space.wrap(1), self.space.wrap(2), self.space.wrap(3)])) assert isinstance(empty.strategy, IntegerListStrategy) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend( W_ListObject(self.space, [ self.space.wrap(1.1), self.space.wrap(2.2), self.space.wrap(3.3) ])) assert isinstance(empty.strategy, FloatListStrategy) empty = W_ListObject(self.space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(self.space, [])) assert isinstance(empty.strategy, EmptyListStrategy)
def test_int_or_float_from_float_int_overflow(self): if sys.maxint == 2147483647: py.test.skip("only on 64-bit") space = self.space w = space.wrap ovf1 = 2 ** 31 w_l = W_ListObject(space, [space.wrap(1.2)]) assert isinstance(w_l.strategy, FloatListStrategy) w_l.append(w(ovf1)) assert isinstance(w_l.strategy, ObjectListStrategy) assert space.float_w(w_l.getitem(0)) == 1.2 assert space.int_w(w_l.getitem(1)) == ovf1 assert space.len_w(w_l) == 2
def test_empty_extend_with_any(self): space = self.space w = space.wrap wb = space.wrapbytes empty = W_ListObject(space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(space, [w(1), w(2), w(3)])) assert isinstance(empty.strategy, IntegerListStrategy) empty = W_ListObject(space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(space, [wb("a"), wb("b"), wb("c")])) assert isinstance(empty.strategy, BytesListStrategy) empty = W_ListObject(space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(space, [w(u"a"), w(u"b"), w(u"c")])) assert isinstance(empty.strategy, UnicodeListStrategy) empty = W_ListObject(space, []) assert isinstance(empty.strategy, EmptyListStrategy) r = make_range_list(space, 1,3,7) empty.extend(r) assert isinstance(empty.strategy, RangeListStrategy) print empty.getitem(6) assert space.is_true(space.eq(empty.getitem(1), w(4))) empty = W_ListObject(space, []) assert isinstance(empty.strategy, EmptyListStrategy) r = make_range_list(space, 0, 1, 10) empty.extend(r) assert isinstance(empty.strategy, SimpleRangeListStrategy) assert space.is_true(space.eq(empty.getitem(1), w(1))) empty = W_ListObject(space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(space, [w(1), w(2), w(3)])) assert isinstance(empty.strategy, IntegerListStrategy) empty = W_ListObject(space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(space, [w(1.1), w(2.2), w(3.3)])) assert isinstance(empty.strategy, FloatListStrategy) empty = W_ListObject(space, []) assert isinstance(empty.strategy, EmptyListStrategy) empty.extend(W_ListObject(space, [])) assert isinstance(empty.strategy, EmptyListStrategy)
def test_getitems_fixedsize(self): w = self.space.wrap from pypy.objspace.std.listobject import make_range_list rangelist = make_range_list(self.space, 1, 1, 7) emptylist = W_ListObject(self.space, []) intlist = W_ListObject( self.space, [w(1), w(2), w(3), w(4), w(5), w(6), w(7)]) strlist = W_ListObject( self.space, [w('1'), w('2'), w('3'), w('4'), w('5'), w('6'), w('7')]) floatlist = W_ListObject( self.space, [w(1.0), w(2.0), w(3.0), w(4.0), w(5.0), w(6.0), w(7.0)]) objlist = W_ListObject( self.space, [w(1), w('2'), w(3.0), w(4), w(5), w(6), w(7)]) emptylist_copy = emptylist.getitems_fixedsize() assert emptylist_copy == [] rangelist_copy = rangelist.getitems_fixedsize() intlist_copy = intlist.getitems_fixedsize() strlist_copy = strlist.getitems_fixedsize() floatlist_copy = floatlist.getitems_fixedsize() objlist_copy = objlist.getitems_fixedsize() for i in range(7): assert self.space.eq_w(rangelist_copy[i], rangelist.getitem(i)) assert self.space.eq_w(intlist_copy[i], intlist.getitem(i)) assert self.space.eq_w(strlist_copy[i], strlist.getitem(i)) assert self.space.eq_w(floatlist_copy[i], floatlist.getitem(i)) assert self.space.eq_w(objlist_copy[i], objlist.getitem(i)) emptylist_copy = emptylist.getitems_unroll() assert emptylist_copy == [] rangelist_copy = rangelist.getitems_unroll() intlist_copy = intlist.getitems_unroll() strlist_copy = strlist.getitems_unroll() floatlist_copy = floatlist.getitems_unroll() objlist_copy = objlist.getitems_unroll() for i in range(7): assert self.space.eq_w(rangelist_copy[i], rangelist.getitem(i)) assert self.space.eq_w(intlist_copy[i], intlist.getitem(i)) assert self.space.eq_w(strlist_copy[i], strlist.getitem(i)) assert self.space.eq_w(floatlist_copy[i], floatlist.getitem(i)) assert self.space.eq_w(objlist_copy[i], objlist.getitem(i))
def test_setitem(self): # This should work if test_listobject.py passes l = W_ListObject( self.space, [self.space.wrap('a'), self.space.wrap('b'), self.space.wrap('c')]) assert self.space.eq_w(l.getitem(0), self.space.wrap('a')) l.setitem(0, self.space.wrap('d')) assert self.space.eq_w(l.getitem(0), self.space.wrap('d')) assert isinstance(l.strategy, StringListStrategy) # IntStrategy to ObjectStrategy l = W_ListObject( self.space, [self.space.wrap(1), self.space.wrap(2), self.space.wrap(3)]) assert isinstance(l.strategy, IntegerListStrategy) l.setitem(0, self.space.wrap('d')) assert isinstance(l.strategy, ObjectListStrategy) # StringStrategy to ObjectStrategy l = W_ListObject( self.space, [self.space.wrap('a'), self.space.wrap('b'), self.space.wrap('c')]) assert isinstance(l.strategy, StringListStrategy) l.setitem(0, self.space.wrap(2)) assert isinstance(l.strategy, ObjectListStrategy) # FloatStrategy to ObjectStrategy l = W_ListObject( self.space, [self.space.wrap(1.2), self.space.wrap(2.3), self.space.wrap(3.4)]) assert isinstance(l.strategy, FloatListStrategy) l.setitem(0, self.space.wrap("a")) assert isinstance(l.strategy, ObjectListStrategy)
def test_int_or_float_base(self): from rpython.rlib.rfloat import INFINITY, NAN space = self.space w = space.wrap w_l = W_ListObject(space, [space.wrap(1), space.wrap(2.3)]) assert isinstance(w_l.strategy, IntOrFloatListStrategy) w_l.append(w(int(2**31-1))) assert isinstance(w_l.strategy, IntOrFloatListStrategy) w_l.append(w(-5.1)) assert isinstance(w_l.strategy, IntOrFloatListStrategy) assert space.int_w(w_l.getitem(2)) == 2**31-1 assert space.float_w(w_l.getitem(3)) == -5.1 w_l.append(w(INFINITY)) assert isinstance(w_l.strategy, IntOrFloatListStrategy) w_l.append(w(NAN)) assert isinstance(w_l.strategy, IntOrFloatListStrategy) w_l.append(w(-NAN)) assert isinstance(w_l.strategy, IntOrFloatListStrategy) w_l.append(space.newlist([])) assert isinstance(w_l.strategy, ObjectListStrategy)
def test_int_or_float_from_float_special_nan(self): from rpython.rlib import longlong2float, rarithmetic space = self.space w = space.wrap ll = rarithmetic.r_longlong(0xfffffffe12345678 - 2**64) specialnan = longlong2float.longlong2float(ll) w_l = W_ListObject(space, [space.wrap(specialnan)]) assert isinstance(w_l.strategy, FloatListStrategy) w_l.append(w(42)) assert isinstance(w_l.strategy, ObjectListStrategy) assert space.int_w(w_l.getitem(1)) == 42 assert space.len_w(w_l) == 2
def test_getitems_fixedsize(self): w = self.space.wrap from pypy.objspace.std.listobject import make_range_list rangelist = make_range_list(self.space, 1, 1, 7) emptylist = W_ListObject(self.space, []) intlist = W_ListObject(self.space, [w(1), w(2), w(3), w(4), w(5), w(6), w(7)]) strlist = W_ListObject(self.space, [w("1"), w("2"), w("3"), w("4"), w("5"), w("6"), w("7")]) floatlist = W_ListObject(self.space, [w(1.0), w(2.0), w(3.0), w(4.0), w(5.0), w(6.0), w(7.0)]) objlist = W_ListObject(self.space, [w(1), w("2"), w(3.0), w(4), w(5), w(6), w(7)]) emptylist_copy = emptylist.getitems_fixedsize() assert emptylist_copy == [] rangelist_copy = rangelist.getitems_fixedsize() intlist_copy = intlist.getitems_fixedsize() strlist_copy = strlist.getitems_fixedsize() floatlist_copy = floatlist.getitems_fixedsize() objlist_copy = objlist.getitems_fixedsize() for i in range(7): assert self.space.eq_w(rangelist_copy[i], rangelist.getitem(i)) assert self.space.eq_w(intlist_copy[i], intlist.getitem(i)) assert self.space.eq_w(strlist_copy[i], strlist.getitem(i)) assert self.space.eq_w(floatlist_copy[i], floatlist.getitem(i)) assert self.space.eq_w(objlist_copy[i], objlist.getitem(i)) emptylist_copy = emptylist.getitems_unroll() assert emptylist_copy == [] rangelist_copy = rangelist.getitems_unroll() intlist_copy = intlist.getitems_unroll() strlist_copy = strlist.getitems_unroll() floatlist_copy = floatlist.getitems_unroll() objlist_copy = objlist.getitems_unroll() for i in range(7): assert self.space.eq_w(rangelist_copy[i], rangelist.getitem(i)) assert self.space.eq_w(intlist_copy[i], intlist.getitem(i)) assert self.space.eq_w(strlist_copy[i], strlist.getitem(i)) assert self.space.eq_w(floatlist_copy[i], floatlist.getitem(i)) assert self.space.eq_w(objlist_copy[i], objlist.getitem(i))
def test_stringstrategy_wraps_bytes(self): space = self.space wb = space.wrapbytes l = W_ListObject(space, [wb('a'), wb('b')]) w_item = l.getitem(0) assert isinstance(w_item, space.StringObjectCls)