Blender
V4.3
source
blender
blenlib
tests
BLI_memory_utils_test.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2023 Blender Authors
2
*
3
* SPDX-License-Identifier: Apache-2.0 */
4
5
#include "testing/testing.h"
6
7
#include "
BLI_math_vector_types.hh
"
8
#include "
BLI_memory_utils.hh
"
9
10
#include "
BLI_strict_flags.h
"
/* Keep last. */
11
12
namespace
blender::tests
{
13
14
class
TestBaseClass
{
15
virtual
void
mymethod(){};
16
};
17
18
class
TestChildClass
:
public
TestBaseClass
{
19
void
mymethod()
override
{}
20
};
21
22
static_assert
(
is_convertible_pointer_v<int *, int *>
);
23
static_assert
(
is_convertible_pointer_v<int *, const int *>
);
24
static_assert
(
is_convertible_pointer_v<int *, int *const>
);
25
static_assert
(
is_convertible_pointer_v<int *, const int *const>
);
26
static_assert
(!
is_convertible_pointer_v<const int *, int *>
);
27
static_assert
(!
is_convertible_pointer_v<int, int *>
);
28
static_assert
(!
is_convertible_pointer_v<int *, int>
);
29
static_assert
(
is_convertible_pointer_v<TestBaseClass *, const TestBaseClass *>
);
30
static_assert
(!
is_convertible_pointer_v<const TestBaseClass *, TestBaseClass *>
);
31
static_assert
(
is_convertible_pointer_v<TestChildClass *, TestBaseClass *>
);
32
static_assert
(!
is_convertible_pointer_v<TestBaseClass *, TestChildClass *>
);
33
static_assert
(
is_convertible_pointer_v<const TestChildClass *, const TestBaseClass *>
);
34
static_assert
(!
is_convertible_pointer_v<TestBaseClass, const TestChildClass *>
);
35
static_assert
(!
is_convertible_pointer_v<float3, float *>
);
36
static_assert
(!
is_convertible_pointer_v<float *, float3>
);
37
static_assert
(!
is_convertible_pointer_v<int **, int *>
);
38
static_assert
(!
is_convertible_pointer_v<int *, int **>
);
39
static_assert
(
is_convertible_pointer_v<int **, int **>
);
40
static_assert
(
is_convertible_pointer_v<const int **, const int **>
);
41
static_assert
(!
is_convertible_pointer_v<const int **, int **>
);
42
static_assert
(!
is_convertible_pointer_v<int *const *, int **>
);
43
static_assert
(!
is_convertible_pointer_v<int *const *const, int **>
);
44
static_assert
(
is_convertible_pointer_v<int **, int **const>
);
45
static_assert
(
is_convertible_pointer_v<int **, int *const *>
);
46
static_assert
(
is_convertible_pointer_v<int **, int const *const *>
);
47
48
static_assert
(
is_span_convertible_pointer_v<int *, int *>
);
49
static_assert
(
is_span_convertible_pointer_v<int *, const int *>
);
50
static_assert
(!
is_span_convertible_pointer_v<const int *, int *>
);
51
static_assert
(
is_span_convertible_pointer_v<const int *, const int *>
);
52
static_assert
(
is_span_convertible_pointer_v<const int *, const void *>
);
53
static_assert
(!
is_span_convertible_pointer_v<const int *, void *>
);
54
static_assert
(
is_span_convertible_pointer_v<int *, void *>
);
55
static_assert
(
is_span_convertible_pointer_v<int *, const void *>
);
56
static_assert
(!
is_span_convertible_pointer_v<TestBaseClass *, TestChildClass *>
);
57
static_assert
(!
is_span_convertible_pointer_v<TestChildClass *, TestBaseClass *>
);
58
59
static_assert
(
is_same_any_v<int, float, bool, int>
);
60
static_assert
(
is_same_any_v<int, int, float>
);
61
static_assert
(
is_same_any_v<int, int>
);
62
static_assert
(!
is_same_any_v<int, float, bool>
);
63
static_assert
(!
is_same_any_v<int, float>
);
64
static_assert
(!
is_same_any_v<int>
);
65
66
TEST
(memory_utils, ScopedDefer1)
67
{
68
int
a = 0;
69
{
70
BLI_SCOPED_DEFER
([&]() { a -= 5; });
71
{
72
BLI_SCOPED_DEFER
([&]() { a *= 10; });
73
a = 5;
74
}
75
}
76
EXPECT_EQ
(a, 45);
77
}
78
79
TEST
(memory_utils, ScopedDefer2)
80
{
81
std::string s;
82
{
83
BLI_SCOPED_DEFER
([&]() { s +=
"A"
; });
84
BLI_SCOPED_DEFER
([&]() { s +=
"B"
; });
85
BLI_SCOPED_DEFER
([&]() { s +=
"C"
; });
86
BLI_SCOPED_DEFER
([&]() { s +=
"D"
; });
87
}
88
EXPECT_EQ
(s,
"DCBA"
);
89
}
90
91
}
// namespace blender::tests
EXPECT_EQ
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
BLI_math_vector_types.hh
BLI_memory_utils.hh
BLI_SCOPED_DEFER
#define BLI_SCOPED_DEFER(function_to_defer)
Definition
BLI_memory_utils.hh:407
BLI_strict_flags.h
blender::tests::TestBaseClass
Definition
BLI_memory_utils_test.cc:14
blender::tests::TestChildClass
Definition
BLI_memory_utils_test.cc:18
blender::tests
Definition
BLI_any_test.cc:10
blender::tests::TEST
TEST(any, DefaultConstructor)
Definition
BLI_any_test.cc:12
blender::is_same_any_v
constexpr bool is_same_any_v
Definition
BLI_memory_utils.hh:314
blender::is_convertible_pointer_v
constexpr bool is_convertible_pointer_v
Definition
BLI_memory_utils.hh:288
blender::is_span_convertible_pointer_v
constexpr bool is_span_convertible_pointer_v
Definition
BLI_memory_utils.hh:298
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0