blob: 3d0f3b8032f6f865966eb8f10ccbd7d887e83094 [file] [log] [blame]
#include "../isp-mem-array.h"
#include <mock-mmio-reg/mock-mmio-reg.h>
#include <zxtest/zxtest.h>
namespace camera {
namespace {
constexpr uint32_t kArraySize = 16;
class IspMemArrayTest : public zxtest::Test {
public:
void SetUp() override;
void TearDown() override;
void SetExpectations();
protected:
std::unique_ptr<ddk_mock::MockMmioRegRegion> mock_registers_;
std::unique_ptr<ddk::MmioView> local_mmio_;
std::vector<uint32_t> expectations_;
};
void IspMemArrayTest::SetUp() { expectations_.reserve(kArraySize); }
void IspMemArrayTest::TearDown() { expectations_.clear(); }
void IspMemArrayTest::SetExpectations() {
for (uint32_t i = 0; i < kArraySize; ++i) {
(*mock_registers_.get())[i << 2].ExpectWrite(expectations_[i]);
}
}
TEST_F(IspMemArrayTest, IspMemArray32) {
auto reg_array = std::make_unique<ddk_mock::MockMmioReg[]>(kArraySize);
mock_registers_ =
std::make_unique<ddk_mock::MockMmioRegRegion>(reg_array.get(), sizeof(uint32_t), kArraySize);
local_mmio_ = std::make_unique<ddk::MmioView>(mock_registers_->GetMmioBuffer().View(0));
std::shared_ptr<IspMemArray32> mem_array =
std::make_shared<IspMemArray32>(*local_mmio_.get(), 0x00, kArraySize);
for (uint32_t i = 0; i < kArraySize; ++i) {
(*mem_array.get())[i] = i;
expectations_.push_back(i);
}
SetExpectations();
mem_array->WriteRegisters();
std::shared_ptr<const IspMemArray32> const_mem_array =
std::const_pointer_cast<const IspMemArray32>(mem_array);
for (uint32_t i = 0; i < kArraySize; ++i) {
(*mem_array.get())[i] = 2 + i;
expectations_[i] = 2 + i;
EXPECT_NE((*mem_array.get())[i], (*const_mem_array.get())[i]);
}
SetExpectations();
mem_array->WriteRegisters();
for (uint32_t i = 0; i < kArraySize; ++i) {
EXPECT_EQ((*mem_array.get())[i], (*const_mem_array.get())[i]);
}
}
} // namespace
} // namespace camera