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
61 using testing::ElementsAre;
63 using testing::ElementsAreArray;
77 std::array<uint8_t, BufSize>
buf;
78 RegisterBankLE::RegisterRaz
raz;
90 EXPECT_EQ(
raz.name(),
"raz");
95 EXPECT_EQ(
raz.size(), RazSize);
101 raz.write(buf.data() + BufOffset);
102 raz.read(buf.data() + BufOffset);
103 EXPECT_THAT(buf, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
104 0x00, 0x00, 0x00, 0x00,
105 0xff, 0xff, 0xff, 0xff}));
111 raz.write(buf.data() + BufOffset, 1, 3);
112 raz.read(buf.data() + BufOffset, 1, 3);
113 EXPECT_THAT(buf, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
114 0x00, 0x00, 0x00, 0xff,
115 0xff, 0xff, 0xff, 0xff}));
121 raz.write(buf.data() + BufOffset, 0, 3);
122 raz.read(buf.data() + BufOffset, 0, 3);
123 EXPECT_THAT(buf, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
124 0x00, 0x00, 0x00, 0xff,
125 0xff, 0xff, 0xff, 0xff}));
131 raz.write(buf.data() + BufOffset, 1, 2);
132 raz.read(buf.data() + BufOffset, 1, 2);
133 EXPECT_THAT(buf, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
134 0x00, 0x00, 0xff, 0xff,
135 0xff, 0xff, 0xff, 0xff}));
140 std::ostringstream
os;
142 EXPECT_EQ(
os.str(),
"");
148 EXPECT_TRUE(
raz.unserialize(
s));
163 std::array<uint8_t, BufSize>
buf;
164 RegisterBankLE::RegisterRao
rao;
176 EXPECT_EQ(rao.name(),
"rao");
181 EXPECT_EQ(rao.size(), RaoSize);
187 rao.write(buf.data() + BufOffset);
188 rao.read(buf.data() + BufOffset);
189 EXPECT_THAT(buf, ElementsAreArray({0x00, 0x00, 0x00, 0x00,
190 0xff, 0xff, 0xff, 0xff,
191 0x00, 0x00, 0x00, 0x00}));
197 rao.write(buf.data() + BufOffset, 1, 3);
198 rao.read(buf.data() + BufOffset, 1, 3);
199 EXPECT_THAT(buf, ElementsAreArray({0x00, 0x00, 0x00, 0x00,
200 0xff, 0xff, 0xff, 0x00,
201 0x00, 0x00, 0x00, 0x00}));
207 rao.write(buf.data() + BufOffset, 0, 3);
208 rao.read(buf.data() + BufOffset, 0, 3);
209 EXPECT_THAT(buf, ElementsAreArray({0x00, 0x00, 0x00, 0x00,
210 0xff, 0xff, 0xff, 0x00,
211 0x00, 0x00, 0x00, 0x00}));
217 rao.write(buf.data() + BufOffset, 1, 2);
218 rao.read(buf.data() + BufOffset, 1, 2);
219 EXPECT_THAT(buf, ElementsAreArray({0x00, 0x00, 0x00, 0x00,
220 0xff, 0xff, 0x00, 0x00,
221 0x00, 0x00, 0x00, 0x00}));
226 std::ostringstream
os;
228 EXPECT_EQ(
os.str(),
"");
234 EXPECT_TRUE(rao.unserialize(
s));
247 RegisterBankLE::RegisterBuf
reg;
249 std::array<uint8_t, RegSize * 3>
buf;
254 buf{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc},
255 backing{0x10, 0x20, 0x30, 0x40, 0x50, 0x60,
256 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0}
264 EXPECT_EQ(
reg.name(),
"buf_reg");
269 EXPECT_EQ(
reg.size(), RegSize);
275 reg.read(buf.data() + RegSize);
276 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
277 0x50, 0x60, 0x70, 0x80,
278 0x9, 0xa, 0xb, 0xc}));
279 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
280 0x50, 0x60, 0x70, 0x80,
281 0x90, 0xa0, 0xb0, 0xc0}));
287 reg.write(buf.data() + RegSize);
288 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
290 0x9, 0xa, 0xb, 0xc}));
291 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
293 0x90, 0xa0, 0xb0, 0xc0}));
299 reg.read(buf.data() + RegSize, 1, 3);
300 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
301 0x60, 0x70, 0x80, 0x8,
302 0x9, 0xa, 0xb, 0xc}));
303 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
304 0x50, 0x60, 0x70, 0x80,
305 0x90, 0xa0, 0xb0, 0xc0}));
311 reg.write(buf.data() + RegSize, 1, 3);
312 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
314 0x9, 0xa, 0xb, 0xc}));
315 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
317 0x90, 0xa0, 0xb0, 0xc0}));
323 reg.read(buf.data() + RegSize, 0, 3);
324 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
325 0x50, 0x60, 0x70, 0x8,
326 0x9, 0xa, 0xb, 0xc}));
327 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
328 0x50, 0x60, 0x70, 0x80,
329 0x90, 0xa0, 0xb0, 0xc0}));
335 reg.write(buf.data() + RegSize, 0, 3);
336 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
338 0x9, 0xa, 0xb, 0xc}));
339 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
341 0x90, 0xa0, 0xb0, 0xc0}));
347 reg.read(buf.data() + RegSize, 1, 2);
348 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
349 0x60, 0x70, 0x7, 0x8,
350 0x9, 0xa, 0xb, 0xc}));
351 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
352 0x50, 0x60, 0x70, 0x80,
353 0x90, 0xa0, 0xb0, 0xc0}));
359 reg.write(buf.data() + RegSize, 1, 2);
360 EXPECT_THAT(buf, ElementsAreArray({0x1, 0x2, 0x3, 0x4,
362 0x9, 0xa, 0xb, 0xc}));
363 EXPECT_THAT(backing, ElementsAreArray({0x10, 0x20, 0x30, 0x40,
364 0x50, 0x5, 0x6, 0x80,
365 0x90, 0xa0, 0xb0, 0xc0}));
370 std::ostringstream
os;
372 EXPECT_EQ(
os.str(),
"");
378 EXPECT_TRUE(
reg.unserialize(
s));
393 RegisterBankLE::RegisterLBuf<12>
reg;
399 reg.buffer.fill(0xff);
405 EXPECT_EQ(
reg.name(),
"lbuf_reg");
410 reg.write(to_write.data(), 4, 4);
411 EXPECT_THAT(
reg.buffer, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
413 0xff, 0xff, 0xff, 0xff}));
418 std::ostringstream
os;
419 for (
int i = 0;
i <
reg.buffer.size();
i++)
422 EXPECT_EQ(
os.str(),
"0 1 2 3 4 5 6 7 8 9 10 11");
427 std::string
s =
"0 1 2 3 4 5 6 7 8 9 10 11";
428 EXPECT_TRUE(
reg.unserialize(
s));
429 EXPECT_THAT(
reg.buffer, ElementsAreArray({0, 1, 2, 3, 4, 5,
430 6, 7, 8, 9, 10, 11}));
435 std::string
s =
"0 1 2 3 4 5 6 7 8 9 10";
436 EXPECT_FALSE(
reg.unserialize(
s));
437 EXPECT_THAT(
reg.buffer, ElementsAreArray({0xff, 0xff, 0xff, 0xff,
438 0xff, 0xff, 0xff, 0xff,
439 0xff, 0xff, 0xff, 0xff}));
456 RegisterBankLE::Register<BackingType>
reg;
459 std::array<uint8_t, RegSize * 3>
buf;
462 buf{0x1, 0x2, 0x3, 0x4, 0x5, 0x6}
470 RegisterBankLE::Register<uint32_t> def(
"def");
471 EXPECT_EQ(def.get(), 0);
476 EXPECT_EQ(
reg.name(),
"le_reg");
481 EXPECT_EQ(
reg.size(), RegSize);
487 EXPECT_EQ(
reg.writeable(), 0xffff);
493 EXPECT_EQ(
reg.get(), 0x1122);
499 EXPECT_EQ(
reg.get(), 0x1020);
501 EXPECT_EQ(
reg.get(), 0x3040);
507 regBE.read(buf.data() + RegSize);
508 EXPECT_EQ(regBE.get(), 0x1122);
509 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x11, 0x22, 0x5, 0x6));
515 regBE.write(buf.data() + RegSize);
516 EXPECT_EQ(regBE.get(), 0x0304);
517 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
523 regBE.read(buf.data() + RegSize, 0, 1);
524 EXPECT_EQ(regBE.get(), 0x1122);
525 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x11, 0x4, 0x5, 0x6));
531 regBE.read(buf.data() + RegSize, 1, 1);
532 EXPECT_EQ(regBE.get(), 0x1122);
533 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x22, 0x4, 0x5, 0x6));
539 regBE.write(buf.data() + RegSize, 0, 1);
540 EXPECT_EQ(regBE.get(), 0x0322);
541 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
547 regBE.write(buf.data() + RegSize, 1, 1);
548 EXPECT_EQ(regBE.get(), 0x1103);
549 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
555 reg.read(buf.data() + RegSize);
556 EXPECT_EQ(
reg.get(), 0x1122);
557 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x22, 0x11, 0x5, 0x6));
563 reg.write(buf.data() + RegSize);
564 EXPECT_EQ(
reg.get(), 0x0403);
565 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
571 reg.read(buf.data() + RegSize, 0, 1);
572 EXPECT_EQ(
reg.get(), 0x1122);
573 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x22, 0x4, 0x5, 0x6));
579 reg.read(buf.data() + RegSize, 1, 1);
580 EXPECT_EQ(
reg.get(), 0x1122);
581 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x11, 0x4, 0x5, 0x6));
587 reg.write(buf.data() + RegSize, 0, 1);
588 EXPECT_EQ(
reg.get(), 0x1103);
589 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
595 reg.write(buf.data() + RegSize, 1, 1);
596 EXPECT_EQ(
reg.get(), 0x0322);
597 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
603 reg.writeable(0xff00);
604 reg.write(buf.data() + RegSize);
605 EXPECT_EQ(
reg.get(), 0x0422);
607 regBE.writeable(0xff00);
608 regBE.write(buf.data() + RegSize);
609 EXPECT_EQ(regBE.get(), 0x0322);
616 reg.write(buf.data() + RegSize);
617 EXPECT_EQ(
reg.get(), 0x1122);
623 reg.update(0xeeee, 0x0ff0);
624 EXPECT_EQ(
reg.get(), 0x1ee2);
630 reg.writeable(0xf00f);
632 EXPECT_EQ(
reg.get(), 0xe12e);
638 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
639 BackingType ret = 0x3344;
641 reg.reader([®_ptr, &ret](
auto &
r){
646 reg.read(buf.data() + RegSize);
647 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x44, 0x33, 0x5, 0x6));
648 EXPECT_EQ(reg_ptr, &
reg);
654 using Reg = RegisterBankLE::Register<BackingType>;
658 Reg *reg_ptr =
nullptr;
659 BackingType ret = 0x3344;
669 reg.reader(&read_struct, &ReadStruct::reader);
671 reg.read(buf.data() + RegSize);
672 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x44, 0x33, 0x5, 0x6));
673 EXPECT_EQ(read_struct.reg_ptr, &
reg);
679 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
680 BackingType value = 0;
682 reg.writer([®_ptr, &value](
auto &
r,
const BackingType &
v) {
687 reg.write(buf.data() + RegSize);
688 EXPECT_EQ(reg_ptr, &
reg);
689 EXPECT_EQ(value, 0x0403);
695 using Reg = RegisterBankLE::Register<BackingType>;
699 Reg *reg_ptr =
nullptr;
700 BackingType value = 0;
703 writer(Reg &
r,
const BackingType &
v)
710 reg.writer(&write_struct, &WriteStruct::writer);
712 reg.write(buf.data() + RegSize);
713 EXPECT_EQ(write_struct.reg_ptr, &
reg);
714 EXPECT_THAT(write_struct.value, 0x0403);
720 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
723 BackingType ret = 0x3344;
725 reg.partialReader([®_ptr, &first, &last, ret](
auto &
r,
int f,
int l) {
732 reg.read(buf.data() + RegSize, 1, 1);
733 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x33, 0x4, 0x5, 0x6));
734 EXPECT_EQ(reg_ptr, &
reg);
735 EXPECT_EQ(first, 15);
742 using Reg = RegisterBankLE::Register<BackingType>;
746 Reg *reg_ptr =
nullptr;
749 BackingType ret = 0x3344;
752 reader(Reg &
r,
int f,
int l)
761 reg.partialReader(&read_struct, &ReadStruct::reader);
763 reg.read(buf.data() + RegSize, 1, 1);
764 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x33, 0x4, 0x5, 0x6));
765 EXPECT_EQ(read_struct.reg_ptr, &
reg);
766 EXPECT_EQ(read_struct.first, 15);
767 EXPECT_EQ(read_struct.last, 8);
773 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
774 BackingType value = 0;
778 reg.partialWriter([®_ptr, &value, &first, &last](
779 auto &
r,
const BackingType &
v,
int f,
int l) {
786 reg.write(buf.data() + RegSize, 1, 1);
787 EXPECT_EQ(reg_ptr, &
reg);
788 EXPECT_EQ(value, 0x300);
789 EXPECT_EQ(first, 15);
796 using Reg = RegisterBankLE::Register<BackingType>;
800 Reg *reg_ptr =
nullptr;
801 BackingType value = 0;
806 writer(Reg &
r,
const BackingType &
v,
int f,
int l)
815 reg.partialWriter(&write_struct, &WriteStruct::writer);
817 reg.write(buf.data() + RegSize, 1, 1);
818 EXPECT_EQ(write_struct.reg_ptr, &
reg);
819 EXPECT_EQ(write_struct.value, 0x300);
820 EXPECT_EQ(write_struct.first, 15);
821 EXPECT_EQ(write_struct.last, 8);
827 RegisterBankLE::Register<BackingType> *reg_ptr =
nullptr;
828 BackingType ret = 0x3344;
830 reg.reader([®_ptr, &ret](
auto &
r){
835 reg.read(buf.data() + RegSize, 1, 1);
836 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x33, 0x4, 0x5, 0x6));
837 EXPECT_EQ(reg_ptr, &
reg);
843 RegisterBankLE::Register<BackingType> *read_reg_ptr =
nullptr;
844 BackingType read_ret = 0x3344;
846 RegisterBankLE::Register<BackingType> *write_reg_ptr =
nullptr;
847 BackingType write_value = 0;
849 reg.reader([&read_reg_ptr, read_ret](
auto &
r){
852 }).
writer([&write_reg_ptr, &write_value](
auto &
r,
const BackingType &
v) {
857 reg.write(buf.data() + RegSize, 1, 1);
858 EXPECT_THAT(buf, ElementsAre(0x1, 0x2, 0x3, 0x4, 0x5, 0x6));
859 EXPECT_EQ(read_reg_ptr, &
reg);
860 EXPECT_EQ(write_reg_ptr, &
reg);
861 EXPECT_EQ(write_value, 0x0344);
866 std::ostringstream
os;
868 EXPECT_EQ(
os.str(),
"4386");
873 std::string
s =
"1234";
874 EXPECT_TRUE(
reg.unserialize(
s));
875 EXPECT_EQ(
reg.get(), 1234);
880 std::string
s =
"not_a_number";
881 EXPECT_FALSE(
reg.unserialize(
s));
916 int _first,
int _last, uint32_t _ret) :
936 TestReg(
const std::string &new_name, uint32_t initial) :
939 reader([
this](
auto &
r) {
941 access.
ret = defaultReader(
r);
945 writer([
this](
auto &
r,
const uint32_t &
v) {
951 partialReader([
this](
auto &
r,
int f,
int l) {
955 access.
ret = defaultPartialReader(
r,
f,
l);
959 partialWriter([
this](
auto &
r,
const uint32_t &
v,
int f,
int l) {
964 defaultPartialWriter(
r,
v,
f,
l);
973 std::array<uint8_t, 12>
buf;
976 reg0(
"reg0", 0xd3d2d1d0),
reg1(
"reg1", 0xe3e2e1e0),
977 reg2(
"reg2", 0xf3f2f1f0),
979 buf{0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
980 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc}
990 EXPECT_EQ(emptyBank.
name(),
"empty");
991 EXPECT_EQ(fullBank.
name(),
"full");
996 EXPECT_EQ(emptyBank.
base(), 0x12345);
997 EXPECT_EQ(fullBank.
base(), 0x1000);
1003 EXPECT_EQ(emptyBank.
size(), 0);
1005 EXPECT_EQ(emptyBank.
size(), 4);
1007 EXPECT_EQ(emptyBank.
size(), 12);
1014 fullBank.
read(0x1000, buf.data() + 4, 4);
1015 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1016 0xd0, 0xd1, 0xd2, 0xd3,
1017 0x99, 0xaa, 0xbb, 0xcc}));
1018 EXPECT_THAT(reg0.
accesses, ElementsAre(
1019 Access(Read, 0, 0, 0, 0xd3d2d1d0)
1021 EXPECT_TRUE(reg1.
accesses.empty());
1022 EXPECT_TRUE(reg2.
accesses.empty());
1027 fullBank.
read(0x1004, buf.data() + 4, 4);
1028 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1029 0xe0, 0xe1, 0xe2, 0xe3,
1030 0x99, 0xaa, 0xbb, 0xcc}));
1031 EXPECT_TRUE(reg0.
accesses.empty());
1032 EXPECT_THAT(reg1.
accesses, ElementsAre(
1033 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1035 EXPECT_TRUE(reg2.
accesses.empty());
1040 fullBank.
read(0x1008, buf.data() + 4, 4);
1041 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1042 0xf0, 0xf1, 0xf2, 0xf3,
1043 0x99, 0xaa, 0xbb, 0xcc}));
1044 EXPECT_TRUE(reg0.
accesses.empty());
1045 EXPECT_TRUE(reg1.
accesses.empty());
1046 EXPECT_THAT(reg2.
accesses, ElementsAre(
1047 Access(Read, 0, 0, 0, 0xf3f2f1f0)
1053 fullBank.
read(0x1004, buf.data() + 2, 8);
1054 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0xe0, 0xe1,
1055 0xe2, 0xe3, 0xf0, 0xf1,
1056 0xf2, 0xf3, 0xbb, 0xcc}));
1057 EXPECT_TRUE(reg0.
accesses.empty());
1058 EXPECT_THAT(reg1.
accesses, ElementsAre(
1059 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1061 EXPECT_THAT(reg2.
accesses, ElementsAre(
1062 Access(Read, 0, 0, 0, 0xf3f2f1f0)
1068 fullBank.
read(0x1001, buf.data() + 4, 2);
1069 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1070 0xd1, 0xd2, 0x77, 0x88,
1071 0x99, 0xaa, 0xbb, 0xcc}));
1072 EXPECT_THAT(reg0.
accesses, ElementsAre(
1073 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1074 Access(PartialRead, 0, 23, 8, 0x00d2d100)
1076 EXPECT_TRUE(reg1.
accesses.empty());
1077 EXPECT_TRUE(reg2.
accesses.empty());
1082 fullBank.
read(0x1002, buf.data() + 4, 4);
1083 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1084 0xd2, 0xd3, 0xe0, 0xe1,
1085 0x99, 0xaa, 0xbb, 0xcc}));
1086 EXPECT_THAT(reg0.
accesses, ElementsAre(
1087 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1088 Access(PartialRead, 0, 31, 16, 0xd3d20000)
1090 EXPECT_THAT(reg1.
accesses, ElementsAre(
1091 Access(Read, 0, 0, 0, 0xe3e2e1e0),
1092 Access(PartialRead, 0, 15, 0, 0x0000e1e0)
1094 EXPECT_TRUE(reg2.
accesses.empty());
1099 fullBank.
read(0x1002, buf.data() + 2, 8);
1100 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0xd2, 0xd3,
1101 0xe0, 0xe1, 0xe2, 0xe3,
1102 0xf0, 0xf1, 0xbb, 0xcc}));
1103 EXPECT_THAT(reg0.
accesses, ElementsAre(
1104 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1105 Access(PartialRead, 0, 31, 16, 0xd3d20000)
1107 EXPECT_THAT(reg1.
accesses, ElementsAre(
1108 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1110 EXPECT_THAT(reg2.
accesses, ElementsAre(
1111 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1112 Access(PartialRead, 0, 15, 0, 0x0000f1f0)
1118 fullBank.
read(0x1002, buf.data() + 4, 6);
1119 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1120 0xd2, 0xd3, 0xe0, 0xe1,
1121 0xe2, 0xe3, 0xbb, 0xcc}));
1122 EXPECT_THAT(reg0.
accesses, ElementsAre(
1123 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1124 Access(PartialRead, 0, 31, 16, 0xd3d20000)
1126 EXPECT_THAT(reg1.
accesses, ElementsAre(
1127 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1129 EXPECT_TRUE(reg2.
accesses.empty());
1134 fullBank.
read(0x1004, buf.data() + 4, 6);
1135 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1136 0xe0, 0xe1, 0xe2, 0xe3,
1137 0xf0, 0xf1, 0xbb, 0xcc}));
1138 EXPECT_TRUE(reg0.
accesses.empty());
1139 EXPECT_THAT(reg1.
accesses, ElementsAre(
1140 Access(Read, 0, 0, 0, 0xe3e2e1e0)
1142 EXPECT_THAT(reg2.
accesses, ElementsAre(
1143 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1144 Access(PartialRead, 0, 15, 0, 0x0000f1f0)
1150 fullBank.
read(0x100a, buf.data() + 4, 2);
1151 EXPECT_THAT(buf, ElementsAreArray({0x11, 0x22, 0x33, 0x44,
1152 0xf2, 0xf3, 0x77, 0x88,
1153 0x99, 0xaa, 0xbb, 0xcc}));
1154 EXPECT_TRUE(reg0.
accesses.empty());
1155 EXPECT_TRUE(reg1.
accesses.empty());
1156 EXPECT_THAT(reg2.
accesses, ElementsAre(
1157 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1158 Access(PartialRead, 0, 31, 16, 0xf3f20000)
1166 fullBank.
write(0x1000, buf.data() + 4, 4);
1167 EXPECT_EQ(reg0.get(), 0x88776655);
1168 EXPECT_EQ(reg1.get(), 0xe3e2e1e0);
1169 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1170 EXPECT_THAT(reg0.
accesses, ElementsAre(
1171 Access(Write, 0x88776655, 0, 0, 0)
1173 EXPECT_TRUE(reg1.
accesses.empty());
1174 EXPECT_TRUE(reg2.
accesses.empty());
1179 fullBank.
write(0x1004, buf.data() + 4, 4);
1180 EXPECT_EQ(reg0.get(), 0xd3d2d1d0);
1181 EXPECT_EQ(reg1.get(), 0x88776655);
1182 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1183 EXPECT_TRUE(reg0.
accesses.empty());
1184 EXPECT_THAT(reg1.
accesses, ElementsAre(
1185 Access(Write, 0x88776655, 0, 0, 0)
1187 EXPECT_TRUE(reg2.
accesses.empty());
1192 fullBank.
write(0x1008, buf.data() + 4, 4);
1193 EXPECT_EQ(reg0.get(), 0xd3d2d1d0);
1194 EXPECT_EQ(reg1.get(), 0xe3e2e1e0);
1195 EXPECT_EQ(reg2.get(), 0x88776655);
1196 EXPECT_TRUE(reg0.
accesses.empty());
1197 EXPECT_TRUE(reg1.
accesses.empty());
1198 EXPECT_THAT(reg2.
accesses, ElementsAre(
1199 Access(Write, 0x88776655, 0, 0, 0)
1205 fullBank.
write(0x1004, buf.data() + 2, 8);
1206 EXPECT_EQ(reg0.get(), 0xd3d2d1d0);
1207 EXPECT_EQ(reg1.get(), 0x66554433);
1208 EXPECT_EQ(reg2.get(), 0xaa998877);
1209 EXPECT_TRUE(reg0.
accesses.empty());
1210 EXPECT_THAT(reg1.
accesses, ElementsAre(
1211 Access(Write, 0x66554433, 0, 0, 0)
1213 EXPECT_THAT(reg2.
accesses, ElementsAre(
1214 Access(Write, 0xaa998877, 0, 0, 0)
1220 fullBank.
write(0x1001, buf.data() + 4, 2);
1221 EXPECT_EQ(reg0.get(), 0xd36655d0);
1222 EXPECT_EQ(reg1.get(), 0xe3e2e1e0);
1223 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1224 EXPECT_THAT(reg0.
accesses, ElementsAre(
1225 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1226 Access(Write, 0xd36655d0, 0, 0, 0),
1227 Access(PartialWrite, 0x00665500, 23, 8, 0)
1229 EXPECT_TRUE(reg1.
accesses.empty());
1230 EXPECT_TRUE(reg2.
accesses.empty());
1235 fullBank.
write(0x1002, buf.data() + 4, 4);
1236 EXPECT_EQ(reg0.get(), 0x6655d1d0);
1237 EXPECT_EQ(reg1.get(), 0xe3e28877);
1238 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1239 EXPECT_THAT(reg0.
accesses, ElementsAre(
1240 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1241 Access(Write, 0x6655d1d0, 0, 0, 0),
1242 Access(PartialWrite, 0x66550000, 31, 16, 0)
1244 EXPECT_THAT(reg1.
accesses, ElementsAre(
1245 Access(Read, 0, 0, 0, 0xe3e2e1e0),
1246 Access(Write, 0xe3e28877, 0, 0, 0),
1247 Access(PartialWrite, 0x00008877, 15, 0, 0)
1249 EXPECT_TRUE(reg2.
accesses.empty());
1254 fullBank.
write(0x1002, buf.data() + 2, 8);
1255 EXPECT_EQ(reg0.get(), 0x4433d1d0);
1256 EXPECT_EQ(reg1.get(), 0x88776655);
1257 EXPECT_EQ(reg2.get(), 0xf3f2aa99);
1258 EXPECT_THAT(reg0.
accesses, ElementsAre(
1259 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1260 Access(Write, 0x4433d1d0, 0, 0, 0),
1261 Access(PartialWrite, 0x44330000, 31, 16, 0)
1263 EXPECT_THAT(reg1.
accesses, ElementsAre(
1264 Access(Write, 0x88776655, 0, 0, 0)
1266 EXPECT_THAT(reg2.
accesses, ElementsAre(
1267 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1268 Access(Write, 0xf3f2aa99, 0, 0, 0),
1269 Access(PartialWrite, 0x0000aa99, 15, 0, 0)
1275 fullBank.
write(0x1002, buf.data() + 4, 6);
1276 EXPECT_EQ(reg0.get(), 0x6655d1d0);
1277 EXPECT_EQ(reg1.get(), 0xaa998877);
1278 EXPECT_EQ(reg2.get(), 0xf3f2f1f0);
1279 EXPECT_THAT(reg0.
accesses, ElementsAre(
1280 Access(Read, 0, 0, 0, 0xd3d2d1d0),
1281 Access(Write, 0x6655d1d0, 0, 0, 0),
1282 Access(PartialWrite, 0x66550000, 31, 16, 0)
1284 EXPECT_THAT(reg1.
accesses, ElementsAre(
1285 Access(Write, 0xaa998877, 0, 0, 0)
1287 EXPECT_TRUE(reg2.
accesses.empty());
1292 fullBank.
write(0x1004, buf.data() + 4, 6);
1293 EXPECT_EQ(reg0.get(), 0xd3d2d1d0);
1294 EXPECT_EQ(reg1.get(), 0x88776655);
1295 EXPECT_EQ(reg2.get(), 0xf3f2aa99);
1296 EXPECT_TRUE(reg0.
accesses.empty());
1297 EXPECT_THAT(reg1.
accesses, ElementsAre(
1298 Access(Write, 0x88776655, 0, 0, 0)
1300 EXPECT_THAT(reg2.
accesses, ElementsAre(
1301 Access(Read, 0, 0, 0, 0xf3f2f1f0),
1302 Access(Write, 0xf3f2aa99, 0, 0, 0),
1303 Access(PartialWrite, 0x0000aa99, 15, 0, 0)