File: SharedBitfield_test.cpp

package info (click to toggle)
glbinding 3.3.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,972 kB
  • sloc: cpp: 224,461; javascript: 1,615; sh: 114; makefile: 98
file content (116 lines) | stat: -rw-r--r-- 2,520 bytes parent folder | download | duplicates (4)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116

#include <gmock/gmock.h>

#include <glbinding/gl/gl.h>

#include <glbinding/SharedBitfield.h>

using namespace glbinding;

enum class A
{
    A_a,
    A_b,
    A_c
};

A operator|(const A & a, const A & b)
{
    return static_cast<A>(static_cast<std::underlying_type<A>::type>(a) & static_cast<std::underlying_type<A>::type>(b));
}

A & operator|=(A & a, const A & b)
{
    a = static_cast<A>(static_cast<std::underlying_type<A>::type>(a) & static_cast<std::underlying_type<A>::type>(b));

    return a;
}

enum class B
{
    B_a,
    B_b,
    B_c
};

enum class C
{
    C_a,
    C_b,
    C_c
};

TEST(SharedBitfield, Usage1a)
{
    A bitsA_a = A::A_a;
    A bitsA_b = A::A_b;

    A bitsA_c = bitsA_a | bitsA_b;

    bitsA_c |= bitsA_b;

    SharedBitfield<A, B, C> shared1 = bitsA_a;
    SharedBitfield<A, B, C> shared2 = bitsA_b;

    shared1 |= shared2;

    bitsA_c |= shared1;

    EXPECT_EQ(bitsA_a | bitsA_b, bitsA_c);
}

TEST(SharedBitfield, Usage1b)
{
    gl::ClearBufferMask bitsA_a = gl::ClearBufferMask::GL_ACCUM_BUFFER_BIT;
    gl::ClearBufferMask bitsA_b = gl::ClearBufferMask::GL_DEPTH_BUFFER_BIT;

    gl::ClearBufferMask bitsA_c = bitsA_a | bitsA_b;

    bitsA_c |= bitsA_b;

    SharedBitfield<gl::ClearBufferMask, gl::AttribMask> shared1 = bitsA_a;
    SharedBitfield<gl::ClearBufferMask, gl::AttribMask> shared2 = bitsA_b;

    shared1 |= shared2;

    bitsA_c |= shared1;

    EXPECT_EQ(bitsA_a | bitsA_b, bitsA_c);
}

TEST(SharedBitfield, Usage2)
{
    SharedBitfield<A, B, C> bitsA_a = A::A_a;
    SharedBitfield<A, B, C> bitsA_b = A::A_b;
    SharedBitfield<A, B, C> bitsA_c = A::A_c;
    SharedBitfield<A, B, C> bitsB_a = B::B_a;
    SharedBitfield<A, B, C> bitsB_b = B::B_b;
    SharedBitfield<A, B, C> bitsB_c = B::B_c;
    SharedBitfield<A, B, C> bitsC_a = C::C_a;
    SharedBitfield<A, B, C> bitsC_b = C::C_b;
    SharedBitfield<A, B, C> bitsC_c = C::C_c;

    EXPECT_EQ(bitsA_a, A::A_a);
    EXPECT_EQ(bitsB_a, C::C_a);
    EXPECT_EQ(bitsA_b, C::C_b);
    EXPECT_EQ(bitsB_b, B::B_b);
    EXPECT_EQ(bitsA_c, A::A_c);
    EXPECT_EQ(bitsB_c, C::C_c);

    EXPECT_EQ(A::A_a, bitsA_a);
    EXPECT_EQ(C::C_a, bitsB_a);
    EXPECT_EQ(C::C_b, bitsA_b);
    EXPECT_EQ(B::B_b, bitsB_b);
    EXPECT_EQ(A::A_c, bitsA_c);
    EXPECT_EQ(C::C_c, bitsB_c);

    EXPECT_EQ(bitsA_a, bitsB_a);
    EXPECT_EQ(bitsB_a, bitsC_a);
    EXPECT_EQ(bitsA_b, bitsB_b);
    EXPECT_EQ(bitsB_b, bitsC_b);
    EXPECT_EQ(bitsA_c, bitsB_c);
    EXPECT_EQ(bitsB_c, bitsC_c);

    bitsC_c = bitsC_a;
    bitsC_b = B::B_b;
}