from itertools import product

import numpy as np
import pytest

from ndbioimage import Imread

r = np.random.randint(0, 255, (64, 64, 2, 3, 4))
im = Imread(r)
a = np.array(im)


@pytest.mark.parametrize(
    "fun_and_axis",
    product(
        (
            np.sum,
            np.nansum,
            np.min,
            np.nanmin,
            np.max,
            np.nanmax,
            np.argmin,
            np.argmax,
            np.mean,
            np.nanmean,
            np.var,
            np.nanvar,
            np.std,
            np.nanstd,
        ),
        (None, 0, 1, 2, 3, 4),
    ),
)
def test_ufuncs(fun_and_axis):
    fun, axis = fun_and_axis
    assert np.all(np.isclose(fun(im, axis), fun(a, axis))), (
        f"function {fun.__name__} over axis {axis} does not give the correct result"
    )
