From eda75656ca8b7fa93126318017ca4e81eeab2f03 Mon Sep 17 00:00:00 2001 From: Shaun <shaun.roe@cern.ch> Date: Thu, 17 Apr 2025 16:37:04 +0200 Subject: [PATCH 1/2] add start of test for Material, and complete test for Element --- GeoModelCore/GeoModelKernel/CMakeLists.txt | 3 +- .../GeoModelKernel/tests/testGeoElement.cxx | 94 +++++++++++++++++++ .../GeoModelKernel/tests/testGeoMaterial.cxx | 17 ++++ 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 GeoModelCore/GeoModelKernel/tests/testGeoElement.cxx create mode 100644 GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx diff --git a/GeoModelCore/GeoModelKernel/CMakeLists.txt b/GeoModelCore/GeoModelKernel/CMakeLists.txt index 94e322406..025a6a4a0 100644 --- a/GeoModelCore/GeoModelKernel/CMakeLists.txt +++ b/GeoModelCore/GeoModelKernel/CMakeLists.txt @@ -66,4 +66,5 @@ endforeach() include(GoogleTest) gtest_discover_tests(testRCBase) gtest_discover_tests(testGeoGraphNode) - +gtest_discover_tests(testGeoMaterial) +gtest_discover_tests(testGeoElement) diff --git a/GeoModelCore/GeoModelKernel/tests/testGeoElement.cxx b/GeoModelCore/GeoModelKernel/tests/testGeoElement.cxx new file mode 100644 index 000000000..0769a9cb9 --- /dev/null +++ b/GeoModelCore/GeoModelKernel/tests/testGeoElement.cxx @@ -0,0 +1,94 @@ +/* + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration +*/ + + +#include "GeoModelKernel/GeoElement.h" +#include <gtest/gtest.h> + +class SampleElement{ + private: + const std::string m_name{"Rhodium"}; + const std::string m_symbol{"Rh"}; + const double m_Z{45.}; + const double m_A{102.90549*GeoModelKernelUnits::gram/GeoModelKernelUnits::mole}; + GeoElement * m_ptr{}; + public: + GeoElement * ptr() const {return m_ptr;} + SampleElement():m_ptr(new GeoElement(m_name, m_symbol, m_Z, m_A)){ + m_ptr->ref(); + } + ~SampleElement(){m_ptr->unref();} +}; + + +TEST(GeoElement, CanBeConstructedOnHeap) { + GeoElement * pG{}; + const std::string name{"Rhodium"}; + const std::string symbol{"Rh"}; + const double Z{45.}; + const double A{102.90549}; + EXPECT_NO_THROW(pG = new GeoElement(name, symbol, Z, A)); + pG->ref(); + pG->unref(); //should be destroyed here +} + +TEST(GeoElement,CalculatesNCorrectly){ + SampleElement rhodium; + const auto p = rhodium.ptr(); + EXPECT_EQ(p->getN(), 102.90549); +} + +TEST(GeoElement,GivesCorrectName){ + SampleElement rhodium; + const auto p = rhodium.ptr(); + EXPECT_EQ(p->getName(),"Rhodium"); +} + +TEST(GeoElement,GivesCorrectSymbol){ + SampleElement rhodium; + const auto p = rhodium.ptr(); + EXPECT_EQ(p->getSymbol(),"Rh"); +} + +TEST(GeoElement,GivesCorrectZValue){ + SampleElement rhodium; + const auto p = rhodium.ptr(); + EXPECT_EQ(p->getZ(),45); +} +TEST(GeoElement,GivesCorrectAverageAtomicMass){ + SampleElement rhodium; + const auto p = rhodium.ptr(); + EXPECT_EQ(p->getA(),102.90549*GeoModelKernelUnits::gram/GeoModelKernelUnits::mole); +} + +TEST(GeoElement,GivesCorrectRadiationLength){ + SampleElement rhodium; + const auto p = rhodium.ptr(); + EXPECT_EQ(p->getRadTsai(),1.8442455962801794e-21); +} + +TEST(GeoElement,EqualityOperator){ + const std::string name{"Rhodium"}; + const std::string symbol{"Rh"}; + const double Z{45.}; + const double A{102.90549*GeoModelKernelUnits::gram/GeoModelKernelUnits::mole}; + auto pG = new GeoElement(name, symbol, Z, A); + SampleElement rhodium; + ASSERT_TRUE(*pG == *(rhodium.ptr())); +} + +TEST(GeoElement,InequalityOperator){ + const std::string name{"Rhodium"}; + const std::string symbol{"Rh"}; + const double Z{45.}; + //alter A value _slightly_ + const double A{102.91*GeoModelKernelUnits::gram/GeoModelKernelUnits::mole}; + auto pG = new GeoElement(name, symbol, Z, A); + SampleElement rhodium; + ASSERT_TRUE(*pG != *(rhodium.ptr())); + pG->ref(); + pG->unref(); //should be destroyed here + +} + diff --git a/GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx b/GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx new file mode 100644 index 000000000..484655664 --- /dev/null +++ b/GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx @@ -0,0 +1,17 @@ +/* + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration +*/ + + +#include "GeoModelKernel/GeoMaterial.h" +#include <gtest/gtest.h> + + +TEST(GeoMaterial, CanBeConstructedOnHeap) { + GeoMaterial * pG{}; + const std::string name{"Shaun"}; + const double dense{13.0}; + EXPECT_NO_THROW(pG = new GeoMaterial(name, dense));//Shaun is dense + pG->ref(); + pG->unref(); //should be destroyed here +} -- GitLab From c4b29ef78c4c7fc4f722afd415e7734a5b1fa107 Mon Sep 17 00:00:00 2001 From: Shaun <shaun.roe@cern.ch> Date: Thu, 17 Apr 2025 17:11:10 +0200 Subject: [PATCH 2/2] update units --- GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx b/GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx index 484655664..b9b59440c 100644 --- a/GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx +++ b/GeoModelCore/GeoModelKernel/tests/testGeoMaterial.cxx @@ -6,12 +6,16 @@ #include "GeoModelKernel/GeoMaterial.h" #include <gtest/gtest.h> +using namespace GeoModelKernelUnits; + TEST(GeoMaterial, CanBeConstructedOnHeap) { GeoMaterial * pG{}; const std::string name{"Shaun"}; - const double dense{13.0}; + const double dense{13.0*gram/centimeter3}; EXPECT_NO_THROW(pG = new GeoMaterial(name, dense));//Shaun is dense pG->ref(); pG->unref(); //should be destroyed here } + + -- GitLab