pairinteraction
A Rydberg Interaction Calculator
Ket.test.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
5
8
9#include <doctest/doctest.h>
10#include <memory>
11#include <sstream>
12
13namespace pairinteraction {
14DOCTEST_TEST_CASE("constructing a class derived from ket") {
15 class KetDerivedCreator;
16
17 class KetDerived : public Ket {
18 friend class KetDerivedCreator;
19 struct Private {};
20
21 public:
22 KetDerived(Private /*unused*/, double f, double m, Parity p) : Ket(0, f, m, p) {}
23 std::string get_label() const override { return "my_label"; }
24 std::shared_ptr<KetDerived>
25 get_ket_for_different_quantum_number_m(double new_quantum_number_m) const {
26 auto ket = *this;
27 ket.quantum_number_m = new_quantum_number_m;
28 return std::make_shared<KetDerived>(ket);
29 }
30 };
31
32 class KetDerivedCreator {
33 public:
34 KetDerivedCreator(double f, double m, Parity p) : f(f), m(m), p(p) {}
35 std::shared_ptr<const KetDerived> create() const {
36 return std::make_shared<const KetDerived>(KetDerived::Private(), f, m, p);
37 }
38
39 private:
40 double f;
41 double m;
42 Parity p;
43 };
44
45 auto ket = KetDerivedCreator(2.0F, 3.0F, Parity::EVEN).create();
46
47 // Check that the label can be printed
48 std::stringstream ss;
49 ss << *ket;
50 DOCTEST_CHECK(ss.str() == "my_label");
51
52 // Output the label to the doctest log
53 DOCTEST_MESSAGE("Ket: ", *ket);
54}
55} // namespace pairinteraction
Base class for a ket.
Definition: Ket.hpp:25
double quantum_number_m
Definition: Ket.hpp:56
DOCTEST_TEST_CASE("create a basis for strontium 88")