@@ -6441,6 +6441,150 @@ def test_namespace(self):
6441
6441
o .y = 1
6442
6442
self .run_worker (self ._test_namespace , o )
6443
6443
6444
+ @classmethod
6445
+ def _test_set_operator_symbols (cls , obj ):
6446
+ case = unittest .TestCase ()
6447
+ obj .update (['a' , 'b' , 'c' ])
6448
+ case .assertEqual (len (obj ), 3 )
6449
+ case .assertIn ('a' , obj )
6450
+ case .assertNotIn ('d' , obj )
6451
+ result = obj | {'d' , 'e' }
6452
+ case .assertSetEqual (result , {'a' , 'b' , 'c' , 'd' , 'e' })
6453
+ result = {'d' , 'e' } | obj
6454
+ case .assertSetEqual (result , {'a' , 'b' , 'c' , 'd' , 'e' })
6455
+ obj |= {'d' , 'e' }
6456
+ case .assertSetEqual (obj , {'a' , 'b' , 'c' , 'd' , 'e' })
6457
+ case .assertIsInstance (obj , multiprocessing .managers .SetProxy )
6458
+
6459
+ obj .clear ()
6460
+ obj .update (['a' , 'b' , 'c' ])
6461
+ result = {'a' , 'b' , 'd' } - obj
6462
+ case .assertSetEqual (result , {'d' })
6463
+ result = obj - {'a' , 'b' }
6464
+ case .assertSetEqual (result , {'c' })
6465
+ obj -= {'a' , 'b' }
6466
+ case .assertSetEqual (obj , {'c' })
6467
+ case .assertIsInstance (obj , multiprocessing .managers .SetProxy )
6468
+
6469
+ obj .clear ()
6470
+ obj .update (['a' , 'b' , 'c' ])
6471
+ result = {'b' , 'c' , 'd' } ^ obj
6472
+ case .assertSetEqual (result , {'a' , 'd' })
6473
+ result = obj ^ {'b' , 'c' , 'd' }
6474
+ case .assertSetEqual (result , {'a' , 'd' })
6475
+ obj ^= {'b' , 'c' , 'd' }
6476
+ case .assertSetEqual (obj , {'a' , 'd' })
6477
+ case .assertIsInstance (obj , multiprocessing .managers .SetProxy )
6478
+
6479
+ obj .clear ()
6480
+ obj .update (['a' , 'b' , 'c' ])
6481
+ result = obj & {'b' , 'c' , 'd' }
6482
+ case .assertSetEqual (result , {'b' , 'c' })
6483
+ result = {'b' , 'c' , 'd' } & obj
6484
+ case .assertSetEqual (result , {'b' , 'c' })
6485
+ obj &= {'b' , 'c' , 'd' }
6486
+ case .assertSetEqual (obj , {'b' , 'c' })
6487
+ case .assertIsInstance (obj , multiprocessing .managers .SetProxy )
6488
+
6489
+ obj .clear ()
6490
+ obj .update (['a' , 'b' , 'c' ])
6491
+ case .assertSetEqual (set (obj ), {'a' , 'b' , 'c' })
6492
+
6493
+ @classmethod
6494
+ def _test_set_operator_methods (cls , obj ):
6495
+ case = unittest .TestCase ()
6496
+ obj .add ('d' )
6497
+ case .assertIn ('d' , obj )
6498
+
6499
+ obj .clear ()
6500
+ obj .update (['a' , 'b' , 'c' ])
6501
+ copy_obj = obj .copy ()
6502
+ case .assertSetEqual (copy_obj , obj )
6503
+ obj .remove ('a' )
6504
+ case .assertNotIn ('a' , obj )
6505
+ case .assertRaises (KeyError , obj .remove , 'a' )
6506
+
6507
+ obj .clear ()
6508
+ obj .update (['a' ])
6509
+ obj .discard ('a' )
6510
+ case .assertNotIn ('a' , obj )
6511
+ obj .discard ('a' )
6512
+ case .assertNotIn ('a' , obj )
6513
+ obj .update (['a' ])
6514
+ popped = obj .pop ()
6515
+ case .assertNotIn (popped , obj )
6516
+
6517
+ obj .clear ()
6518
+ obj .update (['a' , 'b' , 'c' ])
6519
+ result = obj .intersection ({'b' , 'c' , 'd' })
6520
+ case .assertSetEqual (result , {'b' , 'c' })
6521
+ obj .intersection_update ({'b' , 'c' , 'd' })
6522
+ case .assertSetEqual (obj , {'b' , 'c' })
6523
+
6524
+ obj .clear ()
6525
+ obj .update (['a' , 'b' , 'c' ])
6526
+ result = obj .difference ({'a' , 'b' })
6527
+ case .assertSetEqual (result , {'c' })
6528
+ obj .difference_update ({'a' , 'b' })
6529
+ case .assertSetEqual (obj , {'c' })
6530
+
6531
+ obj .clear ()
6532
+ obj .update (['a' , 'b' , 'c' ])
6533
+ result = obj .symmetric_difference ({'b' , 'c' , 'd' })
6534
+ case .assertSetEqual (result , {'a' , 'd' })
6535
+ obj .symmetric_difference_update ({'b' , 'c' , 'd' })
6536
+ case .assertSetEqual (obj , {'a' , 'd' })
6537
+
6538
+ @classmethod
6539
+ def _test_set_comparisons (cls , obj ):
6540
+ case = unittest .TestCase ()
6541
+ obj .update (['a' , 'b' , 'c' ])
6542
+ result = obj .union ({'d' , 'e' })
6543
+ case .assertSetEqual (result , {'a' , 'b' , 'c' , 'd' , 'e' })
6544
+ case .assertTrue (obj .isdisjoint ({'d' , 'e' }))
6545
+ case .assertFalse (obj .isdisjoint ({'a' , 'd' }))
6546
+
6547
+ case .assertTrue (obj .issubset ({'a' , 'b' , 'c' , 'd' }))
6548
+ case .assertFalse (obj .issubset ({'a' , 'b' }))
6549
+ case .assertLess (obj , {'a' , 'b' , 'c' , 'd' })
6550
+ case .assertLessEqual (obj , {'a' , 'b' , 'c' })
6551
+
6552
+ case .assertTrue (obj .issuperset ({'a' , 'b' }))
6553
+ case .assertFalse (obj .issuperset ({'a' , 'b' , 'd' }))
6554
+ case .assertGreater (obj , {'a' })
6555
+ case .assertGreaterEqual (obj , {'a' , 'b' })
6556
+
6557
+ def test_set (self ):
6558
+ o = self .manager .set ()
6559
+ self .run_worker (self ._test_set_operator_symbols , o )
6560
+ o = self .manager .set ()
6561
+ self .run_worker (self ._test_set_operator_methods , o )
6562
+ o = self .manager .set ()
6563
+ self .run_worker (self ._test_set_comparisons , o )
6564
+
6565
+ def test_set_init (self ):
6566
+ o = self .manager .set ({'a' , 'b' , 'c' })
6567
+ self .assertSetEqual (o , {'a' , 'b' , 'c' })
6568
+ o = self .manager .set (["a" , "b" , "c" ])
6569
+ self .assertSetEqual (o , {"a" , "b" , "c" })
6570
+ o = self .manager .set ({"a" : 1 , "b" : 2 , "c" : 3 })
6571
+ self .assertSetEqual (o , {"a" , "b" , "c" })
6572
+ self .assertRaises (RemoteError , self .manager .set , 1234 )
6573
+
6574
+ def test_set_contain_all_method (self ):
6575
+ o = self .manager .set ()
6576
+ set_methods = {
6577
+ '__and__' , '__class_getitem__' , '__contains__' , '__iand__' , '__ior__' ,
6578
+ '__isub__' , '__iter__' , '__ixor__' , '__len__' , '__or__' , '__rand__' ,
6579
+ '__ror__' , '__rsub__' , '__rxor__' , '__sub__' , '__xor__' ,
6580
+ '__ge__' , '__gt__' , '__le__' , '__lt__' ,
6581
+ 'add' , 'clear' , 'copy' , 'difference' , 'difference_update' , 'discard' ,
6582
+ 'intersection' , 'intersection_update' , 'isdisjoint' , 'issubset' ,
6583
+ 'issuperset' , 'pop' , 'remove' , 'symmetric_difference' ,
6584
+ 'symmetric_difference_update' , 'union' , 'update' ,
6585
+ }
6586
+ self .assertLessEqual (set_methods , set (dir (o )))
6587
+
6444
6588
6445
6589
class TestNamedResource (unittest .TestCase ):
6446
6590
@only_run_in_spawn_testsuite ("spawn specific test." )
0 commit comments