LCOV - code coverage report
Current view: top level - src/ket - KetAtomCreator.test.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 52 52 100.0 %
Date: 2026-08-17 11:38:34 Functions: 4 4 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/ket/KetAtomCreator.hpp"
       5             : 
       6             : #include "pairinteraction/database/Database.hpp"
       7             : #include "pairinteraction/ket/KetAtom.hpp"
       8             : 
       9             : #include <doctest/doctest.h>
      10             : 
      11             : namespace pairinteraction {
      12           1 : DOCTEST_TEST_CASE("create a ket for rubidium") {
      13           1 :     Database &database = Database::get_global_instance();
      14           1 :     auto ket = KetAtomCreator("Rb", 60, 1, 0.5, 0.5).create(database);
      15           1 :     DOCTEST_CHECK(ket->get_species() == "Rb");
      16           1 :     DOCTEST_CHECK(ket->get_quantum_number("n") == 60);
      17           1 :     DOCTEST_CHECK(ket->get_quantum_number("l") == 1);
      18           1 :     DOCTEST_CHECK(ket->get_quantum_number("f") == 0.5);
      19           1 :     DOCTEST_CHECK(ket->get_quantum_number("j") == 0.5);
      20           1 :     DOCTEST_CHECK(ket->get_quantum_number("m") == 0.5);
      21           1 :     DOCTEST_CHECK(ket->get_quantum_number("s") == 0.5);
      22           1 :     DOCTEST_CHECK(ket->get_quantum_number("parity") == -1); // odd parity
      23           1 : }
      24             : 
      25           1 : DOCTEST_TEST_CASE("create a ket for strontium") {
      26           1 :     Database &database = Database::get_global_instance();
      27           1 :     auto ket = KetAtomCreator()
      28           2 :                    .set_species("Sr88_sqdt")
      29           2 :                    .set_quantum_number("n", 60)
      30           2 :                    .set_quantum_number("l", 1)
      31           2 :                    .set_quantum_number("f", 1)
      32           2 :                    .set_quantum_number("m", 0)
      33           2 :                    .set_quantum_number("s", 0)
      34           1 :                    .create(database);
      35           1 :     DOCTEST_CHECK(ket->get_species() == "Sr88_sqdt");
      36           1 :     DOCTEST_CHECK(ket->get_quantum_number("n") == 60);
      37           1 :     DOCTEST_CHECK(ket->get_quantum_number("f") == 1);
      38           1 :     DOCTEST_CHECK(ket->get_quantum_number("m") == 0);
      39           1 :     DOCTEST_CHECK(ket->get_quantum_number("parity") == -1); // odd parity
      40           1 : }
      41             : 
      42           1 : DOCTEST_TEST_CASE("quantum number std fallback") {
      43           1 :     Database &database = Database::get_global_instance();
      44             : 
      45             :     // n, f, and nu have no "std_<name>" column in the states table, so get_quantum_number_std
      46             :     // falls back to 0.
      47           1 :     auto ket = KetAtomCreator("Rb", 60, 0, 0.5, 0.5).create(database);
      48           1 :     DOCTEST_CHECK(ket->get_quantum_number_std("n") == 0);
      49           1 :     DOCTEST_CHECK(ket->get_quantum_number_std("f") == 0);
      50           1 :     DOCTEST_CHECK(ket->get_quantum_number_std("nu") == 0);
      51             : 
      52             :     // For an MQDT ket, quantum numbers that do have a "std_<name>" column report a nonzero spread,
      53             :     // confirming the zeros above come from the fallback and not from a stored value that is zero.
      54           1 :     auto ket_mqdt = KetAtomCreator()
      55           2 :                         .set_species("Yb171_mqdt")
      56           2 :                         .set_quantum_number("nu", 60)
      57           2 :                         .set_quantum_number("l", 0)
      58           2 :                         .set_quantum_number("f", 0.5)
      59           2 :                         .set_quantum_number("m", 0.5)
      60           1 :                         .create(database);
      61           1 :     DOCTEST_CHECK(ket_mqdt->get_quantum_number_std("l") > 0);
      62           1 :     DOCTEST_CHECK(ket_mqdt->get_quantum_number_std("n") == 0);
      63           1 : }
      64             : 
      65           1 : DOCTEST_TEST_CASE("test for equality") {
      66           1 :     Database &database = Database::get_global_instance();
      67           1 :     auto ket1 = KetAtomCreator("Rb", 60, 1, 0.5, 0.5).create(database);
      68           1 :     auto ket2 = KetAtomCreator("Rb", 60, 1, 0.5, 0.5).create(database);
      69           1 :     auto ket3 = KetAtomCreator("Rb", 60, 1, 1.5, 0.5).create(database);
      70           1 :     DOCTEST_CHECK(*ket1 == *ket2);
      71           1 :     DOCTEST_CHECK(*ket1 != *ket3);
      72           1 : }
      73             : 
      74             : } // namespace pairinteraction

Generated by: LCOV version 1.16