# HG changeset patch # Parent c0b803209dc86d062828fcba263d57f39208a937 diff -r c0b803209dc8 -r f808971096a0 Lib/test/pickletester.py --- a/Lib/test/pickletester.py Fri Jul 27 02:49:05 2012 +0300 +++ b/Lib/test/pickletester.py Fri Jul 27 17:22:21 2012 +0300 @@ -406,8 +406,7 @@ b'coded_valueq\x0fU\x05valueq\x10h\x10h\x10h\x02h\x02ubs}q\x11b.') # set([3]) pickled from 2.x with protocol 2 -DATA6 = b'\x80\x02c__builtin__\nset\nq\x00]q\x01K\x03a\x85q\x02Rq\x03.' - +DATA6 = b'\x80\x02c__builtin__\nset\nq\x00)Rq\x01]q\x02K\x03ab.' def create_data(): c = C() @@ -788,6 +787,38 @@ got = self.loads(pickle) self.assertEqual(value, got) + def test_set(self): + sets=[set([]), set([1]), set([1,2]), + set(range(1,1000)), set(range(1,1001))] + for proto in protocols: + for s in sets: + s_ = self.loads(self.dumps(s, proto)) + self.assertEqual(s_, s) + self.assertEqual(s_.__getstate__(), s.__getstate__()) + + # self-referential sets + c=myint(1) + s=set([c]) + c.s=s + for proto in protocols: + s_ = self.loads(self.dumps(s, proto)) + self.assertIsNot(s_, s) + self.assertIs( next(iter(s_)).s, s_) + self.assertEqual(1, len(s_)) + + # setting state + s=set([]) + s.__setstate__([1,2,3]) + self.assertEqual(set([1,2,3]), s) + s.__setstate__([]) + self.assertEqual(set([]), s) + self.assertRaises(AttributeError, set.__setstate__, s, ([1], {1:2})) + self.assertRaises(TypeError, set.__setstate__, s, 2) + self.assertRaises(TypeError, set.__setstate__, s, ([],{},3)) + self.assertRaises(TypeError, set.__setstate__, s, ((),{})) + self.assertRaises(TypeError, set.__setstate__, s, ([],[])) + + @run_with_locale('LC_ALL', 'de_DE', 'fr_FR') def test_float_format(self): # make sure that floats are formatted locale independent with proto 0