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