"""Testes que garantem paridade numérica com a versão JS."""
import math
from fluxo_caixa_nirlene.analysis.finance import vpl, tir, payback


def test_vpl_taxa_zero():
    assert vpl(0.0, [-100, 50, 50, 50]) == 50.0


def test_vpl_conhecido():
    # VPL(10%, [-1000, 600, 600]) ≈ 41.32...
    v = vpl(0.10, [-1000, 600, 600])
    assert abs(v - 41.3223) < 1e-3


def test_tir_caso_classico():
    # TIR de [-1000, 1100] = 10%
    r = tir([-1000, 1100])
    assert abs(r - 0.10) < 1e-5


def test_tir_sem_mudanca_de_sinal_eh_nan():
    assert math.isnan(tir([100, 200, 300]))
    assert math.isnan(tir([-100, -200, -300]))


def test_payback_simples():
    p = payback([-300, 100, 100, 100, 100], tma=0.1)
    assert p.periodo_simples == 3
    # descontado é maior
    assert p.periodo_descontado >= p.periodo_simples
