test: use the mixin design a little more

This commit is contained in:
skypjack
2026-03-03 11:13:02 +01:00
parent 6b8fe4deff
commit e3a736a2a5
5 changed files with 16 additions and 34 deletions

View File

@@ -1,26 +0,0 @@
#ifndef ENTT_COMMON_AGGREGATE_H
#define ENTT_COMMON_AGGREGATE_H
#include <compare>
#include <type_traits>
namespace test {
struct aggregate {
int value{};
[[nodiscard]] constexpr bool operator==(const aggregate &other) const noexcept {
return value == other.value;
}
[[nodiscard]] constexpr auto operator<=>(const aggregate &other) const noexcept {
return value <=> other.value;
}
};
// ensure aggregate-ness :)
static_assert(std::is_aggregate_v<test::aggregate>, "Not an aggregate type");
} // namespace test
#endif

View File

@@ -47,13 +47,21 @@ struct non_movable_mixin: Type {
struct empty_type {};
struct aggregate_type {
[[nodiscard]] constexpr bool operator==(const aggregate_type &) const noexcept = default;
[[nodiscard]] constexpr auto operator<=>(const aggregate_type &) const noexcept = default;
int value{};
};
template<typename Type>
struct value_type {
constexpr value_type() = default;
constexpr value_type(Type elem): value{elem} {}
[[nodiscard]] constexpr bool operator==(const value_type &) const noexcept = default;
[[nodiscard]] constexpr auto operator<=>(const value_type &) const noexcept = default;
operator Type() const noexcept { return value; }
operator Type() const noexcept {
return value;
}
Type value{};
};
@@ -73,10 +81,13 @@ using boxed_char = internal::value_type<char>;
using empty = internal::empty_type;
struct other_empty: internal::empty_type {};
static_assert(std::is_trivially_destructible_v<test::pointer_stable>, "Not a trivially destructible type");
static_assert(!std::is_trivially_destructible_v<test::non_trivially_destructible>, "Trivially destructible type");
static_assert(!std::is_trivially_destructible_v<test::pointer_stable_non_trivially_destructible>, "Trivially destructible type");
static_assert(!std::is_move_constructible_v<test::non_movable> && !std::is_move_assignable_v<test::non_movable>, "Movable type");
using aggregate = internal::aggregate_type;
static_assert(std::is_trivially_destructible_v<pointer_stable>, "Not a trivially destructible type");
static_assert(!std::is_trivially_destructible_v<non_trivially_destructible>, "Trivially destructible type");
static_assert(!std::is_trivially_destructible_v<pointer_stable_non_trivially_destructible>, "Trivially destructible type");
static_assert(!std::is_move_constructible_v<non_movable> && !std::is_move_assignable_v<non_movable>, "Movable type");
static_assert(std::is_aggregate_v<aggregate>, "Not an aggregate type");
} // namespace test

View File

@@ -9,7 +9,6 @@
#include <gtest/gtest.h>
#include <entt/core/any.hpp>
#include <entt/core/type_info.hpp>
#include "../../common/aggregate.h"
#include "../../common/config.h"
#include "../../common/linter.hpp"
#include "../../common/new_delete.h"

View File

@@ -19,7 +19,6 @@
#include <entt/entity/storage.hpp>
#include <entt/entity/view.hpp>
#include <entt/signal/sigh.hpp>
#include "../../common/aggregate.h"
#include "../../common/config.h"
#include "../../common/mixin.hpp"
#include "../../common/value_type.h"

View File

@@ -12,7 +12,6 @@
#include <entt/entity/component.hpp>
#include <entt/entity/entity.hpp>
#include <entt/entity/storage.hpp>
#include "../../common/aggregate.h"
#include "../../common/config.h"
#include "../../common/linter.hpp"
#include "../../common/new_delete.h"