LCOV - code coverage report
Current view: top level - src/database - Database.test.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 54 54 100.0 %
Date: 2025-04-29 15:59:52 Functions: 6 6 100.0 %

          Line data    Source code
       1             : // SPDX-FileCopyrightText: 2024 Pairinteraction Developers
       2             : // SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : #include "pairinteraction/database/Database.hpp"
       5             : 
       6             : #include "pairinteraction/basis/BasisAtom.hpp"
       7             : #include "pairinteraction/database/AtomDescriptionByParameters.hpp"
       8             : #include "pairinteraction/database/AtomDescriptionByRanges.hpp"
       9             : #include "pairinteraction/enums/OperatorType.hpp"
      10             : #include "pairinteraction/ket/KetAtom.hpp"
      11             : #include "pairinteraction/operator/OperatorAtom.hpp"
      12             : 
      13             : #include <doctest/doctest.h>
      14             : 
      15             : namespace pairinteraction {
      16           1 : DOCTEST_TEST_CASE("get a KetAtom") {
      17           1 :     Database &database = Database::get_global_instance();
      18             : 
      19           1 :     AtomDescriptionByParameters description;
      20           1 :     description.quantum_number_n = 60;
      21           1 :     description.quantum_number_l = 0;
      22           1 :     description.quantum_number_m = 0.5;
      23             : 
      24           1 :     auto ket = database.get_ket("Rb", description);
      25             : 
      26           1 :     DOCTEST_MESSAGE("KetAtom: ", *ket);
      27           1 : }
      28             : 
      29           1 : DOCTEST_TEST_CASE("too large quantum number m") {
      30           1 :     Database &database = Database::get_global_instance();
      31             : 
      32           1 :     AtomDescriptionByParameters description;
      33           1 :     description.quantum_number_n = 60;
      34           1 :     description.quantum_number_l = 0;
      35           1 :     description.quantum_number_m = 1.5;
      36             : 
      37           3 :     DOCTEST_CHECK_THROWS(database.get_ket("Rb", description));
      38           1 : }
      39             : 
      40           1 : DOCTEST_TEST_CASE("not uniquely specified ket") {
      41           1 :     Database &database = Database::get_global_instance();
      42             : 
      43           1 :     AtomDescriptionByParameters description;
      44           1 :     description.quantum_number_n = 60;
      45           1 :     description.quantum_number_l = 0.9;
      46           1 :     description.quantum_number_m = 0.5;
      47             : 
      48           3 :     DOCTEST_CHECK_THROWS(database.get_ket("Rb", description));
      49           1 : }
      50             : 
      51           1 : DOCTEST_TEST_CASE("uniquely specified ket") {
      52           1 :     Database &database = Database::get_global_instance();
      53             : 
      54           1 :     AtomDescriptionByParameters description;
      55           1 :     description.quantum_number_n = 60;
      56           1 :     description.quantum_number_l = 0.9;
      57           1 :     description.quantum_number_j = 0.5;
      58           1 :     description.quantum_number_m = 0.5;
      59             : 
      60           1 :     DOCTEST_CHECK_NOTHROW(database.get_ket("Rb", description));
      61           1 : }
      62             : 
      63           1 : DOCTEST_TEST_CASE("get a BasisAtom") {
      64           1 :     Database &database = Database::get_global_instance();
      65             : 
      66           1 :     AtomDescriptionByRanges description;
      67           1 :     description.range_quantum_number_n = {60, 60};
      68           1 :     description.range_quantum_number_l = {0, 1};
      69             : 
      70           1 :     auto basis = database.get_basis<double>("Rb", description, {});
      71             : 
      72          17 :     for (const auto &ket : *basis) {
      73           8 :         DOCTEST_MESSAGE("KetAtom: ", *ket);
      74           8 :     }
      75           1 : }
      76             : 
      77           1 : DOCTEST_TEST_CASE("get an OperatorAtom") {
      78           1 :     Database &database = Database::get_global_instance();
      79             : 
      80           1 :     AtomDescriptionByRanges description;
      81           1 :     description.range_quantum_number_n = {60, 60};
      82           1 :     description.range_quantum_number_l = {0, 1};
      83             : 
      84           1 :     auto basis = database.get_basis<double>("Rb", description, {});
      85             : 
      86             :     auto dipole =
      87           1 :         database.get_matrix_elements<double>(basis, basis, OperatorType::ELECTRIC_DIPOLE, 0);
      88             : 
      89           1 :     DOCTEST_MESSAGE("Number of basis states: ", basis->get_number_of_states());
      90           1 :     DOCTEST_MESSAGE("Number of non-zero entries: ", dipole.nonZeros());
      91           1 : }
      92             : } // namespace pairinteraction

Generated by: LCOV version 1.16