1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// unit-test-rtti.cpp
#include "../../source/core/slang-rtti-info.h"
#include "unit-test/slang-unit-test.h"
using namespace Slang;
namespace
{ // anonymous
struct SomeStruct
{
int a = 0;
float b = 2.0f;
String s;
List<String> list;
static const StructRttiInfo g_rttiInfo;
};
} // namespace
static const StructRttiInfo _makeSomeStructRtti()
{
SomeStruct obj;
StructRttiBuilder builder(&obj, "SomeStruct", nullptr);
builder.addField("a", &obj.a);
builder.addField("b", &obj.b);
builder.addField("s", &obj.s);
builder.addField("list", &obj.list);
return builder.make();
}
/* static */ const StructRttiInfo SomeStruct::g_rttiInfo = _makeSomeStructRtti();
SLANG_UNIT_TEST(Rtti)
{
using namespace Slang;
const RttiInfo* types[] = {
GetRttiInfo<int32_t>::get(),
GetRttiInfo<int32_t[10]>::get(),
GetRttiInfo<String>::get(),
GetRttiInfo<List<String>>::get(),
GetRttiInfo<List<List<String>>>::get(),
GetRttiInfo<int32_t[2][3]>::get(),
GetRttiInfo<SomeStruct>::get(),
GetRttiInfo<SomeStruct*>::get(),
GetRttiInfo<const float* const>::get(),
};
StringBuilder buf;
for (auto type : types)
{
RttiInfo::append(type, buf);
buf << "\n";
}
const char expected[] = "int32_t\n"
"int32_t[10]\n"
"String\n"
"List<String>\n"
"List<List<String>>\n"
"int32_t[2][3]\n"
"SomeStruct\n"
"SomeStruct*\n"
"float*\n";
SLANG_CHECK(buf == expected)
}
|