Skip to content

Commit

Permalink
Add is_perfect_power() unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mhostetter committed Feb 10, 2022
1 parent 9e5fe69 commit 0932530
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 10 deletions.
12 changes: 11 additions & 1 deletion scripts/generate_int_test_vectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,11 +242,21 @@ def save_pickle(d, folder, name):
# save_pickle(d, FOLDER, "is_composite.pkl")

set_seed(SEED + 307)
X = [random.randint(-100, 100) for _ in range(20)] + [random.randint(100, 1_000_000_000) for _ in range(20)]
X = [random.randint(-256, 257) for _ in range(20)] + [random.randint(100, 1_000_000_000) for _ in range(20)]
Z = [0,]*len(X)
for i in range(len(X)):
x = X[i]
z = is_prime_power(x)
Z[i] = bool(z)
d = {"X": X, "Z": Z}
save_pickle(d, FOLDER, "is_prime_power.pkl")

set_seed(SEED + 308)
X = list(range(-256, 257)) + [random.randint(100, 1_000_000_000) for _ in range(20)]
Z = [0,]*len(X)
for i in range(len(X)):
x = X[i]
z = Integer(x).is_perfect_power()
Z[i] = bool(z)
d = {"X": X, "Z": Z}
save_pickle(d, FOLDER, "is_perfect_power.pkl")
5 changes: 5 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,8 @@ def is_prime():
@pytest.fixture(scope="session")
def is_prime_power():
return read_pickle("is_prime_power.pkl")


@pytest.fixture(scope="session")
def is_perfect_power():
return read_pickle("is_perfect_power.pkl")
Binary file added tests/data/is_perfect_power.pkl
Binary file not shown.
Binary file modified tests/data/is_prime_power.pkl
Binary file not shown.
9 changes: 0 additions & 9 deletions tests/test_factor.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,15 +246,6 @@ def test_divisor_sigma():
assert [galois.divisor_sigma(n, k=3) for n in range(1, 43)] == sigma_3


def test_is_perfect_power():
# https://oeis.org/A001597
perfect_powers = np.array([1,4,8,9,16,25,27,32,36,49,64,81,100,121,125,128,144,169,196,216,225,243,256,289,324,343,361,400,441,484,512,529,576,625,676,729,784,841,900,961,1000,1024,1089,1156,1225,1296,1331,1369,1444,1521,1600,1681,1728,1764])
n = np.arange(1, perfect_powers[-1] + 1)
is_perfect_power = np.zeros(n.size, dtype=bool)
is_perfect_power[perfect_powers - 1] = True # -1 for 1-indexed
assert [galois.is_perfect_power(ni) for ni in n] == is_perfect_power.tolist()


def test_is_square_free():
# https://oeis.org/A005117
square_frees = np.array([1,2,3,5,6,7,10,11,13,14,15,17,19,21,22,23,26,29,30,31,33,34,35,37,38,39,41,42,43,46,47,51,53,55,57,58,59,61,62,65,66,67,69,70,71,73,74,77,78,79,82,83,85,86,87,89,91,93,94,95,97,101,102,103,105,106,107,109,110,111,113])
Expand Down
11 changes: 11 additions & 0 deletions tests/test_primes.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,17 @@ def test_is_prime_power(is_prime_power):
assert galois.is_prime_power(X[i]) == Z[i]


def test_is_perfect_power_exceptions():
with pytest.raises(TypeError):
galois.is_perfect_power(13.0)


def test_is_perfect_power(is_perfect_power):
X, Z = is_perfect_power["X"], is_perfect_power["Z"]
for i in range(len(X)):
assert galois.is_perfect_power(X[i]) == Z[i]


def test_fermat_primality_test_exceptions():
with pytest.raises(TypeError):
galois.fermat_primality_test(13.0)
Expand Down

0 comments on commit 0932530

Please sign in to comment.