blob: 4ade141f7677514afc053f174bcf77c19416f7fe [file] [log] [blame] [edit]
// Copyright 2024 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <lib/driver/fake-mmio-reg/cpp/fake-mmio-reg.h>
#include <lib/driver/mmio/cpp/mmio.h>
#include <fbl/algorithm.h>
#include <zxtest/zxtest.h>
namespace fake_mmio_reg_test {
TEST(FakeMmioReg, CopyFrom) {
constexpr size_t kRegArrayLength = 0x100;
fake_mmio::FakeMmioRegRegion reg_region_1(sizeof(uint32_t), kRegArrayLength);
fake_mmio::FakeMmioRegRegion reg_region_2(sizeof(uint32_t), kRegArrayLength);
fdf::MmioBuffer dut_1(reg_region_1.GetMmioBuffer());
fdf::MmioBuffer dut_2(reg_region_2.GetMmioBuffer());
const uint32_t reg_values[] = {0xdb5a95fd, 0xc1c8f880, 0x733c2bed, 0xf74e857c};
uint32_t written_values[kRegArrayLength];
memset(written_values, 0, sizeof(written_values));
for (size_t i = 0; i < std::size(reg_values); i++) {
reg_region_1[0x10 + (i * 4)].SetReadCallback([i, reg_values]() { return reg_values[i]; });
reg_region_2[0x40 + (i * 4)].SetWriteCallback(
[i, &written_values](uint64_t value) { written_values[i] = static_cast<uint32_t>(value); });
}
dut_2.CopyFrom32(dut_1, 0x10, 0x40, 4);
for (size_t i = 0; i < std::size(written_values); i++) {
bool valid = i < std::size(reg_values);
if (valid) {
ASSERT_EQ(written_values[i], reg_values[i]);
} else {
ASSERT_EQ(written_values[i], 0);
}
}
}
} // namespace fake_mmio_reg_test