1import sys 2 3import unittest 4from numba import njit 5 6 7@njit 8def f0(a, b): 9 return a + b 10 11 12@njit 13def f1(begin1, end1, begin2, end2): 14 if begin1 > begin2: return f1(begin2, end2, begin1, end1) 15 return end1 + 1 >= begin2 16 17 18@njit 19def f0_2(a, b): 20 return a + b 21 22 23@njit 24def f1_2(begin1, end1, begin2, end2): 25 if begin1 > begin2: return f1_2(begin2, end2, begin1, end1) 26 return end1 + 1 >= begin2 27 28 29class TestSysStdinAssignment(unittest.TestCase): 30 31 def test_no_reassignment_of_stdout(self): 32 """ 33 https://github.com/numba/numba/issues/3027 34 Older versions of colorama break stdout/err when recursive functions 35 are compiled. 36 37 This test should work irrespective of colorama version, or indeed its 38 presence. If the version is too low, it should be disabled and the test 39 should work anyway, if it is a sufficiently high version or it is not 40 present, it should work anyway. 41 """ 42 43 originally = sys.stdout, sys.stderr 44 45 try: 46 sys.stdout = None 47 f0(0, 1) # Not changed stdout? 48 self.assertEqual(sys.stdout, None) 49 f1(0, 1, 2, 3) # Not changed stdout? 50 self.assertEqual(sys.stdout, None) 51 52 sys.stderr = None 53 f0_2(0, 1) # Not changed stderr? 54 self.assertEqual(sys.stderr, None) 55 f1_2(0, 1, 2, 3) # Not changed stderr? 56 self.assertEqual(sys.stderr, None) 57 58 finally: 59 sys.stdout, sys.stderr = originally 60 61 self.assertNotEqual(sys.stderr, None) 62 self.assertNotEqual(sys.stdout, None) 63 64 65if __name__ == '__main__': 66 unittest.main() 67 68