Blender  V3.3
BLI_any_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "BLI_any.hh"
4 #include "BLI_map.hh"
5 
6 #include "testing/testing.h"
7 
8 namespace blender::tests {
9 
10 TEST(any, DefaultConstructor)
11 {
12  Any<> a;
13  EXPECT_FALSE(a.has_value());
14 }
15 
16 TEST(any, AssignInt)
17 {
18  Any<> a = 5;
19  EXPECT_TRUE(a.has_value());
20  EXPECT_TRUE(a.is<int>());
21  EXPECT_FALSE(a.is<float>());
22  const int &value = a.get<int>();
23  EXPECT_EQ(value, 5);
24  a = 10;
25  EXPECT_EQ(value, 10);
26 
27  Any<> b = a;
28  EXPECT_TRUE(b.has_value());
29  EXPECT_EQ(b.get<int>(), 10);
30 
31  Any<> c = std::move(a);
32  EXPECT_TRUE(c);
33  EXPECT_EQ(c.get<int>(), 10);
34 
35  EXPECT_EQ(a.get<int>(), 10); /* NOLINT: bugprone-use-after-move */
36 
37  a.reset();
38  EXPECT_FALSE(a);
39 }
40 
41 TEST(any, AssignMap)
42 {
43  Any<> a = Map<int, int>();
44  EXPECT_TRUE(a.has_value());
45  EXPECT_TRUE((a.is<Map<int, int>>()));
46  EXPECT_FALSE((a.is<Map<int, float>>()));
47  Map<int, int> &map = a.get<Map<int, int>>();
48  map.add(4, 2);
49  EXPECT_EQ((a.get<Map<int, int>>().lookup(4)), 2);
50 
51  Any<> b = a;
52  EXPECT_TRUE(b);
53  EXPECT_EQ((b.get<Map<int, int>>().lookup(4)), 2);
54 
55  Any<> c = std::move(a);
56  /* Test valid state after self assignment. Clang emits `-Wself-assign-overloaded` with `c=c;`.
57  * And `pragma` suppression creates warnings on other compilers. */
58  c = static_cast<decltype(a) &>(c);
59  EXPECT_TRUE(c);
60  EXPECT_EQ((c.get<Map<int, int>>().lookup(4)), 2);
61 
62  EXPECT_TRUE((a.get<Map<int, int>>().is_empty())); /* NOLINT: bugprone-use-after-move */
63 }
64 
65 TEST(any, AssignAny)
66 {
67  Any<> a = 5;
68  Any<> b = std::string("hello");
69  Any<> c;
70 
71  Any<> z;
72  EXPECT_FALSE(z.has_value());
73 
74  z = a;
75  EXPECT_TRUE(z.has_value());
76  EXPECT_EQ(z.get<int>(), 5);
77 
78  z = b;
79  EXPECT_EQ(z.get<std::string>(), "hello");
80 
81  z = c;
82  EXPECT_FALSE(z.has_value());
83 
84  z = Any(std::in_place_type<Any<>>, a);
85  EXPECT_FALSE(z.is<int>());
86  EXPECT_TRUE(z.is<Any<>>());
87  EXPECT_EQ(z.get<Any<>>().get<int>(), 5);
88 }
89 
90 struct ExtraSizeInfo {
91  size_t size;
92 
93  template<typename T> static constexpr ExtraSizeInfo get()
94  {
95  return {sizeof(T)};
96  }
97 };
98 
99 TEST(any, ExtraInfo)
100 {
101  using MyAny = Any<ExtraSizeInfo>;
102 
103  MyAny a = 5;
104  EXPECT_EQ(a.extra_info().size, sizeof(int));
105 
106  a = std::string("hello");
107  EXPECT_EQ(a.extra_info().size, sizeof(std::string));
108 }
109 
110 } // namespace blender::tests
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
__forceinline bool any(const avxb &b)
Definition: avxb.h:205
void * get()
Definition: BLI_any.hh:288
const Value & lookup(const Key &key) const
Definition: BLI_map.hh:485
bool is_empty() const
Definition: BLI_map.hh:911
#define T
static unsigned c
Definition: RandGen.cpp:83
static unsigned a[3]
Definition: RandGen.cpp:78
TEST(any, DefaultConstructor)
Definition: BLI_any_test.cc:10
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
SocketIndexByIdentifierMap * map
static constexpr ExtraSizeInfo get()
Definition: BLI_any_test.cc:93