long std::initializer_list 有许多用于测试的元素
long std::initializer_list with many elements for testing
我的class需要对其其中一个数据成员的元素数量施加上限,恰好是一个容器。
我的 class 的构造函数之一将 std::initializer_list 作为参数来初始化该容器数据成员。
单元测试需要验证上限是否到位。为此,我需要尝试使用包含 1025 个元素的初始化列表来调用我的构造函数。
有没有比在测试代码中使用包含 1025 个元素的大括号文字列表更好(= 更易读)的方法来创建这个 1025 元素 initializer_list?
(元素的数据类型总是unsigned short (uint16_t),我的class不是模板。)
如果您使用模板递归或花哨的 "repeat" 宏,您可能会受到静态递归限制的影响,这将使您的实施比平时更加复杂。
考虑到这一点,我认为最简单和最好的方法就是定义一些嵌套的宏,即
#define ZEROS_10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define ZEROS_50 ZEROS_10, ZEROS_10, ZEROS_10, ZEROS_10, ZEROS_10
#define ZEROS_250 ZEROS_50, ZEROS_50, ZEROS_50, ZEROS_50, ZEROS_50
#define ZEROS_1K ZEROS_250, ZEROS_250, ZEROS_250, ZEROS_250
FooType f{ ZEROS_1K, ZEROS_10, ZEROS_10, 0, 0, 0, 0, 0 };
我的class需要对其其中一个数据成员的元素数量施加上限,恰好是一个容器。
我的 class 的构造函数之一将 std::initializer_list 作为参数来初始化该容器数据成员。
单元测试需要验证上限是否到位。为此,我需要尝试使用包含 1025 个元素的初始化列表来调用我的构造函数。
有没有比在测试代码中使用包含 1025 个元素的大括号文字列表更好(= 更易读)的方法来创建这个 1025 元素 initializer_list?
(元素的数据类型总是unsigned short (uint16_t),我的class不是模板。)
如果您使用模板递归或花哨的 "repeat" 宏,您可能会受到静态递归限制的影响,这将使您的实施比平时更加复杂。
考虑到这一点,我认为最简单和最好的方法就是定义一些嵌套的宏,即
#define ZEROS_10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define ZEROS_50 ZEROS_10, ZEROS_10, ZEROS_10, ZEROS_10, ZEROS_10
#define ZEROS_250 ZEROS_50, ZEROS_50, ZEROS_50, ZEROS_50, ZEROS_50
#define ZEROS_1K ZEROS_250, ZEROS_250, ZEROS_250, ZEROS_250
FooType f{ ZEROS_1K, ZEROS_10, ZEROS_10, 0, 0, 0, 0, 0 };