/* ***********************************************************************
//
//   Copyright (C) 2025 -- The 4D-STAR Collaboration
//   File Author: Emily Boudreaux
//   Last Modified: March 18, 2025
//
//   4DSSE is free software; you can use it and/or modify
//   it under the terms and restrictions the GNU General Library Public
//   License version 3 (GPLv3) as published by the Free Software Foundation.
//
//   4DSSE is distributed in the hope that it will be useful,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//   See the GNU Library General Public License for more details.
//
//   You should have received a copy of the GNU Library General Public License
//   along with this software; if not, write to the Free Software
//   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// *********************************************************************** */
#include <gtest/gtest.h>


#include "quill/LogMacros.h"
#include "mfem.hpp"
#include "polySolver.h"
#include "probe.h"
#include "config.h"

std::string CONFIG_FILENAME = std::string(getenv("MESON_SOURCE_ROOT")) + "/tests/testsConfig.yaml";


class polyTest : public ::testing::Test {};

TEST_F(polyTest, Solve) {
    using namespace serif::polytrope;

    serif::config::Config& config = serif::config::Config::getInstance();
    config.loadConfig(CONFIG_FILENAME);
    serif::probe::LogManager& logManager = serif::probe::LogManager::getInstance();
    quill::Logger* logger = logManager.getLogger("log");


    LOG_INFO(logger, "Starting polytrope solve test 1...");
    config.loadConfig(CONFIG_FILENAME);

    double polytropicIndex = config.get<double>("Tests:Poly:Index", 1);
    LOG_INFO(logger, "Solving polytrope with n = {:0.2f}", polytropicIndex);


    PolySolver polytrope(polytropicIndex, 1);
    LOG_INFO(logger, "Solving polytrope...");
    EXPECT_NO_THROW(polytrope.solve());
    LOG_INFO(logger, "Polytrope solved.");
}