import pytest
import bme680


def test_calc_temperature(smbus, calibration):
    """Validate temperature calculation against mock calibration data."""
    sensor = bme680.BME680()
    sensor.calibration_data = calibration
    assert sensor._calc_temperature(501240) == pytest.approx(2669.81, 0.01)
    assert sensor.calibration_data.t_fine == pytest.approx(136668.78, 0.01)


def test_calc_pressure(smbus, calibration):
    """Validate pressure calculation against mock calibration data."""
    sensor = bme680.BME680()
    sensor.calibration_data = calibration
    sensor._calc_temperature(501240)
    assert sensor._calc_pressure(353485) == pytest.approx(98716.92, 0.01)


def test_calc_humidity(smbus, calibration):
    """Validate humidity calculation against mock calibration data."""
    sensor = bme680.BME680()
    sensor.calibration_data = calibration
    sensor._calc_temperature(501240)
    assert sensor._calc_humidity(19019) == pytest.approx(42410.28, 0.01)


def test_calc_gas_resistance(smbus, calibration):
    """Validate gas calculation against mock calibration data."""
    sensor = bme680.BME680()
    sensor.calibration_data = calibration
    assert int(sensor._calc_gas_resistance(0, 0)) == 12946860


def test_temp_offset(smbus, calibration):
    """Validate temperature calculation with offset against mock calibration data."""
    sensor = bme680.BME680()
    sensor.calibration_data = calibration
    sensor.set_temp_offset(1.99)
    assert sensor._calc_temperature(501240) == pytest.approx(2868.30, 0.01)
    assert sensor.calibration_data.t_fine == pytest.approx(146831.78, 0.01)
