Mentions légales du service
Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
ScalFMM
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
solverstack
ScalFMM
Commits
5dd29a31
Commit
5dd29a31
authored
9 years ago
by
Quentin Khan
Browse files
Options
Downloads
Patches
Plain Diff
Update FBasicParticle unit tests
parent
67e13f42
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
UTests/utestFBasicParticle.cpp
+135
-29
135 additions, 29 deletions
UTests/utestFBasicParticle.cpp
with
135 additions
and
29 deletions
UTests/utestFBasicParticle.cpp
+
135
−
29
View file @
5dd29a31
...
...
@@ -5,66 +5,172 @@
#include
"Adaptive/new/FVariadicParticleContainer.hpp"
using
FReal
=
double
;
constexpr
std
::
size_t
Dim
=
3
;
namespace
sd
=
scalfmm
::
details
;
namespace
sfinae
{
template
<
typename
...
Ts
>
using
void_t
=
void
;
}
struct
test_FBasicParticle_simple
{
using
Particle
=
FBasicParticle
<
FReal
,
Dim
,
scalfmm
::
pack
<
5
,
FReal
>
>
;
using
FReal
=
double
;
enum
{
Dim
=
3
};
using
Particle
=
FBasicParticle
<
FReal
,
Dim
,
float
,
scalfmm
::
pack
<
4
,
FReal
>
>
;
// Check the attribute count
static_assert
(
Particle
::
NbAttributes
==
5
,
"Wrong count of attributes"
);
using
Container
=
FVariadicParticleContainer
<
Particle
>
;
void
run
()
{
bool
asserts_are_run
=
false
;
assert
(
asserts_are_run
=
true
);
if
(
!
asserts_are_run
)
{
std
::
cerr
<<
"Asserts are not run"
;
exit
(
-
1
);
}
test_default_constructor
();
test_variadic_constructor
();
test_incomplete_variadic_constructor
();
test_variadic_constructor_overflow_failure
();
test_constructor_from_tuple
();
test_position_getter
();
test_pull_push
();
}
/**
* \brief Test the default constructor
*
* Expected result: particle builds
*/
void
test_default_constructor
()
{
Particle
p
;
static_assert
(
Particle
::
NbAttributes
==
5
,
"Wrong count of attributes"
);
Particle
p
{};
}
/**
* \brief Test the variadic constructor
*
* Expected result:
* - particle builds
* - position is right
* - attributes are right
*/
void
test_variadic_constructor
()
{
const
Particle
::
position_t
pos
(
1.5
,
2.5
,
3.5
);
Particle
p
(
pos
,
1
,
2
,
3
,
4
,
5
);
const
auto
pos2
=
p
.
position
();
assert
(
1.5
==
pos
[
0
]);
assert
(
2.5
==
pos
[
1
]);
assert
(
3.5
==
pos
[
2
]);
assert
(
pos2
[
0
]
==
pos
[
0
]);
assert
(
pos2
[
1
]
==
pos
[
1
]);
assert
(
pos2
[
2
]
==
pos
[
2
]);
assert
(
std
::
get
<
3
>
(
p
)
==
1
);
assert
(
std
::
get
<
4
>
(
p
)
==
2
);
assert
(
std
::
get
<
5
>
(
p
)
==
3
);
assert
(
std
::
get
<
6
>
(
p
)
==
4
);
assert
(
std
::
get
<
7
>
(
p
)
==
5
);
}
assert
(
get
<
3
>
(
p
)
==
1
);
assert
(
get
<
4
>
(
p
)
==
2
);
assert
(
get
<
5
>
(
p
)
==
3
);
assert
(
get
<
6
>
(
p
)
==
4
);
assert
(
get
<
7
>
(
p
)
==
5
);
/**
* \brief Test variadic constructor with incomplete arguments
*
* Expected result:
* - particle builds
* - position is right
* - attributes are right
* - non given attributes are zeroed
*/
void
test_incomplete_variadic_constructor
()
{
const
Particle
::
position_t
pos
(
1.5
,
2.5
,
3.5
);
Particle
p
(
pos
,
1
,
2
);
assert
(
1.5
==
pos
[
0
]);
assert
(
2.5
==
pos
[
1
]);
assert
(
3.5
==
pos
[
2
]);
double
a
=
1.5
,
b
=
2.5
,
c
=
3.5
,
d
=
1
,
e
=
2
,
f
=
3
,
g
=
4
,
h
=
5
;
assert
(
std
::
get
<
3
>
(
p
)
==
1
);
assert
(
std
::
get
<
4
>
(
p
)
==
2
);
assert
(
std
::
get
<
5
>
(
p
)
==
0
);
assert
(
std
::
get
<
6
>
(
p
)
==
0
);
assert
(
std
::
get
<
7
>
(
p
)
==
0
);
}
Particle
p2
(
std
::
make_tuple
(
1.5
,
2.5
,
3.5
,
1
,
2
,
3
,
4
,
5
));
/**
* \brief Check if constructor can be called with specified attributes.
*
* Holds a #value that is false if constructor `U({0,0,0}, attributes...)`
* exists.
*
* \tparam T Class to check
* \tparam attributes int parameter pack of attribute values
*/
template
<
class
T
,
int
...
attributes
>
struct
check_constructor_overflow_failure
{
/// Exists if the constructor `U({0,0,0}, attributes...)` exists
template
<
class
U
,
class
=
decltype
(
U
({
0
,
0
,
0
},
attributes
...))
>
static
constexpr
std
::
false_type
check
(
U
*
)
{
return
{};}
/// SFINAE fallback
static
constexpr
std
::
true_type
check
(...)
{
return
{};}
/// value is true if the constructor does not exist
enum
{
value
=
decltype
(
check
((
T
*
)
nullptr
))
::
value
};
};
/**
* \brief Test variadic constructor when too many arguments are given
*
* Expected result:
* - the constructor instanciated raises a false static_assert
*/
void
test_variadic_constructor_overflow_failure
()
{
using
test
=
check_constructor_overflow_failure
<
Particle
,
1
,
2
,
3
,
4
,
5
,
6
>
;
static_assert
(
test
::
value
,
"Variadic constructor accepts too many attributes"
);
assert
(
test
::
value
);
}
assert
(
get
<
3
>
(
p2
)
==
1
);
assert
(
get
<
4
>
(
p2
)
==
2
);
assert
(
get
<
5
>
(
p2
)
==
3
);
assert
(
get
<
6
>
(
p2
)
==
4
);
assert
(
get
<
7
>
(
p2
)
==
5
);
/**
* \brief Test constructor from a std::tuple
*
* Expected result:
* - the particle is created
* - the position and attributes are correct
*/
void
test_constructor_from_tuple
()
{
Particle
p
(
std
::
make_tuple
(
1.5
,
2.5
,
3.5
,
1
,
2
,
3
,
4
,
5
));
// position
assert
(
std
::
get
<
0
>
(
p
)
==
1.5
);
assert
(
std
::
get
<
1
>
(
p
)
==
2.5
);
assert
(
std
::
get
<
2
>
(
p
)
==
3.5
);
// attributes
assert
(
std
::
get
<
3
>
(
p
)
==
1
);
assert
(
std
::
get
<
4
>
(
p
)
==
2
);
assert
(
std
::
get
<
5
>
(
p
)
==
3
);
assert
(
std
::
get
<
6
>
(
p
)
==
4
);
assert
(
std
::
get
<
7
>
(
p
)
==
5
);
}
scalfmm
::
pack_expand_tuple
<
scalfmm
::
pack
<
8
,
const
double
&>
>
tup
(
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
);
Particle
p3
(
tup
);
assert
(
get
<
3
>
(
p3
)
==
1
);
assert
(
get
<
4
>
(
p3
)
==
2
);
assert
(
get
<
5
>
(
p3
)
==
3
);
assert
(
get
<
6
>
(
p3
)
==
4
);
assert
(
get
<
7
>
(
p3
)
==
5
);
/**
* \brief Test position getter
*
* Expected result:
* - p.position() returns a copy of the particle position
*/
void
test_position_getter
()
{
typename
Particle
::
position_t
ref
{
1.5
,
2.5
,
3.5
};
const
Particle
p
(
ref
,
1
,
2
,
3
,
4
,
5
);
// check value
auto
pos
=
p
.
position
();
assert
(
pos
==
ref
);
// check that a copy is returned, not a reference
pos
[
0
]
+=
1
;
assert
(
pos
!=
p
.
position
());
}
void
test_pull_push
()
{
Particle
p
({
2.3
,
3.4
,
4.5
},
5
,
6
,
7
,
8
,
9
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment