Line data Source code
1 : # SPDX-FileCopyrightText: 2024 PairInteraction Developers
2 : # SPDX-License-Identifier: LGPL-3.0-or-later
3 :
4 1 : from __future__ import annotations
5 :
6 1 : from typing import TYPE_CHECKING
7 :
8 1 : import pytest
9 :
10 1 : from tests.constants import (
11 : GAUSS_IN_ATOMIC_UNITS,
12 : HARTREE_IN_GHZ,
13 : HARTREE_IN_INVERSE_CM,
14 : HARTREE_IN_JOULES,
15 : VOLT_PER_CM_IN_ATOMIC_UNITS,
16 : )
17 :
18 : if TYPE_CHECKING:
19 : from pairinteraction.units import PintFloat
20 : from pint import UnitRegistry
21 :
22 :
23 1 : def test_hartree_to_joules(ureg: UnitRegistry) -> None:
24 : """Test conversion from Hartree to Joules."""
25 1 : one_hartree = 1 * ureg.hartree
26 1 : one_hartree_in_joules = one_hartree.to("joule")
27 1 : assert pytest.approx(one_hartree_in_joules.magnitude, rel=1e-12) == HARTREE_IN_JOULES # NOSONAR
28 :
29 :
30 1 : def test_joules_to_hartree(ureg: UnitRegistry) -> None:
31 : """Test conversion from Joules to Hartree."""
32 1 : one_hartree_in_joules = HARTREE_IN_JOULES * ureg.joule
33 1 : result = one_hartree_in_joules.to_base_units()
34 1 : assert pytest.approx(result.magnitude, rel=1e-12) == 1.0 # NOSONAR
35 :
36 :
37 1 : def test_hartree_to_thz(ureg: UnitRegistry) -> None:
38 : """Test conversion from Hartree to THz."""
39 1 : one_hartree = 1 * ureg.hartree
40 1 : one_hartree_in_ghz = one_hartree.to("gigahertz", "spectroscopy")
41 1 : assert pytest.approx(one_hartree_in_ghz.magnitude, rel=1e-12) == HARTREE_IN_GHZ # NOSONAR
42 :
43 :
44 1 : def test_hartree_to_inverse_cm(ureg: UnitRegistry) -> None:
45 : """Test conversion from Hartree to inverse cm."""
46 1 : one_hartree = 1 * ureg.hartree
47 1 : one_hartree_in_inverse_cm = one_hartree.to("1/cm", "spectroscopy")
48 1 : assert pytest.approx(one_hartree_in_inverse_cm.magnitude, rel=1e-12) == HARTREE_IN_INVERSE_CM # NOSONAR
49 :
50 :
51 1 : def test_electric_field_to_atomic_units(ureg: UnitRegistry) -> None:
52 : """Test conversion from V/cm to atomic units of electric field."""
53 1 : one_v_per_cm: PintFloat = ureg.Quantity(1, "volt / centimeter")
54 1 : one_v_per_cm_in_atomic_units = one_v_per_cm.to_base_units()
55 1 : assert pytest.approx(one_v_per_cm_in_atomic_units.magnitude, rel=1e-12) == VOLT_PER_CM_IN_ATOMIC_UNITS # NOSONAR
56 :
57 :
58 1 : def test_magnetic_field_to_atomic_units(ureg: UnitRegistry) -> None:
59 : """Test conversion from Gauss to atomic units of magnetic field."""
60 1 : one_gauss = 1e-4 * ureg.tesla
61 1 : one_gauss_in_atomic_units = one_gauss.to_base_units()
62 1 : assert pytest.approx(one_gauss_in_atomic_units.magnitude, rel=1e-12) == GAUSS_IN_ATOMIC_UNITS # NOSONAR
|