Belle II Software  release-05-01-25
unit.cc
1 #include <framework/gearbox/Unit.h>
2 
3 #include <framework/utilities/TestHelpers.h>
4 
5 #include <gtest/gtest.h>
6 #include <cmath>
7 
8 using namespace std;
9 using namespace Belle2;
10 
11 namespace {
13  TEST(UnitTest, MultiplyDivide)
14  {
15  //set to 10mm in standard units
16  double length = 10.0 * Unit::mm;
17  //=1.0 cm
18  EXPECT_DOUBLE_EQ(1.0, length);
19 
20  EXPECT_DOUBLE_EQ(10.0, length / Unit::mm);
21  EXPECT_DOUBLE_EQ(10000.0, length / Unit::um);
22 
23  EXPECT_DOUBLE_EQ(1e9, 1 * Unit::s);
24  }
25 
27  TEST(UnitTest, ConvertValue)
28  {
29  //check standard units
30  EXPECT_DOUBLE_EQ(1.0, Unit::convertValue(1.0, "cm"));
31  EXPECT_DOUBLE_EQ(1.0, Unit::convertValue(1.0, "ns"));
32  EXPECT_DOUBLE_EQ(1.0, Unit::convertValue(1.0, "rad"));
33  EXPECT_DOUBLE_EQ(1.0, Unit::convertValue(1.0, "GeV"));
34  EXPECT_DOUBLE_EQ(1.0, Unit::convertValue(1.0, "K"));
35  EXPECT_DOUBLE_EQ(1e-4, Unit::convertValue(1.0, "T"));
36  EXPECT_DOUBLE_EQ(1.0, Unit::convertValue(1.0, "e"));
37  EXPECT_DOUBLE_EQ(1.0, Unit::convertValue(1.0, "g/cm3"));
38 
39  //different orders of magnitude
40  EXPECT_DOUBLE_EQ(1e2, Unit::convertValue(1.0, "m"));
41  EXPECT_DOUBLE_EQ(1e5, Unit::convertValue(1.0, "km"));
42  EXPECT_DOUBLE_EQ(1e-1, Unit::convertValue(1.0, "mm"));
43  EXPECT_DOUBLE_EQ(1e-4, Unit::convertValue(1.0, "um"));
44  EXPECT_DOUBLE_EQ(1e-7, Unit::convertValue(1.0, "nm"));
45 
46  //convert some actual values
47  EXPECT_DOUBLE_EQ(5e3 * 1e2, Unit::convertValue(5e3, "m"));
48  EXPECT_DOUBLE_EQ(5e-3 * 1e2, Unit::convertValue(5e-3, "m"));
49  EXPECT_DOUBLE_EQ(M_PI, Unit::convertValue(180.0, "deg"));
50 
51  //test fall-back behaviour (return value unchanged, throw B2ERROR)
52  EXPECT_B2ERROR(EXPECT_DOUBLE_EQ(5e3, Unit::convertValue(5e3, "nonexistingunit")));
53  }
54 
56  TEST(UnitTest, ConvertValueToUnit)
57  {
58  //check standard units
59  EXPECT_DOUBLE_EQ(1.0, Unit::convertValueToUnit(1.0, "cm"));
60  EXPECT_DOUBLE_EQ(1.0, Unit::convertValueToUnit(1.0, "ns"));
61  EXPECT_DOUBLE_EQ(1.0, Unit::convertValueToUnit(1.0, "rad"));
62  EXPECT_DOUBLE_EQ(1.0, Unit::convertValueToUnit(1.0, "GeV"));
63  EXPECT_DOUBLE_EQ(1.0, Unit::convertValueToUnit(1.0, "K"));
64  EXPECT_DOUBLE_EQ(1.0, Unit::convertValueToUnit(1e-4, "T"));
65  EXPECT_DOUBLE_EQ(1.0, Unit::convertValueToUnit(1.0, "e"));
66  EXPECT_DOUBLE_EQ(1.0, Unit::convertValueToUnit(1.0, "g/cm3"));
67 
68  //different orders of magnitude
69  EXPECT_DOUBLE_EQ(1e-2, Unit::convertValueToUnit(1.0, "m"));
70  EXPECT_DOUBLE_EQ(1e-5, Unit::convertValueToUnit(1.0, "km"));
71  EXPECT_DOUBLE_EQ(1e1, Unit::convertValueToUnit(1.0, "mm"));
72  EXPECT_DOUBLE_EQ(1e4, Unit::convertValueToUnit(1.0, "um"));
73  EXPECT_DOUBLE_EQ(1e7, Unit::convertValueToUnit(1.0, "nm"));
74 
75  //convert some actual values
76  EXPECT_DOUBLE_EQ(5e3 * 1e-2, Unit::convertValueToUnit(5e3, "m"));
77  EXPECT_DOUBLE_EQ(5e-3 * 1e-2, Unit::convertValueToUnit(5e-3, "m"));
78  EXPECT_DOUBLE_EQ(180.0, Unit::convertValueToUnit(M_PI, "deg"));
79 
80  //test fall-back behaviour (return value unchanged, throw B2ERROR)
81  EXPECT_B2ERROR(EXPECT_DOUBLE_EQ(5e3, Unit::convertValueToUnit(5e3, "nonexistingunit")));
82  }
83 
84 } // namespace
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TEST
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Definition: utilityFunctions.cc:18