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