def test_transform_radix2_vs_naive(self): TRIALS = 300 for _ in range(TRIALS): veclen = 2**random.randrange(8) maxval = random.randrange(100) + 1 vec = [random.randrange(maxval + 1) for _ in range(veclen)] temp, root, mod = ntt.find_params_and_transform(vec, maxval + 1) ntt.transform_radix_2(vec, root, mod) self.assertEqual(temp, vec)
def test_transform_roundtrip_randomly(self): TRIALS = 300 for _ in range(TRIALS): veclen = random.randrange(100) + 1 maxval = random.randrange(100) + 1 vec = [random.randrange(maxval + 1) for _ in range(veclen)] temp, root, mod = ntt.find_params_and_transform(vec, maxval + 1) inv = ntt.inverse_transform(temp, root, mod) self.assertEqual(vec, inv)
def test_transform_linearity_randomly(self): TRIALS = 100 for _ in range(TRIALS): veclen = random.randrange(100) + 1 maxval = random.randrange(100) + 1 vec0 = [random.randrange(maxval + 1) for _ in range(veclen)] vec1 = [random.randrange(maxval + 1) for _ in range(veclen)] out0, root, mod = ntt.find_params_and_transform(vec0, maxval + 1) out1 = ntt.transform(vec1, root, mod) out01 = [(x + y) % mod for (x, y) in zip(out0, out1)] vec2 = [(x + y) % mod for (x, y) in zip(vec0, vec1)] out2 = ntt.transform(vec2, root, mod) self.assertEqual(out2, out01)