1from numpy.testing import assert_equal
2from statsmodels.compat.scipy import _next_regular
3
4
5def test_next_regular():
6    hams = {
7        1: 1,
8        2: 2,
9        3: 3,
10        4: 4,
11        5: 5,
12        6: 6,
13        7: 8,
14        8: 8,
15        14: 15,
16        15: 15,
17        16: 16,
18        17: 18,
19        1021: 1024,
20        1536: 1536,
21        51200000: 51200000,
22        510183360: 510183360,
23        510183360 + 1: 512000000,
24        511000000: 512000000,
25        854296875: 854296875,
26        854296875 + 1: 859963392,
27        196608000000: 196608000000,
28        196608000000 + 1: 196830000000,
29        8789062500000: 8789062500000,
30        8789062500000 + 1: 8796093022208,
31        206391214080000: 206391214080000,
32        206391214080000 + 1: 206624260800000,
33        470184984576000: 470184984576000,
34        470184984576000 + 1: 470715894135000,
35        7222041363087360: 7222041363087360,
36        7222041363087360 + 1: 7230196133913600,
37        # power of 5    5**23
38        11920928955078125: 11920928955078125,
39        11920928955078125 - 1: 11920928955078125,
40        # power of 3    3**34
41        16677181699666569: 16677181699666569,
42        16677181699666569 - 1: 16677181699666569,
43        # power of 2   2**54
44        18014398509481984: 18014398509481984,
45        18014398509481984 - 1: 18014398509481984,
46        # above this, int(ceil(n)) == int(ceil(n+1))
47        19200000000000000: 19200000000000000,
48        19200000000000000 + 1: 19221679687500000,
49        288230376151711744: 288230376151711744,
50        288230376151711744 + 1: 288325195312500000,
51        288325195312500000 - 1: 288325195312500000,
52        288325195312500000: 288325195312500000,
53        288325195312500000 + 1: 288555831593533440,
54        # power of 3    3**83
55        3 ** 83 - 1: 3 ** 83,
56        3 ** 83: 3 ** 83,
57        # power of 2     2**135
58        2 ** 135 - 1: 2 ** 135,
59        2 ** 135: 2 ** 135,
60        # power of 5      5**57
61        5 ** 57 - 1: 5 ** 57,
62        5 ** 57: 5 ** 57,
63        # http://www.drdobbs.com/228700538
64        # 2**96 * 3**1 * 5**13
65        2 ** 96 * 3 ** 1 * 5 ** 13 - 1: 2 ** 96 * 3 ** 1 * 5 ** 13,
66        2 ** 96 * 3 ** 1 * 5 ** 13: 2 ** 96 * 3 ** 1 * 5 ** 13,
67        2 ** 96 * 3 ** 1 * 5 ** 13 + 1: 2 ** 43 * 3 ** 11 * 5 ** 29,
68        # 2**36 * 3**69 * 5**7
69        2 ** 36 * 3 ** 69 * 5 ** 7 - 1: 2 ** 36 * 3 ** 69 * 5 ** 7,
70        2 ** 36 * 3 ** 69 * 5 ** 7: 2 ** 36 * 3 ** 69 * 5 ** 7,
71        2 ** 36 * 3 ** 69 * 5 ** 7 + 1: 2 ** 90 * 3 ** 32 * 5 ** 9,
72        # 2**37 * 3**44 * 5**42
73        2 ** 37 * 3 ** 44 * 5 ** 42 - 1: 2 ** 37 * 3 ** 44 * 5 ** 42,
74        2 ** 37 * 3 ** 44 * 5 ** 42: 2 ** 37 * 3 ** 44 * 5 ** 42,
75        2 ** 37 * 3 ** 44 * 5 ** 42 + 1: 2 ** 20 * 3 ** 106 * 5 ** 7,
76    }
77
78    for x, y in hams.items():
79        assert_equal(_next_regular(x), y)
80