Files
ESP8266lib/ext/sd/tests/TestAccessHelper.cpp

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]);
}
}
}
}
}