79 lines
1.6 KiB
C++
79 lines
1.6 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include "Helper.h"
|
|
|
|
#include "../AccessHelper.h"
|
|
|
|
|
|
|
|
TEST (TestAccessHelper, read) {
|
|
|
|
// read varying numbers of bytes at arbitrary locations
|
|
|
|
TestDevice dev(4096);
|
|
AccessHelper<TestDevice> ah(dev);
|
|
for (size_t i = 0; i < sizeof(dev.buf); ++i) {dev.buf[i] = i;}
|
|
|
|
uint8_t dst[32];
|
|
|
|
for (int bytesToRead = 1; bytesToRead < 1100; bytesToRead+=5) {
|
|
for (int startAddr = 0; startAddr < 1100; startAddr+=3) {
|
|
|
|
const uint32_t read = ah.read(startAddr, bytesToRead, dst);
|
|
|
|
// ensure correct response
|
|
ASSERT_EQ(bytesToRead, read);
|
|
|
|
// ensure correct contents
|
|
for (int j = 0; j < bytesToRead; ++j) {
|
|
ASSERT_EQ((uint8_t)(startAddr+j), dst[j]);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
TEST (TestAccessHelper, write) {
|
|
|
|
// write varying numbers of bytes at arbitrary locations
|
|
|
|
const uint8_t MAGIC = 0xFF;
|
|
TestDevice dev(4096);
|
|
AccessHelper<TestDevice> ah(dev);
|
|
|
|
// src data
|
|
uint8_t src[2048];
|
|
for (uint32_t i = 0; i < 2048; ++i) {src[i] = i;}
|
|
|
|
// try several write sizes and start addresses
|
|
for (uint32_t bytesToWrite = 255; bytesToWrite < 1100; bytesToWrite+=5) {
|
|
for (uint32_t startAddr = 0; startAddr < 1100; startAddr+=3) {
|
|
|
|
dev.reset(MAGIC);
|
|
|
|
const uint32_t written = ah.write(startAddr, bytesToWrite, src);
|
|
|
|
// ensure correct response
|
|
ASSERT_EQ(bytesToWrite, written);
|
|
|
|
// check content
|
|
for (uint32_t i = 0; i < sizeof(dev.buf); ++i) {
|
|
if (i < startAddr || i >= startAddr + bytesToWrite) {
|
|
ASSERT_EQ(MAGIC, dev.buf[i]);
|
|
} else {
|
|
const uint8_t expected = (i - startAddr);
|
|
ASSERT_EQ(expected, dev.buf[i]);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|