Issue #12655: Instead of requiring a custom type, os.sched_getaffinit… · python/cpython@8486987
@@ -855,7 +855,7 @@ def test_mkfifo_dir_fd(self):
855855856856requires_sched_h = unittest.skipUnless(hasattr(posix, 'sched_yield'),
857857"don't have scheduling support")
858-requires_sched_affinity = unittest.skipUnless(hasattr(posix, 'cpu_set'),
858+requires_sched_affinity = unittest.skipUnless(hasattr(posix, 'sched_setaffinity'),
859859"don't have sched affinity support")
860860861861@requires_sched_h
@@ -936,83 +936,28 @@ def test_sched_rr_get_interval(self):
936936self.assertLess(interval, 1.)
937937938938@requires_sched_affinity
939-def test_sched_affinity(self):
940-mask = posix.sched_getaffinity(0, 1024)
941-self.assertGreaterEqual(mask.count(), 1)
942-self.assertIsInstance(mask, posix.cpu_set)
943-self.assertRaises(OSError, posix.sched_getaffinity, -1, 1024)
944-empty = posix.cpu_set(10)
945-posix.sched_setaffinity(0, mask)
946-self.assertRaises(OSError, posix.sched_setaffinity, 0, empty)
947-self.assertRaises(OSError, posix.sched_setaffinity, -1, mask)
948-949-@requires_sched_affinity
950-def test_cpu_set_basic(self):
951-s = posix.cpu_set(10)
952-self.assertEqual(len(s), 10)
953-self.assertEqual(s.count(), 0)
954-s.set(0)
955-s.set(9)
956-self.assertTrue(s.isset(0))
957-self.assertTrue(s.isset(9))
958-self.assertFalse(s.isset(5))
959-self.assertEqual(s.count(), 2)
960-s.clear(0)
961-self.assertFalse(s.isset(0))
962-self.assertEqual(s.count(), 1)
963-s.zero()
964-self.assertFalse(s.isset(0))
965-self.assertFalse(s.isset(9))
966-self.assertEqual(s.count(), 0)
967-self.assertRaises(ValueError, s.set, -1)
968-self.assertRaises(ValueError, s.set, 10)
969-self.assertRaises(ValueError, s.clear, -1)
970-self.assertRaises(ValueError, s.clear, 10)
971-self.assertRaises(ValueError, s.isset, -1)
972-self.assertRaises(ValueError, s.isset, 10)
973-974-@requires_sched_affinity
975-def test_cpu_set_cmp(self):
976-self.assertNotEqual(posix.cpu_set(11), posix.cpu_set(12))
977-l = posix.cpu_set(10)
978-r = posix.cpu_set(10)
979-self.assertEqual(l, r)
980-l.set(1)
981-self.assertNotEqual(l, r)
982-r.set(1)
983-self.assertEqual(l, r)
984-985-@requires_sched_affinity
986-def test_cpu_set_bitwise(self):
987-l = posix.cpu_set(5)
988-l.set(0)
989-l.set(1)
990-r = posix.cpu_set(5)
991-r.set(1)
992-r.set(2)
993-b = l & r
994-self.assertEqual(b.count(), 1)
995-self.assertTrue(b.isset(1))
996-b = l | r
997-self.assertEqual(b.count(), 3)
998-self.assertTrue(b.isset(0))
999-self.assertTrue(b.isset(1))
1000-self.assertTrue(b.isset(2))
1001-b = l ^ r
1002-self.assertEqual(b.count(), 2)
1003-self.assertTrue(b.isset(0))
1004-self.assertFalse(b.isset(1))
1005-self.assertTrue(b.isset(2))
1006-b = l
1007-b |= r
1008-self.assertIs(b, l)
1009-self.assertEqual(l.count(), 3)
939+def test_sched_getaffinity(self):
940+mask = posix.sched_getaffinity(0)
941+self.assertIsInstance(mask, set)
942+self.assertGreaterEqual(len(mask), 1)
943+self.assertRaises(OSError, posix.sched_getaffinity, -1)
944+for cpu in mask:
945+self.assertIsInstance(cpu, int)
946+self.assertGreaterEqual(cpu, 0)
947+self.assertLess(cpu, 1 << 32)
10109481011949@requires_sched_affinity
1012-@support.cpython_only
1013-def test_cpu_set_sizeof(self):
1014-self.assertGreater(sys.getsizeof(posix.cpu_set(1000)),
1015-sys.getsizeof(posix.cpu_set(1)))
950+def test_sched_setaffinity(self):
951+mask = posix.sched_getaffinity(0)
952+if len(mask) > 1:
953+# Empty masks are forbidden
954+mask.pop()
955+posix.sched_setaffinity(0, mask)
956+self.assertEqual(posix.sched_getaffinity(0), mask)
957+self.assertRaises(OSError, posix.sched_setaffinity, 0, [])
958+self.assertRaises(ValueError, posix.sched_setaffinity, 0, [-10])
959+self.assertRaises(OverflowError, posix.sched_setaffinity, 0, [1<<128])
960+self.assertRaises(OSError, posix.sched_setaffinity, -1, mask)
10169611017962def test_rtld_constants(self):
1018963# check presence of major RTLD_* constants