DryChem 1.0.0
A generic, compile-time C++ toolbox with no dependencies for the modern computational chemistry project.
Loading...
Searching...
No Matches
testArithmeticOperators.hpp
Go to the documentation of this file.
1// Copyright (c) 2020-2025 Cody R. Drisko. All rights reserved.
2// Licensed under the MIT License. See the LICENSE file in the project root for more information.
3//
4// Name: testArithmeticOperators.hpp
5// Author: crdrisko
6// Date: 09/02/2020-14:48:00
7// Description: Provides ~100% unit test coverage over all arithmetic functions
8
9#ifndef DRYCHEM_CPP_UNITS_TESTS_TESTOPERATORS_TESTARITHMETICOPERATORS_HPP
10#define DRYCHEM_CPP_UNITS_TESTS_TESTOPERATORS_TESTARITHMETICOPERATORS_HPP
11
12#include <gtest/gtest.h>
13
15
16using namespace CppUnits;
17using namespace CppUnits::Literals;
18
19GTEST_TEST(testArithmeticOperators, overloadedAdditionOperatorsActOnlyOnPhysicalQuantities)
20{
21 DimensionlessQuantity dimensionlessQuantity1 = 5.0_;
22 DimensionlessQuantity dimensionlessQuantity2 = 25.0_;
23
24 ASSERT_DOUBLE_EQ(30.0, (dimensionlessQuantity2 + dimensionlessQuantity1).getMagnitude());
25
26 dimensionlessQuantity1 += 2.0_;
27 ASSERT_DOUBLE_EQ(7.0, dimensionlessQuantity1.getMagnitude());
28}
29
30GTEST_TEST(testArithmeticOperators, overloadedSubtractionOperatorsActOnlyOnPhysicalQuantities)
31{
32 DimensionlessQuantity dimensionlessQuantity1 = 5.0_;
33 DimensionlessQuantity dimensionlessQuantity2 = 25.0_;
34
35 ASSERT_DOUBLE_EQ(20.0, (dimensionlessQuantity2 - dimensionlessQuantity1).getMagnitude());
36
37 dimensionlessQuantity1 -= 2.0_;
38 ASSERT_DOUBLE_EQ(3.0, dimensionlessQuantity1.getMagnitude());
39}
40
41GTEST_TEST(testArithmeticOperators, unaryMinusOperatorNegatesMagnitude)
42{
43 DimensionlessQuantity dimensionlessQuantity = -5.0_;
44
45 ASSERT_TRUE(dimensionlessQuantity.getMagnitude() < 0.0);
46}
47
48GTEST_TEST(testArithmeticOperators, overloadedMultiplicationOperatorsActOnPhysicalQuantitiesAndNumericTypes)
49{
50 const Area area = 24.0_m2;
51 const Length length = 1.0_m;
52
53 Volume volume = area * length;
54
55 volume *= 6;
56 volume *= 2.0_;
57 // volume *= 2.0_m2; // Error: no operator "*=" matches these operands
58
59 Volume newVolume = volume * 2;
60 Length newLength = 1.0 * length;
61
62 ASSERT_DOUBLE_EQ(288.0, volume.getMagnitude());
63 ASSERT_DOUBLE_EQ(576.0, newVolume.getMagnitude());
64 ASSERT_DOUBLE_EQ(1.0, newLength.getMagnitude());
65}
66
67GTEST_TEST(testArithmeticOperators, overloadedDivisionOperatorsActOnPhysicalQuantitiesAndNumericTypes)
68{
69 const Volume volume = 24.0_m3;
70 const Length length = 1.0_m;
71
72 Area area = volume / length;
73
74 area /= 6;
75 area /= 2.0_;
76 // area /= 2.0_m2; // Error: no operator "/=" matches these operands
77
78 Area newArea = area / 2;
79 WaveNumber wavenumber = 1.0 / length;
80
81 ASSERT_DOUBLE_EQ(2.0, area.getMagnitude());
82 ASSERT_DOUBLE_EQ(1.0, newArea.getMagnitude());
83 ASSERT_DOUBLE_EQ(1.0, wavenumber.getMagnitude());
84}
85
86#endif
constexpr long double getMagnitude() const noexcept
Definition physicalQuantity.hpp:50
Definition physicalQuantities.hpp:94
Definition basicMath.hpp:17
PhysicalQuantity< Dimensionality< 2, 0, 0 > > Area
Definition physicalQuantities.hpp:42
PhysicalQuantity< Dimensionality<> > DimensionlessQuantity
Definition physicalQuantities.hpp:22
PhysicalQuantity< Dimensionality<-1, 0, 0 > > WaveNumber
Definition physicalQuantities.hpp:27
PhysicalQuantity< Dimensionality< 3, 0, 0 > > Volume
Definition physicalQuantities.hpp:48
PhysicalQuantity< Dimensionality< 1, 0, 0 > > Length
Definition physicalQuantities.hpp:37
GTEST_TEST(testArithmeticOperators, overloadedAdditionOperatorsActOnlyOnPhysicalQuantities)
Definition testArithmeticOperators.hpp:19