#ifndef MESH_DATA_BASE_FOR_TESTS_HPP
#define MESH_DATA_BASE_FOR_TESTS_HPP

#include <mesh/IMesh.hpp>

template <size_t Dimension>
class Connectivity;

template <typename ConnectivityT>
class Mesh;

#include <memory>

class MeshDataBaseForTests
{
 private:
  explicit MeshDataBaseForTests();

  static const MeshDataBaseForTests* m_instance;

  std::shared_ptr<const IMesh> m_cartesian_1d_mesh;
  std::shared_ptr<const IMesh> m_cartesian_2d_mesh;
  std::shared_ptr<const IMesh> m_cartesian_3d_mesh;

 public:
  template <size_t Dimension>
  const Mesh<Connectivity<Dimension>>& cartesianMesh() const;

  static const MeshDataBaseForTests& get();
  static void create();
  static void destroy();

  ~MeshDataBaseForTests() = default;
};

#endif   // MESH_DATA_BASE_FOR_TESTS_HPP