40 #pragma GCC diagnostic push
45 # if (defined(__clang__) && __GNUC__ >= 10) || \
46 (!defined(__clang__) && __GNUC__ >= 9)
47 # pragma GCC diagnostic ignored "-Wdeprecated-copy"
51 #include <gmock/gmock.h>
52 #include <gtest/gtest.h>
54 #pragma GCC diagnostic pop
63 using testing::ElementsAre;
65 using testing::ElementsAreArray;
75 static constexpr
size_t BufSize = 12;
76 static constexpr
size_t BufOffset = 4;
77 static constexpr
size_t RazSize = 4;
79 std::array<uint8_t, BufSize>
buf;
80 RegisterBankLE::RegisterRaz
raz;
92 EXPECT_EQ(
raz.name(),
"raz");
97 EXPECT_EQ(
raz.size(), RazSize);
103 raz.write(buf.data() + BufOffset);
104 raz.read(buf.data() + BufOffset);
105 EXPECT_THAT(buf, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
106 0x00, 0x00, 0x00, 0x00,
107 0xff, 0xff, 0xff, 0xff}));
113 raz.write(buf.data() + BufOffset, 1, 3);
114 raz.read(buf.data() + BufOffset, 1, 3);
115 EXPECT_THAT(buf, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
116 0x00, 0x00, 0x00, 0xff,
117 0xff, 0xff, 0xff, 0xff}));
123 raz.write(buf.data() + BufOffset, 0, 3);
124 raz.read(buf.data() + BufOffset, 0, 3);
125 EXPECT_THAT(buf, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
126 0x00, 0x00, 0x00, 0xff,
127 0xff, 0xff, 0xff, 0xff}));
133 raz.write(buf.data() + BufOffset, 1, 2);
134 raz.read(buf.data() + BufOffset, 1, 2);
135 EXPECT_THAT(buf, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
136 0x00, 0x00, 0xff, 0xff,
137 0xff, 0xff, 0xff, 0xff}));
142 std::ostringstream
os;
144 EXPECT_EQ(
os.str(),
"");
150 EXPECT_TRUE(
raz.unserialize(
s));
161 static constexpr
size_t BufSize = 12;
162 static constexpr
size_t BufOffset = 4;
163 static constexpr
size_t RaoSize = 4;
165 std::array<uint8_t, BufSize>
buf;
166 RegisterBankLE::RegisterRao
rao;
178 EXPECT_EQ(rao.name(),
"rao");
183 EXPECT_EQ(rao.size(), RaoSize);
189 rao.write(buf.data() + BufOffset);
190 rao.read(buf.data() + BufOffset);
191 EXPECT_THAT(buf, ElementsAreArray({0x00, 0x00, 0x00, 0x00,
192 0xff, 0xff, 0xff, 0xff,
193 0x00, 0x00, 0x00, 0x00}));
199 rao.write(buf.data() + BufOffset, 1, 3);
200 rao.read(buf.data() + BufOffset, 1, 3);
201 EXPECT_THAT(buf, ElementsAreArray({0x00, 0x00, 0x00, 0x00,
202 0xff, 0xff, 0xff, 0x00,
203 0x00, 0x00, 0x00, 0x00}));
209 rao.write(buf.data() + BufOffset, 0, 3);
210 rao.read(buf.data() + BufOffset, 0, 3);
211 EXPECT_THAT(buf, ElementsAreArray({0x00, 0x00, 0x00, 0x00,
212 0xff, 0xff, 0xff, 0x00,
213 0x00, 0x00, 0x00, 0x00}));
219 rao.write(buf.data() + BufOffset, 1, 2);
220 rao.read(buf.data() + BufOffset, 1, 2);
221 EXPECT_THAT(buf, ElementsAreArray({0x00, 0x00, 0x00, 0x00,
222 0xff, 0xff, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00}));
228 std::ostringstream
os;
230 EXPECT_EQ(
os.str(),
"");
236 EXPECT_TRUE(rao.unserialize(
s));
247 static constexpr
size_t RegSize = 4;
249 std::array<uint8_t, RegSize * 3>
buf;
252 RegisterBankLE::RegisterBuf
reg;
256 : buf{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc},
257 backing{0x10, 0x20, 0x30, 0x40, 0x50, 0x60,
258 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0},
259 reg(
"buf_reg", backing.data() + RegSize, RegSize)
267 EXPECT_EQ(
reg.name(),
"buf_reg");
272 EXPECT_EQ(
reg.size(), RegSize);
278 reg.read(buf.data() + RegSize);
279 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
280 0x50, 0x60, 0x70, 0x80,
281 0x9, 0xa, 0xb, 0xc}));
282 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
283 0x50, 0x60, 0x70, 0x80,
284 0x90, 0xa0, 0xb0, 0xc0}));
290 reg.write(buf.data() + RegSize);
291 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
293 0x9, 0xa, 0xb, 0xc}));
294 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
296 0x90, 0xa0, 0xb0, 0xc0}));
302 reg.read(buf.data() + RegSize, 1, 3);
303 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
304 0x60, 0x70, 0x80, 0x8,
305 0x9, 0xa, 0xb, 0xc}));
306 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
307 0x50, 0x60, 0x70, 0x80,
308 0x90, 0xa0, 0xb0, 0xc0}));
314 reg.write(buf.data() + RegSize, 1, 3);
315 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
317 0x9, 0xa, 0xb, 0xc}));
318 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
320 0x90, 0xa0, 0xb0, 0xc0}));
326 reg.read(buf.data() + RegSize, 0, 3);
327 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
328 0x50, 0x60, 0x70, 0x8,
329 0x9, 0xa, 0xb, 0xc}));
330 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
331 0x50, 0x60, 0x70, 0x80,
332 0x90, 0xa0, 0xb0, 0xc0}));
338 reg.write(buf.data() + RegSize, 0, 3);
339 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
341 0x9, 0xa, 0xb, 0xc}));
342 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
344 0x90, 0xa0, 0xb0, 0xc0}));
350 reg.read(buf.data() + RegSize, 1, 2);
351 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
352 0x60, 0x70, 0x7, 0x8,
353 0x9, 0xa, 0xb, 0xc}));
354 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
355 0x50, 0x60, 0x70, 0x80,
356 0x90, 0xa0, 0xb0, 0xc0}));
362 reg.write(buf.data() + RegSize, 1, 2);
363 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
365 0x9, 0xa, 0xb, 0xc}));
366 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
367 0x50, 0x5, 0x6, 0x80,
368 0x90, 0xa0, 0xb0, 0xc0}));
373 std::ostringstream
os;
375 EXPECT_EQ(
os.str(),
"");
381 EXPECT_TRUE(
reg.unserialize(
s));
394 static constexpr
size_t RegSize = 12;
396 RegisterBankLE::RegisterLBuf<12>
reg;
402 reg.buffer.fill(0xff);
408 EXPECT_EQ(
reg.name(),
"lbuf_reg");
413 reg.write(to_write.data(), 4, 4);
414 EXPECT_THAT(
reg.buffer, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
416 0xff, 0xff, 0xff, 0xff}));
421 std::ostringstream
os;
422 for (
int i = 0;
i <
reg.buffer.size();
i++)
425 EXPECT_EQ(
os.str(),
"0 1 2 3 4 5 6 7 8 9 10 11");
430 std::string
s =
"0 1 2 3 4 5 6 7 8 9 10 11";
431 EXPECT_TRUE(
reg.unserialize(
s));
432 EXPECT_THAT(
reg.buffer, ElementsAreArray({0, 1, 2, 3, 4, 5,
433 6, 7, 8, 9, 10, 11}));
438 std::string
s =
"0 1 2 3 4 5 6 7 8 9 10";
439 EXPECT_FALSE(
reg.unserialize(
s));
440 EXPECT_THAT(
reg.buffer, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
441 0xff, 0xff, 0xff, 0xff,
442 0xff, 0xff, 0xff, 0xff}));
459 RegisterBankLE::Register<BackingType>
reg;
462 std::array<uint8_t, RegSize * 3>
buf;
465 buf{0x1, 0x2, 0x3, 0x4, 0x5, 0x6}
473 RegisterBankLE::Register<uint32_t> def(
"def");
474 EXPECT_EQ(def.get(), 0);
479 EXPECT_EQ(
reg.name(),
"le_reg");
484 EXPECT_EQ(
reg.size(), RegSize);
490 EXPECT_EQ(
reg.writeable(), 0xffff);
496 EXPECT_EQ(
reg.get(), 0x1122);
502 EXPECT_EQ(
reg.get(), 0x1020);
504 EXPECT_EQ(
reg.get(), 0x3040);
510 regBE.read(buf.data() + RegSize);
511 EXPECT_EQ(regBE.get(), 0x1122);
512 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x11, 0x22, 0x5, 0x6));
518 regBE.write(buf.data() + RegSize);
519 EXPECT_EQ(regBE.get(), 0x0304);
520 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
526 regBE.read(buf.data() + RegSize, 0, 1);
527 EXPECT_EQ(regBE.get(), 0x1122);
528 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x11, 0x4, 0x5, 0x6));
534 regBE.read(buf.data() + RegSize, 1, 1);
535 EXPECT_EQ(regBE.get(), 0x1122);
536 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x22, 0x4, 0x5, 0x6));
542 regBE.write(buf.data() + RegSize, 0, 1);
543 EXPECT_EQ(regBE.get(), 0x0322);
544 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
550 regBE.write(buf.data() + RegSize, 1, 1);
551 EXPECT_EQ(regBE.get(), 0x1103);
552 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
558 reg.read(buf.data() + RegSize);
559 EXPECT_EQ(
reg.get(), 0x1122);
560 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x22, 0x11, 0x5, 0x6));
566 reg.write(buf.data() + RegSize);
567 EXPECT_EQ(
reg.get(), 0x0403);
568 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
574 reg.read(buf.data() + RegSize, 0, 1);
575 EXPECT_EQ(
reg.get(), 0x1122);
576 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x22, 0x4, 0x5, 0x6));
582 reg.read(buf.data() + RegSize, 1, 1);
583 EXPECT_EQ(
reg.get(), 0x1122);
584 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x11, 0x4, 0x5, 0x6));
590 reg.write(buf.data() + RegSize, 0, 1);
591 EXPECT_EQ(
reg.get(), 0x1103);
592 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
598 reg.write(buf.data() + RegSize, 1, 1);
599 EXPECT_EQ(
reg.get(), 0x0322);
600 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
606 reg.writeable(0xff00);
607 reg.write(buf.data() + RegSize);
608 EXPECT_EQ(
reg.get(), 0x0422);
610 regBE.writeable(0xff00);
611 regBE.write(buf.data() + RegSize);
612 EXPECT_EQ(regBE.get(), 0x0322);
619 reg.write(buf.data() + RegSize);
620 EXPECT_EQ(
reg.get(), 0x1122);
626 reg.update(0xeeee, 0x0ff0);
627 EXPECT_EQ(
reg.get(), 0x1ee2);
633 reg.writeable(0xf00f);
635 EXPECT_EQ(
reg.get(), 0xe12e);
641 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
642 BackingType ret = 0x3344;
644 reg.reader([®_ptr, &ret](
auto &
r){
649 reg.read(buf.data() + RegSize);
650 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x44, 0x33, 0x5, 0x6));
651 EXPECT_EQ(reg_ptr, &
reg);
657 using Reg = RegisterBankLE::Register<BackingType>;
661 Reg *reg_ptr =
nullptr;
662 BackingType ret = 0x3344;
672 reg.reader(&read_struct, &ReadStruct::reader);
674 reg.read(buf.data() + RegSize);
675 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x44, 0x33, 0x5, 0x6));
676 EXPECT_EQ(read_struct.reg_ptr, &
reg);
682 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
683 BackingType value = 0;
685 reg.writer([®_ptr, &value](
auto &
r,
const BackingType &
v) {
690 reg.write(buf.data() + RegSize);
691 EXPECT_EQ(reg_ptr, &
reg);
692 EXPECT_EQ(value, 0x0403);
698 using Reg = RegisterBankLE::Register<BackingType>;
702 Reg *reg_ptr =
nullptr;
703 BackingType value = 0;
713 reg.writer(&write_struct, &WriteStruct::writer);
715 reg.write(buf.data() + RegSize);
716 EXPECT_EQ(write_struct.reg_ptr, &
reg);
717 EXPECT_THAT(write_struct.value, 0x0403);
723 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
726 BackingType ret = 0x3344;
728 reg.partialReader([®_ptr, &first, &last, ret](
auto &
r,
int f,
int l) {
735 reg.read(buf.data() + RegSize, 1, 1);
736 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x33, 0x4, 0x5, 0x6));
737 EXPECT_EQ(reg_ptr, &
reg);
738 EXPECT_EQ(first, 15);
745 using Reg = RegisterBankLE::Register<BackingType>;
749 Reg *reg_ptr =
nullptr;
752 BackingType ret = 0x3344;
755 reader(
Reg &
r,
int f,
int l)
764 reg.partialReader(&read_struct, &ReadStruct::reader);
766 reg.read(buf.data() + RegSize, 1, 1);
767 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x33, 0x4, 0x5, 0x6));
768 EXPECT_EQ(read_struct.reg_ptr, &
reg);
769 EXPECT_EQ(read_struct.first, 15);
770 EXPECT_EQ(read_struct.last, 8);
776 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
777 BackingType value = 0;
781 reg.partialWriter([®_ptr, &value, &first, &last](
782 auto &
r,
const BackingType &
v,
int f,
int l) {
789 reg.write(buf.data() + RegSize, 1, 1);
790 EXPECT_EQ(reg_ptr, &
reg);
791 EXPECT_EQ(value, 0x300);
792 EXPECT_EQ(first, 15);
799 using Reg = RegisterBankLE::Register<BackingType>;
803 Reg *reg_ptr =
nullptr;
804 BackingType value = 0;
818 reg.partialWriter(&write_struct, &WriteStruct::writer);
820 reg.write(buf.data() + RegSize, 1, 1);
821 EXPECT_EQ(write_struct.reg_ptr, &
reg);
822 EXPECT_EQ(write_struct.value, 0x300);
823 EXPECT_EQ(write_struct.first, 15);
824 EXPECT_EQ(write_struct.last, 8);
830 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
831 BackingType ret = 0x3344;
833 reg.reader([®_ptr, &ret](
auto &
r){
838 reg.read(buf.data() + RegSize, 1, 1);
839 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x33, 0x4, 0x5, 0x6));
840 EXPECT_EQ(reg_ptr, &
reg);
846 RegisterBankLE::Register<BackingType> *read_reg_ptr =
nullptr;
847 BackingType read_ret = 0x3344;
849 RegisterBankLE::Register<BackingType> *write_reg_ptr =
nullptr;
850 BackingType write_value = 0;
852 reg.reader([&read_reg_ptr, read_ret](
auto &
r){
855 }).
writer([&write_reg_ptr, &write_value](
auto &
r,
const BackingType &
v) {
860 reg.write(buf.data() + RegSize, 1, 1);
861 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
862 EXPECT_EQ(read_reg_ptr, &
reg);
863 EXPECT_EQ(write_reg_ptr, &
reg);
864 EXPECT_EQ(write_value, 0x0344);
869 std::ostringstream
os;
871 EXPECT_EQ(
os.str(),
"4386");
876 std::string
s =
"1234";
877 EXPECT_TRUE(
reg.unserialize(
s));
878 EXPECT_EQ(
reg.get(), 1234);
883 std::string
s =
"not_a_number";
884 EXPECT_FALSE(
reg.unserialize(
s));
920 int _first,
int _last, uint32_t _ret) :
921 type(_type), value(_value),
922 first(_first), last(_last), ret(_ret)
929 first == other.
first && last == other.
last &&
940 TestReg(
const std::string &new_name, uint32_t initial) :
943 reader([
this](
auto &
r) {
945 access.
ret = defaultReader(
r);
946 accesses.push_back(access);
949 writer([
this](
auto &
r,
const uint32_t &
v) {
953 accesses.push_back(access);
955 partialReader([
this](
auto &
r,
int f,
int l) {
956 Access access(PartialRead);
959 access.
ret = defaultPartialReader(
r,
f,
l);
960 accesses.push_back(access);
963 partialWriter([
this](
auto &
r,
const uint32_t &
v,
int f,
int l) {
964 Access access(PartialWrite);
968 defaultPartialWriter(
r,
v,
f,
l);
969 accesses.push_back(access);
977 std::array<uint8_t, 12>
buf;
980 reg0(
"reg0", 0xd3d2d1d0), reg1(
"reg1", 0xe3e2e1e0),
981 reg2(
"reg2", 0xf3f2f1f0),
982 emptyBank(
"empty", 0x12345), fullBank(
"full", 0x1000),
983 buf{0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
984 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc}
994 EXPECT_EQ(emptyBank.
name(),
"empty");
995 EXPECT_EQ(fullBank.
name(),
"full");
1000 EXPECT_EQ(emptyBank.
base(), 0x12345);
1001 EXPECT_EQ(fullBank.
base(), 0x1000);
1007 EXPECT_EQ(emptyBank.
size(), 0);
1009 EXPECT_EQ(emptyBank.
size(), 4);
1011 EXPECT_EQ(emptyBank.
size(), 12);
1018 fullBank.
read(0x1000, buf.data() + 4, 4);
1019 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1020 0xd0, 0xd1, 0xd2, 0xd3,
1021 0x99, 0xaa, 0xbb, 0xcc}));
1022 EXPECT_THAT(reg0.
accesses, ElementsAre(
1023 Access(Read, 0, 0, 0, 0xd3d2d1d0)
1025 EXPECT_TRUE(reg1.
accesses.empty());
1026 EXPECT_TRUE(reg2.
accesses.empty());
1031 fullBank.
read(0x1004, buf.data() + 4, 4);
1032 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1033 0xe0, 0xe1, 0xe2, 0xe3,
1034 0x99, 0xaa, 0xbb, 0xcc}));
1035 EXPECT_TRUE(reg0.
accesses.empty());
1036 EXPECT_THAT(reg1.
accesses, ElementsAre(
1037 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1039 EXPECT_TRUE(reg2.
accesses.empty());
1044 fullBank.
read(0x1008, buf.data() + 4, 4);
1045 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1046 0xf0, 0xf1, 0xf2, 0xf3,
1047 0x99, 0xaa, 0xbb, 0xcc}));
1048 EXPECT_TRUE(reg0.
accesses.empty());
1049 EXPECT_TRUE(reg1.
accesses.empty());
1050 EXPECT_THAT(reg2.
accesses, ElementsAre(
1051 Access(Read, 0, 0, 0, 0xf3f2f1f0)
1057 fullBank.
read(0x1004, buf.data() + 2, 8);
1058 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0xe0, 0xe1,
1059 0xe2, 0xe3, 0xf0, 0xf1,
1060 0xf2, 0xf3, 0xbb, 0xcc}));
1061 EXPECT_TRUE(reg0.
accesses.empty());
1062 EXPECT_THAT(reg1.
accesses, ElementsAre(
1063 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1065 EXPECT_THAT(reg2.
accesses, ElementsAre(
1066 Access(Read, 0, 0, 0, 0xf3f2f1f0)
1072 fullBank.
read(0x1001, buf.data() + 4, 2);
1073 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1074 0xd1, 0xd2, 0x77, 0x88,
1075 0x99, 0xaa, 0xbb, 0xcc}));
1076 EXPECT_THAT(reg0.
accesses, ElementsAre(
1077 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1078 Access(PartialRead, 0, 23, 8, 0x00d2d100)
1080 EXPECT_TRUE(reg1.
accesses.empty());
1081 EXPECT_TRUE(reg2.
accesses.empty());
1086 fullBank.
read(0x1002, buf.data() + 4, 4);
1087 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1088 0xd2, 0xd3, 0xe0, 0xe1,
1089 0x99, 0xaa, 0xbb, 0xcc}));
1090 EXPECT_THAT(reg0.
accesses, ElementsAre(
1091 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1092 Access(PartialRead, 0, 31, 16, 0xd3d20000)
1094 EXPECT_THAT(reg1.
accesses, ElementsAre(
1095 Access(Read, 0, 0, 0, 0xe3e2e1e0),
1096 Access(PartialRead, 0, 15, 0, 0x0000e1e0)
1098 EXPECT_TRUE(reg2.
accesses.empty());
1103 fullBank.
read(0x1002, buf.data() + 2, 8);
1104 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0xd2, 0xd3,
1105 0xe0, 0xe1, 0xe2, 0xe3,
1106 0xf0, 0xf1, 0xbb, 0xcc}));
1107 EXPECT_THAT(reg0.
accesses, ElementsAre(
1108 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1109 Access(PartialRead, 0, 31, 16, 0xd3d20000)
1111 EXPECT_THAT(reg1.
accesses, ElementsAre(
1112 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1114 EXPECT_THAT(reg2.
accesses, ElementsAre(
1115 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1116 Access(PartialRead, 0, 15, 0, 0x0000f1f0)
1122 fullBank.
read(0x1002, buf.data() + 4, 6);
1123 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1124 0xd2, 0xd3, 0xe0, 0xe1,
1125 0xe2, 0xe3, 0xbb, 0xcc}));
1126 EXPECT_THAT(reg0.
accesses, ElementsAre(
1127 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1128 Access(PartialRead, 0, 31, 16, 0xd3d20000)
1130 EXPECT_THAT(reg1.
accesses, ElementsAre(
1131 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1133 EXPECT_TRUE(reg2.
accesses.empty());
1138 fullBank.
read(0x1004, buf.data() + 4, 6);
1139 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1140 0xe0, 0xe1, 0xe2, 0xe3,
1141 0xf0, 0xf1, 0xbb, 0xcc}));
1142 EXPECT_TRUE(reg0.
accesses.empty());
1143 EXPECT_THAT(reg1.
accesses, ElementsAre(
1144 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1146 EXPECT_THAT(reg2.
accesses, ElementsAre(
1147 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1148 Access(PartialRead, 0, 15, 0, 0x0000f1f0)
1154 fullBank.
read(0x100a, buf.data() + 4, 2);
1155 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1156 0xf2, 0xf3, 0x77, 0x88,
1157 0x99, 0xaa, 0xbb, 0xcc}));
1158 EXPECT_TRUE(reg0.
accesses.empty());
1159 EXPECT_TRUE(reg1.
accesses.empty());
1160 EXPECT_THAT(reg2.
accesses, ElementsAre(
1161 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1162 Access(PartialRead, 0, 31, 16, 0xf3f20000)
1170 fullBank.
write(0x1000, buf.data() + 4, 4);
1171 EXPECT_EQ(reg0.get(), 0x88776655);
1172 EXPECT_EQ(reg1.get(), 0xe3e2e1e0);
1173 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1174 EXPECT_THAT(reg0.
accesses, ElementsAre(
1175 Access(Write, 0x88776655, 0, 0, 0)
1177 EXPECT_TRUE(reg1.
accesses.empty());
1178 EXPECT_TRUE(reg2.
accesses.empty());
1183 fullBank.
write(0x1004, buf.data() + 4, 4);
1184 EXPECT_EQ(reg0.get(), 0xd3d2d1d0);
1185 EXPECT_EQ(reg1.get(), 0x88776655);
1186 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1187 EXPECT_TRUE(reg0.
accesses.empty());
1188 EXPECT_THAT(reg1.
accesses, ElementsAre(
1189 Access(Write, 0x88776655, 0, 0, 0)
1191 EXPECT_TRUE(reg2.
accesses.empty());
1196 fullBank.
write(0x1008, buf.data() + 4, 4);
1197 EXPECT_EQ(reg0.get(), 0xd3d2d1d0);
1198 EXPECT_EQ(reg1.get(), 0xe3e2e1e0);
1199 EXPECT_EQ(reg2.get(), 0x88776655);
1200 EXPECT_TRUE(reg0.
accesses.empty());
1201 EXPECT_TRUE(reg1.
accesses.empty());
1202 EXPECT_THAT(reg2.
accesses, ElementsAre(
1203 Access(Write, 0x88776655, 0, 0, 0)
1209 fullBank.
write(0x1004, buf.data() + 2, 8);
1210 EXPECT_EQ(reg0.get(), 0xd3d2d1d0);
1211 EXPECT_EQ(reg1.get(), 0x66554433);
1212 EXPECT_EQ(reg2.get(), 0xaa998877);
1213 EXPECT_TRUE(reg0.
accesses.empty());
1214 EXPECT_THAT(reg1.
accesses, ElementsAre(
1215 Access(Write, 0x66554433, 0, 0, 0)
1217 EXPECT_THAT(reg2.
accesses, ElementsAre(
1218 Access(Write, 0xaa998877, 0, 0, 0)
1224 fullBank.
write(0x1001, buf.data() + 4, 2);
1225 EXPECT_EQ(reg0.get(), 0xd36655d0);
1226 EXPECT_EQ(reg1.get(), 0xe3e2e1e0);
1227 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1228 EXPECT_THAT(reg0.
accesses, ElementsAre(
1229 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1230 Access(Write, 0xd36655d0, 0, 0, 0),
1231 Access(PartialWrite, 0x00665500, 23, 8, 0)
1233 EXPECT_TRUE(reg1.
accesses.empty());
1234 EXPECT_TRUE(reg2.
accesses.empty());
1239 fullBank.
write(0x1002, buf.data() + 4, 4);
1240 EXPECT_EQ(reg0.get(), 0x6655d1d0);
1241 EXPECT_EQ(reg1.get(), 0xe3e28877);
1242 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1243 EXPECT_THAT(reg0.
accesses, ElementsAre(
1244 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1245 Access(Write, 0x6655d1d0, 0, 0, 0),
1246 Access(PartialWrite, 0x66550000, 31, 16, 0)
1248 EXPECT_THAT(reg1.
accesses, ElementsAre(
1249 Access(Read, 0, 0, 0, 0xe3e2e1e0),
1250 Access(Write, 0xe3e28877, 0, 0, 0),
1251 Access(PartialWrite, 0x00008877, 15, 0, 0)
1253 EXPECT_TRUE(reg2.
accesses.empty());
1258 fullBank.
write(0x1002, buf.data() + 2, 8);
1259 EXPECT_EQ(reg0.get(), 0x4433d1d0);
1260 EXPECT_EQ(reg1.get(), 0x88776655);
1261 EXPECT_EQ(reg2.get(), 0xf3f2aa99);
1262 EXPECT_THAT(reg0.
accesses, ElementsAre(
1263 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1264 Access(Write, 0x4433d1d0, 0, 0, 0),
1265 Access(PartialWrite, 0x44330000, 31, 16, 0)
1267 EXPECT_THAT(reg1.
accesses, ElementsAre(
1268 Access(Write, 0x88776655, 0, 0, 0)
1270 EXPECT_THAT(reg2.
accesses, ElementsAre(
1271 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1272 Access(Write, 0xf3f2aa99, 0, 0, 0),
1273 Access(PartialWrite, 0x0000aa99, 15, 0, 0)
1279 fullBank.
write(0x1002, buf.data() + 4, 6);
1280 EXPECT_EQ(reg0.get(), 0x6655d1d0);
1281 EXPECT_EQ(reg1.get(), 0xaa998877);
1282 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1283 EXPECT_THAT(reg0.
accesses, ElementsAre(
1284 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1285 Access(Write, 0x6655d1d0, 0, 0, 0),
1286 Access(PartialWrite, 0x66550000, 31, 16, 0)
1288 EXPECT_THAT(reg1.
accesses, ElementsAre(
1289 Access(Write, 0xaa998877, 0, 0, 0)
1291 EXPECT_TRUE(reg2.
accesses.empty());
1296 fullBank.
write(0x1004, buf.data() + 4, 6);
1297 EXPECT_EQ(reg0.get(), 0xd3d2d1d0);
1298 EXPECT_EQ(reg1.get(), 0x88776655);
1299 EXPECT_EQ(reg2.get(), 0xf3f2aa99);
1300 EXPECT_TRUE(reg0.
accesses.empty());
1301 EXPECT_THAT(reg1.
accesses, ElementsAre(
1302 Access(Write, 0x88776655, 0, 0, 0)
1304 EXPECT_THAT(reg2.
accesses, ElementsAre(
1305 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1306 Access(Write, 0xf3f2aa99, 0, 0, 0),
1307 Access(PartialWrite, 0x0000aa99, 15, 0, 0)