Я младший инженер-программист в моей дневной работе, работая с C#/WPF/Prism, и я пытался научить себя другим языкам и библиотекам в свободное время, чтобы расширить свое горизонты. Недавно я работал над C++ во время модульного тестирования через библиотеки тестирования Google и Mocking и довольно хорошо относился к передаче из C# мышления в мир C++. В то время как некоторые понятия, такие как полиморфизм и интерфейсы, отлично двигались с C#, некоторые из них немного озадачивают меня, например, арифметику указателей. Я недавно работал над более низкими уровнями памяти, чего я никогда не видел на C#, и начал писать распределители памяти для трехмерного симуляционного проекта, над которым я работал в свободное время. Это подводит меня к моему вопросу.Функции модульного тестирования с указателями void в C++
У меня есть функция, которая выглядит следующим образом:
inline u8 AlignForwardAdjustment(const void* address, u8 alignment)
{
u8 adjustment = alignment - (reinterpret_cast<uptr>(address)& static_cast<uptr>(alignment - 1));
if (adjustment == alignment)
{
return 0; //already aligned
}
return adjustment;
}
Я не писал это сам, так как я нашел его в качестве части руководства я использую, чтобы узнать, как сделать ручную распределители памяти. Однако, как часть понимания этого предмета, я пытался писать модульные тесты, чтобы доказать, что мои распределители работают, начиная с самого низкого уровня, который я мог найти.
Это одна из моих вспомогательных функций для выравнивания памяти, и она принимает и возвращает пустоту *. Из того, что я понимаю, это означает, что он возвращает указатель некоторого неформатированного или неизвестного типа блока памяти, что имеет смысл в этом контексте. Мой вопрос: есть ли способ написать единицу или интеграционный тест для такого метода? В C# я вообще пытаюсь проверить любую функцию, которую я могу получить из-за пределов класса, но я честно не знаю, как бы я написал тест, который держится в Void * (задан как значение, которое я ожидал бы), а затем способен чтобы верный указатель был правильно выровнен.
Есть ли какие-либо действия, которые я могу сделать, чтобы сказать «Uint» в пустоту * и просто проверить математику на другом конце? Или, должен ли я просто написать такую функцию как непроверенную? Любая помощь была бы лучше всего оценена, или даже толчок в правильном направлении.
Заранее благодарю вас!
Поиск intptr_t. – kec
Извините за новинку на сайте и не хватает репутации, чтобы проголосовать за свой комментарий, по-видимому. Спасибо за помощь, хотя! – BlindGarret