Exemplo n.º 1
0
	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)
Exemplo n.º 2
0
	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)