blob: f9a924e2ce4c88845e219bfd439b2c6284fec48b (
plain)
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
#include <cassert>
#include <iostream>
#define NCURSES_CPP_CHAR_VALUE_AS_PUBLIC
#include <ncurses.h>
#include <ncurses/curs_char.hpp>
int main(int argc, char *argv[]) {
using namespace NCURSES_CPP_NAMESPACE;
// # Bitwise operators (member and global)
{
// ## With attr
curs_char c = 'a';
assert(c.value_ == static_cast<curs_char::value_type>('a'));
assert((c & attr::altcharset).value_ == ('a' & A_ALTCHARSET));
assert((c | attr::altcharset).value_ == ('a' | A_ALTCHARSET));
assert((c ^ attr::altcharset).value_ == ('a' ^ A_ALTCHARSET));
assert((attr::altcharset & c).value_ == ('a' & A_ALTCHARSET));
assert((attr::altcharset | c).value_ == ('a' | A_ALTCHARSET));
assert((attr::altcharset ^ c).value_ == ('a' ^ A_ALTCHARSET));
assert(('a' & attr::altcharset).value_ == ('a' & A_ALTCHARSET));
assert(('a' | attr::altcharset).value_ == ('a' | A_ALTCHARSET));
assert(('a' ^ attr::altcharset).value_ == ('a' ^ A_ALTCHARSET));
assert((attr::altcharset & 'a').value_ == ('a' & A_ALTCHARSET));
assert((attr::altcharset | 'a').value_ == ('a' | A_ALTCHARSET));
assert((attr::altcharset ^ 'a').value_ == ('a' ^ A_ALTCHARSET));
// ## With attr_flags
c = 'b';
assert(c.value_ == static_cast<curs_char::value_type>('b'));
assert((c & (attr::bold | attr::dim)).value_ == ('b' & (A_BOLD | A_DIM)));
assert((c | (attr::bold | attr::dim)).value_ == ('b' | (A_BOLD | A_DIM)));
assert((c ^ (attr::bold | attr::dim)).value_ == ('b' ^ (A_BOLD | A_DIM)));
assert(((attr::bold | attr::dim) & c).value_ == ('b' & (A_BOLD | A_DIM)));
assert(((attr::bold | attr::dim) | c).value_ == ('b' | (A_BOLD | A_DIM)));
assert(((attr::bold | attr::dim) ^ c).value_ == ('b' ^ (A_BOLD | A_DIM)));
assert(('b' & (attr::bold | attr::dim)).value_ == ('b' & (A_BOLD | A_DIM)));
assert(('b' | (attr::bold | attr::dim)).value_ == ('b' | (A_BOLD | A_DIM)));
assert(('b' ^ (attr::bold | attr::dim)).value_ == ('b' ^ (A_BOLD | A_DIM)));
assert(((attr::bold | attr::dim) & 'b').value_ == ('b' & (A_BOLD | A_DIM)));
assert(((attr::bold | attr::dim) | 'b').value_ == ('b' | (A_BOLD | A_DIM)));
assert(((attr::bold | attr::dim) ^ 'b').value_ == ('b' ^ (A_BOLD | A_DIM)));
// ## With color_pair
c = 'c';
assert(c.value_ == static_cast<curs_char::value_type>('c'));
assert((c & color_pair(10)).value_ == ('c' & COLOR_PAIR(10)));
assert((c | color_pair(10)).value_ == ('c' | COLOR_PAIR(10)));
assert((c ^ color_pair(10)).value_ == ('c' ^ COLOR_PAIR(10)));
assert((color_pair(10) & c).value_ == ('c' & COLOR_PAIR(10)));
assert((color_pair(10) | c).value_ == ('c' | COLOR_PAIR(10)));
assert((color_pair(10) ^ c).value_ == ('c' ^ COLOR_PAIR(10)));
assert(('c' & color_pair(10)).value_ == ('c' & COLOR_PAIR(10)));
assert(('c' | color_pair(10)).value_ == ('c' | COLOR_PAIR(10)));
assert(('c' ^ color_pair(10)).value_ == ('c' ^ COLOR_PAIR(10)));
assert((color_pair(10) & 'c').value_ == ('c' & COLOR_PAIR(10)));
assert((color_pair(10) | 'c').value_ == ('c' | COLOR_PAIR(10)));
assert((color_pair(10) ^ 'c').value_ == ('c' ^ COLOR_PAIR(10)));
// ## With full_attrs
// clang-format off
c = 'd';
assert(c.value_ == static_cast<curs_char::value_type>('d'));
assert((c & (attr::invis | attr::standout | color_pair(3))).value_ == ('d' & (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
assert((c | (attr::invis | attr::standout | color_pair(3))).value_ == ('d' | A_INVIS | A_STANDOUT | COLOR_PAIR(3)));
assert((c ^ (attr::invis | attr::standout | color_pair(3))).value_ == ('d' ^ (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
assert(((attr::invis | attr::standout | color_pair(3)) & c).value_ == ('d' & (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
assert(((attr::invis | attr::standout | color_pair(3)) | c).value_ == ('d' | A_INVIS | A_STANDOUT | COLOR_PAIR(3)));
assert(((attr::invis | attr::standout | color_pair(3)) ^ c).value_ == ('d' ^ (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
assert(('d' & (attr::invis | attr::standout | color_pair(3))).value_ == ('d' & (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
assert(('d' | (attr::invis | attr::standout | color_pair(3))).value_ == ('d' | A_INVIS | A_STANDOUT | COLOR_PAIR(3)));
assert(('d' ^ (attr::invis | attr::standout | color_pair(3))).value_ == ('d' ^ (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
assert(((attr::invis | attr::standout | color_pair(3)) & 'd').value_ == ('d' & (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
assert(((attr::invis | attr::standout | color_pair(3)) | 'd').value_ == ('d' | A_INVIS | A_STANDOUT | COLOR_PAIR(3)));
assert(((attr::invis | attr::standout | color_pair(3)) ^ 'd').value_ == ('d' ^ (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
// clang-format on
}
// # Assignment operators
{
// # With attr
{
curs_char c = 'a';
c &= attr::altcharset;
assert(c.value_ == ('a' & A_ALTCHARSET));
}
{
curs_char c = 'a';
c |= attr::altcharset;
assert(c.value_ == ('a' | A_ALTCHARSET));
}
{
curs_char c = 'a';
c ^= attr::altcharset;
assert(c.value_ == ('a' ^ A_ALTCHARSET));
}
// # With attr_flags
{
curs_char c = 'a';
c &= (attr::altcharset | attr::blink);
assert(c.value_ == ('a' & (A_ALTCHARSET | A_BLINK)));
}
{
curs_char c = 'a';
c |= (attr::altcharset | attr::blink);
assert(c.value_ == ('a' | (A_ALTCHARSET | A_BLINK)));
}
{
curs_char c = 'a';
c ^= (attr::altcharset | attr::blink);
assert(c.value_ == ('a' ^ (A_ALTCHARSET | A_BLINK)));
}
// # With color_pair
{
curs_char c = 'a';
c &= color_pair(7);
assert(c.value_ == ('a' & (COLOR_PAIR(7))));
}
{
curs_char c = 'a';
c |= color_pair(7);
assert(c.value_ == ('a' | (COLOR_PAIR(7))));
}
{
curs_char c = 'a';
c ^= color_pair(7);
assert(c.value_ == ('a' ^ (COLOR_PAIR(7))));
}
//
// # With full_attrs
{
curs_char c = 'a';
c &= (attr::invis | attr::standout | color_pair(3));
assert(c.value_ == ('a' & (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
}
{
curs_char c = 'a';
c |= (attr::invis | attr::standout | color_pair(3));
assert(c.value_ == ('a' | A_INVIS | A_STANDOUT | COLOR_PAIR(3)));
}
{
curs_char c = 'a';
c ^= (attr::invis | attr::standout | color_pair(3));
assert(c.value_ == ('a' ^ (A_INVIS | A_STANDOUT | COLOR_PAIR(3))));
}
}
// # Relational operators
{
curs_char a = 'a';
curs_char b = 'b';
curs_char c = 'a';
assert(a == a);
assert(a == c);
assert(a != b);
assert(a < b);
assert(a <= b);
assert(b > a);
assert(b >= a);
assert(b == 'b');
assert(b != 'a');
assert(b > 'a');
assert(b >= 'a');
assert(b < 'c');
assert(b <= 'c');
assert('b' == b);
assert('a' != b);
assert('a' < b);
assert('a' <= b);
assert('c' > b);
assert('c' >= b);
}
return 0;
}
|