示例#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)
示例#2
0
	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)
示例#3
0
	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)