On Fri, 22 Aug 2025 at 10:26, CJ Chen <cjc...@igel.co.jp> wrote: > > From: Tomoyuki Hirose <hrstmyk8...@gmail.com> > > This commit adds a qtest for accessing various memory regions. The > qtest checks the correctness of handling the access to memory regions > by using 'memaccess-testdev'. > > Signed-off-by: CJ Chen <cjc...@igel.co.jp> > Co-developed-by: CJ Chen <cjc...@igel.co.jp> > Reported-by: Tomoyuki Hirose <hrstmyk8...@gmail.com> > --- > tests/qtest/memaccess-test.c | 597 +++++++++++++++++++++++++++++++++++ > tests/qtest/meson.build | 9 + > 2 files changed, 606 insertions(+) > create mode 100644 tests/qtest/memaccess-test.c
There seems to be a lot of duplication in these test functions (for instance, aren't all of little_b_valid(), little_b_invalid(), big_b_valid() and big_b_invalid() identical? and the various _invalid functions seem to have if() blocks where the code in the if and the else halves is the same). But also, I feel like we could improve what we're testing. If I understand the memaccess-testdev correctly, it has one underlying block of memory, and it exposes access to that via various memory regions with the different possible valid/impl/etc configurations. So I think the way to test that our memory access handling code is correct would be: * for testing reads, we first fill the test device's memory with a known pattern, always using the "just permit byte accesses" memory region. Then the test of each of the "some particular config" MemoryRegions only does reads, and checks that reads from various offsets do what we expect * for testing writes, we first clear the test device's memory to a known pattern, and then the test of each "some config" MR only does writes. We check that the writes did what we expect by doing reads from the "just permit byte accesses" region. If you only test e.g. word writes by doing word reads, then it's possible to have bugs which cancel each other out in the read and write paths, especially in the "aligned access only" case. thanks -- PMM