Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
9.2.2023: Due to updates GitLab will be unavailable for some minutes between 9:00 and 11:00.
Open sidebar
IP
elsa
Commits
e9e9a882
Commit
e9e9a882
authored
Mar 20, 2020
by
Jens Petit
Committed by
Tobias Lasser
Mar 20, 2020
Browse files
Fix undefined behavior in tests
parent
3c8ba22f
Pipeline
#227562
passed with stages
in 33 minutes and 59 seconds
Changes
3
Pipelines
8
Hide whitespace changes
Inline
Side-by-side
elsa/core/tests/test_DataHandlerMap.cpp
View file @
e9e9a882
...
...
@@ -199,7 +199,9 @@ TEMPLATE_PRODUCT_TEST_CASE("Scenario: Assigning to DataHandlerMap", "", (DataHan
THEN
(
"a deep copy is performed"
)
{
const
TestType
dh2
{
size
};
Eigen
::
Matrix
<
data_t
,
Eigen
::
Dynamic
,
1
>
randVec
{
size
};
randVec
.
setRandom
();
const
TestType
dh2
{
randVec
};
const
auto
dh2Map
=
dh2
.
getBlock
(
0
,
size
);
const
auto
&
dh2MapRef
=
static_cast
<
const
typename
MapToHandler
<
TestType
>::
map
&>
(
*
dh2Map
);
...
...
@@ -667,8 +669,7 @@ TEMPLATE_PRODUCT_TEST_CASE("Scenario: Testing the reduction operations of DataHa
WHEN
(
"putting in some random data"
)
{
Eigen
::
Matrix
<
data_t
,
Eigen
::
Dynamic
,
1
>
randVec
(
size
*
2
);
randVec
.
setRandom
();
auto
randVec
=
generateRandomMatrix
<
data_t
>
(
size
*
2
);
TestType
realDh
(
randVec
);
auto
dhPtr
=
realDh
.
getBlock
(
size
/
3
,
size
);
auto
&
dh
=
*
dhPtr
;
...
...
@@ -683,8 +684,7 @@ TEMPLATE_PRODUCT_TEST_CASE("Scenario: Testing the reduction operations of DataHa
REQUIRE
(
checkSameNumbers
(
dh
.
squaredL2Norm
(),
randVec
.
middleRows
(
size
/
3
,
size
).
squaredNorm
()));
Eigen
::
Matrix
<
data_t
,
Eigen
::
Dynamic
,
1
>
randVec2
(
size
);
randVec2
.
setRandom
();
auto
randVec2
=
generateRandomMatrix
<
data_t
>
(
size
);
TestType
realDh2
(
randVec2
);
auto
dh2Ptr
=
realDh2
.
getBlock
(
0
,
size
);
auto
&
dh2
=
*
dh2Ptr
;
...
...
@@ -727,9 +727,9 @@ TEMPLATE_PRODUCT_TEST_CASE("Scenario: Testing the element-wise operations of Dat
WHEN
(
"putting in some random data"
)
{
Eigen
::
Matrix
<
data_t
,
Eigen
::
Dynamic
,
1
>
randVec
(
size
);
randVec
.
setRandom
();
auto
randVec
=
generateRandomMatrix
<
data_t
>
(
size
);
TestType
realDh
(
randVec
);
auto
dhPtr
=
realDh
.
getBlock
(
0
,
size
);
auto
&
dh
=
static_cast
<
typename
MapToHandler
<
TestType
>::
map
&>
(
*
dhPtr
);
...
...
@@ -746,8 +746,8 @@ TEMPLATE_PRODUCT_TEST_CASE("Scenario: Testing the element-wise operations of Dat
auto
oldDhPtr
=
realOldDh
.
getBlock
(
0
,
size
);
auto
&
oldDh
=
static_cast
<
typename
MapToHandler
<
TestType
>::
map
&>
(
*
oldDhPtr
);
Eigen
::
Matrix
<
data_t
,
Eigen
::
Dynamic
,
1
>
randVec2
(
size
);
randVec2
.
setRandom
();
auto
randVec2
=
generateRandomMatrix
<
data_t
>
(
size
);
TestType
dhCPU
(
randVec2
);
auto
dh2Ptr
=
dhCPU
.
getBlock
(
0
,
size
);
auto
&
dh2
=
*
dh2Ptr
;
...
...
elsa/core/tests/test_DataHandlers.cpp
View file @
e9e9a882
...
...
@@ -418,6 +418,7 @@ TEMPLATE_TEST_CASE("Scenario: Cloning DataHandler", "", DataHandlerCPU<float>)
{
index_t
size
=
728
;
TestType
dh
(
size
);
dh
=
1.0
f
;
WHEN
(
"cloning"
)
{
...
...
@@ -432,7 +433,7 @@ TEMPLATE_TEST_CASE("Scenario: Cloning DataHandler", "", DataHandlerCPU<float>)
REQUIRE
(
dhClone
->
getSize
()
==
dh
.
getSize
());
dh
[
0
]
=
1
;
dh
[
0
]
=
2.
f
;
REQUIRE
(
dh
!=
*
dhClone
);
}
}
...
...
elsa/test_routines/testHelpers.h
View file @
e9e9a882
...
...
@@ -2,6 +2,7 @@
#include
<type_traits>
#include
<complex>
#include
<random>
#include
"elsaDefines.h"
/**
...
...
@@ -33,3 +34,38 @@ bool checkSameNumbers(T left, T right, int epsilonFactor = 1)
return
Approx
(
left
).
epsilon
(
eps
)
==
right
;
}
}
/**
* \brief Generates a random Eigen matrix for different data_t types with integer values limited to
* a certain range
*
* \param[in] size the number of elements in the vector like matrix
*
* \tparam data_t the numerical type to use
*
* The integer range is chosen to be small, to allow multiplication with the values without running
* into overflow issues.
*/
template
<
typename
data_t
>
auto
generateRandomMatrix
(
elsa
::
index_t
size
)
{
Eigen
::
Matrix
<
data_t
,
Eigen
::
Dynamic
,
1
>
randVec
(
size
);
if
constexpr
(
std
::
is_integral_v
<
data_t
>
)
{
std
::
random_device
rd
;
std
::
mt19937
eng
(
rd
());
std
::
uniform_int_distribution
<>
distr
(
-
100
,
100
);
for
(
elsa
::
index_t
i
=
0
;
i
<
size
;
++
i
)
{
data_t
num
=
distr
(
eng
);
// remove zeros as this leads to errors when dividing
if
(
num
==
0
)
num
=
1
;
randVec
[
i
]
=
num
;
}
}
else
{
randVec
.
setRandom
();
}
return
randVec
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment