test(execution): add correctness tests of ndarray operators

closes #931
This commit is contained in:
Benoit Chevallier-Mames
2021-11-18 14:25:54 +01:00
committed by Benoit Chevallier
parent a5b1d6232e
commit 2fdf22bf4e

View File

@@ -251,7 +251,7 @@ def mix_x_and_y_and_call_binary_f_two(func, sotc, c, x, y):
return z
def check_is_good_execution(compiler_engine, function, args):
def check_is_good_execution(compiler_engine, function, args, verbose=True):
"""Run several times the check compiler_engine.run(*args) == function(*args). If always wrong,
return an error. One can set the expected probability of success of one execution and the
number of tests, to finetune the probability of bad luck, ie that we run several times the
@@ -263,7 +263,8 @@ def check_is_good_execution(compiler_engine, function, args):
for i in range(1, nb_tries + 1):
if numpy.array_equal(compiler_engine.run(*args), function(*args)):
# Good computation after i tries
print(f"Good computation after {i} tries")
if verbose:
print(f"Good computation after {i} tries")
return
# Bad computation after nb_tries
@@ -682,6 +683,53 @@ def test_compile_and_run_correctness(
assert compiler_engine.run(*args) == function(*args)
@pytest.mark.parametrize(
"function,input_ranges,list_of_arg_names",
[
pytest.param(lambda x: x ** 2, ((0, 10),), ["x"]),
pytest.param(lambda x: 2 ** (x % 5), ((0, 20),), ["x"]),
# FIXME: Fails, #949 pytest.param(lambda x: abs(~x), ((0, 13),), ["x"]),
pytest.param(lambda x: x << 1, ((0, 13),), ["x"]),
# FIXME: Fails, #949 pytest.param(lambda x: 2 << (x % 6), ((0, 13),), ["x"]),
pytest.param(lambda x: x >> 2, ((30, 100),), ["x"]),
pytest.param(lambda x: 115 >> (x % 3), ((0, 17),), ["x"]),
pytest.param(lambda x: x % 7, ((0, 100),), ["x"]),
pytest.param(lambda x: x > 7, ((0, 20),), ["x"]),
pytest.param(lambda x: x < 11, ((0, 20),), ["x"]),
pytest.param(lambda x: x >= 8, ((0, 20),), ["x"]),
pytest.param(lambda x: x <= 10, ((0, 20),), ["x"]),
pytest.param(lambda x: x == 15, ((0, 20),), ["x"]),
pytest.param(lambda x: x & 14, ((0, 20),), ["x"]),
pytest.param(lambda x: x | 18, ((0, 20),), ["x"]),
pytest.param(lambda x: x ^ 23, ((0, 20),), ["x"]),
pytest.param(lambda x: x % 3, ((0, 20),), ["x"]),
pytest.param(lambda x: 17 & x, ((0, 20),), ["x"]),
pytest.param(lambda x: 19 | x, ((0, 20),), ["x"]),
pytest.param(lambda x: 45 ^ x, ((0, 20),), ["x"]),
pytest.param(lambda x: 19 % (x + 1), ((0, 20),), ["x"]),
],
)
def test_compile_and_run_correctness__for_prog_with_tlu(
function, input_ranges, list_of_arg_names, default_compilation_configuration
):
"""Test correctness of results when running a compiled function which uses a TLU"""
function_parameters = {
arg_name: EncryptedScalar(Integer(64, False)) for arg_name in list_of_arg_names
}
compiler_engine = compile_numpy_function(
function,
function_parameters,
data_gen(tuple(range(x[0], x[1] + 1) for x in input_ranges)),
default_compilation_configuration,
)
for _ in range(16):
args = [random.randint(low, high) for (low, high) in input_ranges]
check_is_good_execution(compiler_engine, function, args, verbose=False)
@pytest.mark.parametrize(
"function,parameters,inputset,test_input,expected_output",
[