MathLib
Loading...
Searching...
No Matches
Tests
TestDualNumber.cpp
Go to the documentation of this file.
1
#include <
Math/math/Dual.hpp
>
2
#include <
Math/math/Checks.hpp
>
3
#include <cassert>
4
#include <iostream>
5
#include <cstdlib>
6
25
namespace
DualNumberTests
26
{
27
28
using namespace
Math
;
29
32
void
IdentityDualIsAsExpected
()
33
{
34
std::cout << __func__ << std::endl;
35
36
Dualf identity = Dualf::identity();
37
38
CHECK_IF_EQUAL
(identity.real, 1.0f);
39
CHECK_IF_EQUAL
(identity.dual, 0.0f);
40
}
41
44
void
ZeroDualIsAsExpected
()
45
{
46
std::cout << __func__ << std::endl;
47
48
Dualf zero = Dualf::zero();
49
50
CHECK_IF_EQUAL
(zero.real, 0.0f);
51
CHECK_IF_EQUAL
(zero.dual, 0.0f);
52
}
53
56
void
MakePureDualSetsRealComponentToZero
()
57
{
58
std::cout << __func__ << std::endl;
59
60
CHECK_IF_EQUAL
( Dualf::make_pure(3.0f).real, 0.0f );
61
}
62
65
void
MakePureDualSetsDualComponentToGivenValue
()
66
{
67
std::cout << __func__ << std::endl;
68
69
CHECK_IF_EQUAL
( Dualf::make_pure(3.3f).dual, 3.3f );
70
}
71
75
void
DotProductMultiplesCorrespondingElementsAndThenSumsTheResultingValues
()
76
{
77
std::cout << __func__ << std::endl;
78
79
Dualf d1{ 1.0f, 3.0f };
80
Dualf d2{ 9.0f, 11.0f };
81
82
CHECK_IF_EQUAL
( dot( d1, d2 ), 42.0f );
83
}
84
88
void
DualScalarSquareRootTimesItselfIsTheOriginalNumber
()
89
{
90
std::cout << __func__ << std::endl;
91
92
Dualf original_number{ 3.456f, 86.332f };
93
Dualf root = dualscalar_sqrt(original_number);
94
Dualf root_squared = root * root;
95
96
CHECK_IF_EQUAL
( original_number, root_squared );
97
}
98
99
void
OperatorEquality
()
100
{
101
Dual d( 12.0 );
102
103
assert( d == 12.0 );
104
assert( 12.0 == d );
105
assert( d == Dual( 12.0 ) );
106
}
107
108
void
OperatorMultiply
()
109
{
110
Dual d( 16.0 );
111
Dual r = d * 2.0;
112
113
assert( r == 32.0 );
114
assert( r == Dual( 32.0 ) );
115
assert( 32.0 == r );
116
assert( Dual( 32.0 ) == r );
117
}
118
119
void
TestOperators
()
120
{
121
OperatorEquality
();
122
OperatorMultiply
();
123
}
124
128
void
Run
()
129
{
130
std::cout <<
"Running Dual Number Tests..."
<< std::endl;
131
132
IdentityDualIsAsExpected
();
133
ZeroDualIsAsExpected
();
134
MakePureDualSetsRealComponentToZero
();
135
MakePureDualSetsDualComponentToGivenValue
();
136
DualScalarSquareRootTimesItselfIsTheOriginalNumber
();
137
TestOperators
();
138
139
std::cout <<
"PASSED!"
<< std::endl;
140
}
141
}
143
144
int
main
(
void
)
145
{
146
DualNumberTests::Run
();
147
return
EXIT_SUCCESS;
148
}
Checks.hpp
Dual.hpp
main
int main(void)
Definition
TestDualNumber.cpp:144
Math::CHECK_IF_EQUAL
void CHECK_IF_EQUAL(float input, float near_to, float tolerance=0.0002f)
Definition
Checks.hpp:127
DualNumberTests
Definition
TestDualNumber.cpp:26
DualNumberTests::OperatorEquality
void OperatorEquality()
Definition
TestDualNumber.cpp:99
DualNumberTests::OperatorMultiply
void OperatorMultiply()
Definition
TestDualNumber.cpp:108
DualNumberTests::DualScalarSquareRootTimesItselfIsTheOriginalNumber
void DualScalarSquareRootTimesItselfIsTheOriginalNumber()
Definition
TestDualNumber.cpp:88
DualNumberTests::DotProductMultiplesCorrespondingElementsAndThenSumsTheResultingValues
void DotProductMultiplesCorrespondingElementsAndThenSumsTheResultingValues()
Definition
TestDualNumber.cpp:75
DualNumberTests::ZeroDualIsAsExpected
void ZeroDualIsAsExpected()
Definition
TestDualNumber.cpp:44
DualNumberTests::IdentityDualIsAsExpected
void IdentityDualIsAsExpected()
Definition
TestDualNumber.cpp:32
DualNumberTests::Run
void Run()
Definition
TestDualNumber.cpp:128
DualNumberTests::TestOperators
void TestOperators()
Definition
TestDualNumber.cpp:119
DualNumberTests::MakePureDualSetsDualComponentToGivenValue
void MakePureDualSetsDualComponentToGivenValue()
Definition
TestDualNumber.cpp:65
DualNumberTests::MakePureDualSetsRealComponentToZero
void MakePureDualSetsRealComponentToZero()
Definition
TestDualNumber.cpp:56
Math
Definition
Angle.hpp:16
Generated by
1.9.8