File: test_preprocessor.cpp

package info (click to toggle)
c4core 0.2.7-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 5,184 kB
  • sloc: cpp: 35,521; python: 2,786; javascript: 414; makefile: 6
file content (55 lines) | stat: -rw-r--r-- 1,202 bytes parent folder | download
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
#ifndef C4CORE_SINGLE_HEADER
#include "c4/preprocessor.hpp"
#include "c4/language.hpp"
#endif

#ifdef WE_LL_GET_THERE___MSVC_CANT_HANDLE_THE_FOREACH_MACRO___NEEDS_TO_BE_FIXED
#include <string>
#include <map>

struct SomeStruct
{
    int32_t a;
    int32_t b;
    int32_t c;
    int32_t d;
};

TEST(TestForEach, print_offsets)
{
#define M_OFFS_(structure, field) m[#field] = offsetof(structure, field)
#define M_OFFS(field) M_OFFS_(SomeStruct, field)

    std::map< std::string, size_t > m;

    C4_FOR_EACH(M_OFFS, a, b, c);
    C4_FOR_EACH(M_OFFS, d);

    EXPECT_EQ(m["a"], 0);
    EXPECT_EQ(m["b"], 4);
    EXPECT_EQ(m["c"], 8);
    EXPECT_EQ(m["d"], 12);
}

//-----------------------------------------------------------------------------
// C4_BEGIN_NAMESPACE()/C4_END_NAMESPACE() are implemented with C4_FOR_EACH().
// Test these here too.

namespace a, b, c {
int a_var = 0;
} // namespace c, b
int var = 1; // a::var
namespace b {
int var = 2; // a::b::var
namespace c {
int var = 3; // a::b::c::var
} // namespace c, b, a

TEST(TestForEach, begin_end_namespace)
{
    EXPECT_EQ(a::b::c::a_var, 0);
    EXPECT_EQ(a::var, 1);
    EXPECT_EQ(a::b::var, 2);
    EXPECT_EQ(a::b::c::var, 3);
}
#endif