@@ -829,6 +829,138 @@ def test_mkfifoat(self):
829829 finally :
830830 posix .close (f )
831831
832+ requires_sched_h = unittest .skipUnless (hasattr (posix , 'sched_yield' ),
833+ "don't have scheduling support" )
834+
835+ @requires_sched_h
836+ def test_sched_yield (self ):
837+ # This has no error conditions (at least on Linux).
838+ posix .sched_yield ()
839+
840+ @requires_sched_h
841+ def test_sched_priority (self ):
842+ # Round-robin usually has interesting priorities.
843+ pol = posix .SCHED_RR
844+ lo = posix .sched_get_priority_min (pol )
845+ hi = posix .sched_get_priority_max (pol )
846+ self .assertIsInstance (lo , int )
847+ self .assertIsInstance (hi , int )
848+ self .assertGreaterEqual (hi , lo )
849+ self .assertRaises (OSError , posix .sched_get_priority_min , - 23 )
850+ self .assertRaises (OSError , posix .sched_get_priority_max , - 23 )
851+
852+ @requires_sched_h
853+ def test_get_and_set_scheduler_and_param (self ):
854+ possible_schedulers = [sched for name , sched in posix .__dict__ .items ()
855+ if name .startswith ("SCHED_" )]
856+ mine = posix .sched_getscheduler (0 )
857+ self .assertIn (mine , possible_schedulers )
858+ try :
859+ init = posix .sched_getscheduler (1 )
860+ except OSError as e :
861+ if e .errno != errno .EPERM :
862+ raise
863+ else :
864+ self .assertIn (init , possible_schedulers )
865+ self .assertRaises (OSError , posix .sched_getscheduler , - 1 )
866+ self .assertRaises (OSError , posix .sched_getparam , - 1 )
867+ param = posix .sched_getparam (0 )
868+ self .assertIsInstance (param .sched_priority , int )
869+ posix .sched_setscheduler (0 , mine , param )
870+ posix .sched_setparam (0 , param )
871+ self .assertRaises (OSError , posix .sched_setparam , - 1 , param )
872+ self .assertRaises (OSError , posix .sched_setscheduler , - 1 , mine , param )
873+ self .assertRaises (TypeError , posix .sched_setscheduler , 0 , mine , None )
874+ self .assertRaises (TypeError , posix .sched_setparam , 0 , 43 )
875+ param = posix .sched_param (None )
876+ self .assertRaises (TypeError , posix .sched_setparam , 0 , param )
877+ large = 214748364700
878+ param = posix .sched_param (large )
879+ self .assertRaises (OverflowError , posix .sched_setparam , 0 , param )
880+ param = posix .sched_param (sched_priority = - large )
881+ self .assertRaises (OverflowError , posix .sched_setparam , 0 , param )
882+
883+ @requires_sched_h
884+ def test_sched_rr_get_interval (self ):
885+ interval = posix .sched_rr_get_interval (0 )
886+ self .assertIsInstance (interval , float )
887+ # Reasonable constraints, I think.
888+ self .assertGreaterEqual (interval , 0. )
889+ self .assertLess (interval , 1. )
890+
891+ @requires_sched_h
892+ def test_sched_affinity (self ):
893+ mask = posix .sched_getaffinity (0 , 1024 )
894+ self .assertGreaterEqual (mask .count (), 1 )
895+ self .assertIsInstance (mask , posix .cpu_set )
896+ self .assertRaises (OSError , posix .sched_getaffinity , - 1 , 1024 )
897+ empty = posix .cpu_set (10 )
898+ posix .sched_setaffinity (0 , mask )
899+ self .assertRaises (OSError , posix .sched_setaffinity , 0 , empty )
900+ self .assertRaises (OSError , posix .sched_setaffinity , - 1 , mask )
901+
902+ @requires_sched_h
903+ def test_cpu_set_basic (self ):
904+ s = posix .cpu_set (10 )
905+ self .assertEqual (len (s ), 10 )
906+ self .assertEqual (s .count (), 0 )
907+ s .set (0 )
908+ s .set (9 )
909+ self .assertTrue (s .isset (0 ))
910+ self .assertTrue (s .isset (9 ))
911+ self .assertFalse (s .isset (5 ))
912+ self .assertEqual (s .count (), 2 )
913+ s .clear (0 )
914+ self .assertFalse (s .isset (0 ))
915+ self .assertEqual (s .count (), 1 )
916+ s .zero ()
917+ self .assertFalse (s .isset (0 ))
918+ self .assertFalse (s .isset (9 ))
919+ self .assertEqual (s .count (), 0 )
920+ self .assertRaises (ValueError , s .set , - 1 )
921+ self .assertRaises (ValueError , s .set , 10 )
922+ self .assertRaises (ValueError , s .clear , - 1 )
923+ self .assertRaises (ValueError , s .clear , 10 )
924+ self .assertRaises (ValueError , s .isset , - 1 )
925+ self .assertRaises (ValueError , s .isset , 10 )
926+
927+ @requires_sched_h
928+ def test_cpu_set_cmp (self ):
929+ self .assertNotEqual (posix .cpu_set (11 ), posix .cpu_set (12 ))
930+ l = posix .cpu_set (10 )
931+ r = posix .cpu_set (10 )
932+ self .assertEqual (l , r )
933+ l .set (1 )
934+ self .assertNotEqual (l , r )
935+ r .set (1 )
936+ self .assertEqual (l , r )
937+
938+ @requires_sched_h
939+ def test_cpu_set_bitwise (self ):
940+ l = posix .cpu_set (5 )
941+ l .set (0 )
942+ l .set (1 )
943+ r = posix .cpu_set (5 )
944+ r .set (1 )
945+ r .set (2 )
946+ b = l & r
947+ self .assertEqual (b .count (), 1 )
948+ self .assertTrue (b .isset (1 ))
949+ b = l | r
950+ self .assertEqual (b .count (), 3 )
951+ self .assertTrue (b .isset (0 ))
952+ self .assertTrue (b .isset (1 ))
953+ self .assertTrue (b .isset (2 ))
954+ b = l ^ r
955+ self .assertEqual (b .count (), 2 )
956+ self .assertTrue (b .isset (0 ))
957+ self .assertFalse (b .isset (1 ))
958+ self .assertTrue (b .isset (2 ))
959+ b = l
960+ b |= r
961+ self .assertIs (b , l )
962+ self .assertEqual (l .count (), 3 )
963+
832964class PosixGroupsTester (unittest .TestCase ):
833965
834966 def setUp (self ):
@@ -864,7 +996,6 @@ def test_setgroups(self):
864996 posix .setgroups (groups )
865997 self .assertListEqual (groups , posix .getgroups ())
866998
867-
868999def test_main ():
8691000 try :
8701001 support .run_unittest (PosixTester , PosixGroupsTester )
0 commit comments