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_radix2_roundtrip_randomly(self): TRIALS = 10 for _ in range(TRIALS): veclen = 2**random.randint(0, 16) vallimit = 2**random.randint(1, 16) invec = [random.randrange(vallimit) for _ in range(veclen)] mod = ntt.find_modulus(len(invec), vallimit) root = ntt.find_primitive_root(len(invec), mod - 1, mod) vec = list(invec) ntt.transform_radix_2(vec, root, mod) ntt.transform_radix_2(vec, ntt.reciprocal(root, mod), mod) scaler = ntt.reciprocal(veclen, mod) vec = [(x * scaler % mod) for x in vec] self.assertEqual(invec, vec)