From 95d219a9a4347b400b3b21fc2c57156e4a812c2f Mon Sep 17 00:00:00 2001 From: Alberto Gallegos Ramonet Date: Mon, 19 May 2025 22:22:33 +0100 Subject: [PATCH] energy: Add generic-battery-test.cc --- src/energy/CMakeLists.txt | 1 + src/energy/test/generic-battery-test.cc | 85 +++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100755 src/energy/test/generic-battery-test.cc diff --git a/src/energy/CMakeLists.txt b/src/energy/CMakeLists.txt index b79dd0e56..1e12f5821 100644 --- a/src/energy/CMakeLists.txt +++ b/src/energy/CMakeLists.txt @@ -40,4 +40,5 @@ build_lib( model/simple-device-energy-model.h LIBRARIES_TO_LINK ${libnetwork} TEST_SOURCES test/basic-energy-harvester-test.cc + test/generic-battery-test.cc ) diff --git a/src/energy/test/generic-battery-test.cc b/src/energy/test/generic-battery-test.cc new file mode 100755 index 000000000..9e506da4c --- /dev/null +++ b/src/energy/test/generic-battery-test.cc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2024 Tokushima University, Japan + * + * SPDX-License-Identifier: GPL-2.0-only + * + * Author: Alberto Gallegos Ramonet + * Based on the works of Andrea Sacco (2010) + */ + +#include "ns3/core-module.h" +#include "ns3/energy-module.h" + +using namespace ns3; +using namespace ns3::energy; + +/** + * @ingroup energy-tests + * + * @brief Discharge a battery test + */ +class DischargeBatteryTestCase : public TestCase +{ + public: + DischargeBatteryTestCase(); + + void DoRun() override; + + Ptr m_node; //!< Node to aggregate the source to. +}; + +DischargeBatteryTestCase::DischargeBatteryTestCase() + : TestCase("Discharge a Li-Ion Panasonic CGR18650DA battery") +{ +} + +void +DischargeBatteryTestCase::DoRun() +{ + // This test demonstrates that the battery reach its cutoff voltage in a little less than 1 + // hour. When discharged with a constant current of 2.33 A (Equivalent to 1C). + // Note: The cutoff voltage is only reached within this time for the specified battery + // (PANASONIC CGR18650DA Li-Ion). + + Ptr node = CreateObject(); + GenericBatteryModelHelper batteryHelper; + Ptr batteryModel = + DynamicCast(batteryHelper.Install(node, PANASONIC_CGR18650DA_LION)); + + Ptr consumptionEnergyModel = CreateObject(); + consumptionEnergyModel->SetEnergySource(batteryModel); + batteryModel->AppendDeviceEnergyModel(consumptionEnergyModel); + consumptionEnergyModel->SetNode(node); + + // Discharge the battery with a constant current of 2.33 A (1C) + consumptionEnergyModel->SetCurrentA(2.33); + + Simulator::Stop(Seconds(3459)); + Simulator::Run(); + Simulator::Destroy(); + + NS_TEST_ASSERT_MSG_EQ_TOL(batteryModel->GetSupplyVoltage(), + 3.0, + 1.0e-2, + "Cutoff voltage not reached"); +} + +/** + * @ingroup energy-tests + * + * @brief Generic battery TestSuite + */ +class GenericBatteryTestSuite : public TestSuite +{ + public: + GenericBatteryTestSuite(); +}; + +GenericBatteryTestSuite::GenericBatteryTestSuite() + : TestSuite("generic-battery-test", Type::UNIT) +{ + AddTestCase(new DischargeBatteryTestCase, TestCase::Duration::QUICK); +} + +/// create an instance of the test suite +static GenericBatteryTestSuite g_genericBatteryTestSuite;