15 #include <gtest/gtest.h>
20 #include <range/v3/utility/common_tuple.hpp>
27 static_assert(!beluga::is_particle_v<int>);
28 static_assert(!beluga::is_particle_v<struct Object>);
29 static_assert(!beluga::is_particle_v<std::tuple<int, int>>);
30 static_assert(!beluga::is_particle_v<std::tuple<beluga::Weight>>);
31 static_assert(!beluga::is_particle_v<std::tuple<beluga::Weight, beluga::Weight>>);
35 struct SimplestPossibleParticle {
40 struct ParticleWithMemberExtensions {
44 int&
state() {
return state_; }
45 [[nodiscard]]
int state()
const {
return state_; }
46 double&
weight() {
return weight_; }
47 [[nodiscard]]
double weight()
const {
return weight_; }
50 struct ParticleWithNonMemberExtensions {
60 [[maybe_unused]]
int&
state(ParticleWithNonMemberExtensions& p) {
63 [[maybe_unused]]
int state(
const ParticleWithNonMemberExtensions& p) {
66 [[maybe_unused]]
double&
weight(ParticleWithNonMemberExtensions& p) {
69 [[maybe_unused]]
double weight(
const ParticleWithNonMemberExtensions& p) {
76 class ParticleTraitsTest :
public testing::Test {};
78 using ParticleTraitsTestCases = testing::Types<
79 std::tuple<int, beluga::Weight>,
80 std::pair<int, beluga::Weight>,
81 ranges::common_tuple<int, beluga::Weight>,
82 ranges::common_pair<int, beluga::Weight>,
83 user::SimplestPossibleParticle,
84 user::ParticleWithMemberExtensions,
85 user::ParticleWithNonMemberExtensions>;
89 TYPED_TEST(ParticleTraitsTest, MakeFromState) {
91 static_assert(beluga::is_particle_v<TypeParam>);
92 auto particle = beluga::make_from_state<TypeParam>(5);