gpt4 book ai didi

c++ - C++ 中带有 void 指针的单元测试函数

转载 作者:行者123 更新时间:2023-11-28 06:31:03 26 4
gpt4 key购买 nike

我的日常工作是一名初级软件工程师,使用 C#/WPF/Prism,我一直在尝试在业余时间自学其他语言和库以扩大我的视野。我最近一直在研究 C++,同时通过 Google 的测试和模拟库进行单元测试,并且在从 C# 思维模式转移到 C++ 世界方面做得相对较好。虽然一些概念,如多态性和接口(interface),从 C# 中移出是非常有意义的,但其中一些概念让我自己有点困惑,比如指针算法。我最近一直在研究较低级别的内存,这是我在 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;
}

这不是我自己写的,因为我发现它是我一直用来学习如何进行手动内存分配器的指南的一部分。然而,作为对这个主题的更多理解的一部分,我试图编写单元测试来证明我的分配器工作,从我能找到的最低级别开始。

这是我用于对齐内存的辅助函数之一,它接受并返回一个 void*。据我了解,这意味着它正在返回一些未格式化或类型未知的内存块的指针,这在这种情况下是有意义的。我的问题是,有没有办法为这种方法编写单元或集成测试?在 C# 中,我通常会尝试测试我可以从类外访问的任何函数,但老实说,我不知道我将如何编写一个测试,该测试提交一个 Void* (设置为我期望的值)然后能够确保返回的指针正确对齐。

我可以做任何类型的转换来将 Uint 传递给 void* 并在另一端检查数学吗?或者,我应该把这样的函数写成不可测试的吗?任何帮助将不胜感激,甚至是朝着正确方向的插入。

提前致谢!

最佳答案

Lookup intptr_t. - kec

Kec 完全正确!答案很简单:

const intptr_t given = 30;
const intptr_t expected = 2;

auto returnedValue = pointerMath::AlignForwardAdjustment((void*)given, 8);

EXPECT_EQ(expected, returnedValue);

这为单元测试提供了一个很好的可重现设置和结果。

再次感谢kec!本来可以将您的评论标记为答案,但我似乎找不到这样做的方法。

关于c++ - C++ 中带有 void 指针的单元测试函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com