from swarms.utils import math_eval


def func1_no_exception(x):
    return x + 2


def func2_no_exception(x):
    return x + 2


def func1_with_exception(x):
    raise ValueError()


def func2_with_exception(x):
    raise ValueError()


def test_same_results_no_exception(caplog):
    @math_eval(func1_no_exception, func2_no_exception)
    def test_func(x):
        return x

    result1, result2 = test_func(5)
    assert result1 == result2 == 7
    assert "Outputs do not match" not in caplog.text


def test_func1_exception(caplog):
    @math_eval(func1_with_exception, func2_no_exception)
    def test_func(x):
        return x

    result1, result2 = test_func(5)
    assert result1 is None
    assert result2 == 7
    assert "Error in func1:" in caplog.text


# similar tests for func2_with_exception and when func1 and func2 return different results