import { describe, it, expect } from 'vitest';
import { computeCpiSimplified, clampCpi } from '../internal-pressure';

describe('Pressão Interna — sec. 6.3', () => {
  describe('computeCpiSimplified', () => {
    it('Duas faces opostas permeáveis: vento ⊥ face permeável → +0,2', () => {
      expect(computeCpiSimplified({ case: 'two-opposite-permeable', windAngle: 0 })).toBe(0.2);
    });
    it('Duas faces opostas permeáveis: vento ⊥ face impermeável → -0,3', () => {
      expect(computeCpiSimplified({ case: 'two-opposite-permeable', windAngle: 90 })).toBe(-0.3);
    });
    it('Quatro faces igualmente permeáveis → 0', () => {
      expect(computeCpiSimplified({ case: 'four-equally-permeable' })).toBe(0);
    });
    it('Estanque → -0,2', () => {
      expect(computeCpiSimplified({ case: 'airtight' })).toBe(-0.2);
    });
    it('Abertura dominante barlavento (ratio=1) → +0,3', () => {
      expect(computeCpiSimplified({ case: 'dominant-windward', ratio: 1 })).toBe(0.3);
    });
    it('Abertura dominante barlavento (ratio=4) → +0,8', () => {
      expect(computeCpiSimplified({ case: 'dominant-windward', ratio: 4 })).toBe(0.8);
    });
  });

  describe('clampCpi (limites normativos)', () => {
    it('Limita em +0,9', () => {
      expect(clampCpi(1.5)).toBe(0.9);
    });
    it('Limita em -0,9', () => {
      expect(clampCpi(-1.5)).toBe(-0.9);
    });
    it('Preserva valor dentro do intervalo', () => {
      expect(clampCpi(-0.3)).toBe(-0.3);
    });
  });
});