aboutsummaryrefslogtreecommitdiffstats
path: root/tests/limits/test_timed.py
blob: 8a1119bd084273497227e1deb2d90cc5a4320ce5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import math
import time
from unittest import TestCase

from snekbox.limits.timed import time_limit


class TimedTests(TestCase):
    def test_sleep(self):
        """Test that a sleep can be interrupted."""
        _finished = False
        start = time.perf_counter()
        with self.assertRaises(TimeoutError):
            with time_limit(1):
                time.sleep(2)
                _finished = True
        end = time.perf_counter()
        self.assertLess(end - start, 2)
        self.assertFalse(_finished)

    def test_iter(self):
        """Test that a long-running built-in function can be interrupted."""
        _result = 0
        start = time.perf_counter()
        with self.assertRaises(TimeoutError):
            with time_limit(1):
                _result = math.factorial(2**30)
        end = time.perf_counter()
        self.assertEqual(_result, 0)
        self.assertLess(end - start, 2)