28 #include <gtest/gtest.h>
32 #include <type_traits>
40 Bitfield<39, 32> byte5;
42 BitfieldRO<39, 32> byte5RO;
43 BitfieldWO<39, 32> byte5WO;
45 Bitfield<43, 42> bits43To42;
47 SignedBitfield<41> bit41Signed;
49 SignedBitfield<47, 40> byte6Signed;
50 SignedBitfieldRO<47, 40> byte6SignedRO;
51 SignedBitfieldWO<47, 40> byte6SignedWO;
70 Bitfield<15, 12> high;
80 getter(
const uint64_t &storage)
const
90 setter(uint64_t &storage, uint64_t
val)
104 struct ContainingStruct
107 Bitfield<63, 60> topNibble;
114 containingFunc(uint64_t init_val, uint64_t fieldVal)
117 Bitfield<16, 15> field;
120 Contained contained = init_val;
121 contained.field = fieldVal;
141 template <
typename T>
144 template <
typename T>
155 EXPECT_EQ(sixtyFour.byte5, 0);
156 sixtyFour.byte5 = 0xff;
157 EXPECT_EQ(sixtyFour, 0xff00000000);
158 sixtyFour.byte5 = 0xfff;
159 EXPECT_EQ(sixtyFour, 0xff00000000);
160 EXPECT_EQ(sixtyFour.byte5, 0xff);
165 EXPECT_EQ(sixtyFour.bit2, 0);
166 sixtyFour.bit2 = 0x1;
167 EXPECT_EQ(sixtyFour, 0x4);
168 EXPECT_EQ(sixtyFour.bit2, 0x1);
173 EXPECT_EQ(sixtyFour.byte5RO, 0);
174 sixtyFour.byte5 = 0xff;
175 EXPECT_EQ(sixtyFour.byte5RO, 0xff);
180 sixtyFour.byte5WO = 0xff;
181 EXPECT_EQ(sixtyFour, 0xff00000000);
186 EXPECT_EQ(sixtyFour.byte6.bit41, 0);
187 sixtyFour.byte6 = 0x2;
188 EXPECT_EQ(sixtyFour.byte6.bit41, 1);
189 sixtyFour.byte6.bits43To42 = 0x3;
190 EXPECT_EQ(sixtyFour.byte6, 0
xe);
191 sixtyFour.byte6 = 0xff;
192 sixtyFour.byte6.bit41 = 0;
193 EXPECT_EQ(sixtyFour, 0xfd0000000000);
198 sixtyFour.byte6 = 0xff;
199 EXPECT_EQ(sixtyFour.byte6Signed, -1);
200 EXPECT_EQ(sixtyFour.byte6SignedRO, -1);
201 sixtyFour.byte6SignedWO = 0;
202 EXPECT_EQ(sixtyFour.byte6Signed, 0);
203 EXPECT_EQ(sixtyFour.byte6SignedRO, 0);
204 EXPECT_EQ(sixtyFour.byte6, 0);
209 ContainingStruct containing;
210 containing.contained = 0;
211 containing.contained.topNibble = 0xd;
212 EXPECT_EQ(containing.contained, 0xd000000000000000);
217 EXPECT_EQ(containingFunc(0xfffff, 0), 0xe7fff);
222 SixtyFour otherSixtyFour = 0;
224 otherSixtyFour.byte6.bit41 = sixtyFour.bit2;
225 EXPECT_EQ(otherSixtyFour, 0x20000000000);
226 otherSixtyFour.bit2 = sixtyFour.bit2;
227 EXPECT_EQ(otherSixtyFour, 0x20000000004);
232 SixtyFour otherSixtyFour = 0x4;
233 sixtyFour = otherSixtyFour;
234 EXPECT_EQ(sixtyFour, 0x4);
236 EXPECT_TRUE(sixtyFour < otherSixtyFour);
237 EXPECT_TRUE(otherSixtyFour > sixtyFour);
238 EXPECT_TRUE(sixtyFour != otherSixtyFour);
239 sixtyFour = otherSixtyFour;
240 EXPECT_TRUE(sixtyFour == otherSixtyFour);
247 EXPECT_EQ(split, 0xf0f0);
248 EXPECT_EQ((uint64_t)split.split, 0xff);
254 EXPECT_EQ(templatedFunction(sixtyFour), 0xff);
255 EXPECT_EQ(templatedFunction((uint64_t)sixtyFour), 0);
264 is64 = std::is_same<BitUnionBaseType<Dummy64>, uint64_t>::value;
266 is64 = std::is_same<BitUnionBaseType<Dummy32>, uint64_t>::value;
272 sixtyFour = 1234567812345678;
273 std::stringstream
ss;
275 EXPECT_EQ(
ss.str(),
"1234567812345678");
278 EmptyEight eight = 65;
280 EXPECT_EQ(
ss.str(),
"65");