测试两个类型列表中的所有组合

第108节

我正在使用Google Test Framework,并且有两个类型的列表,我需要针对它们运行相同的测试套件。我使用的是宏,TYPED_TEST_CASE但是这里的问题是,它只能与一种类型的列表一起使用,而不是两种或多种类型。

我需要使用这两个类型列表之间的所有组合来运行此测试套件。有可能做到吗?如果TYPED_TEST_CASE宏仅接受一个类型列表,是否可以使用所有组合生成此列表,然后将它们插入列表,然后使用仅一个列表的宏?

吧台

妳去 一如既往地需要一些超魔术。为了使其与我使用的GTest顺利匹配::testing::Types,现在只需将其cartesian_product作为类型参数传递给test。编辑:由于::testing::Types不是真的可变参数,我不得不做一些帮助和转换:

template<class... Args>
struct Types { };

template<class First, class Second>
struct type_pair {
    using first = First;
    using second = Second;
};

template<class TypeList, template <class> class Mapper>
struct meta_map {
    using type = void;
};

template<template <class> class Mapper, class... Args>
struct meta_map<Types<Args...>, Mapper> {
    using type = Types<Mapper<Args>...>;
};

template<class Arg, class TypeList>
struct create_pairs {
    template<class T>
    using make_pair = type_pair<T, Arg>;
    using type = typename meta_map<TypeList, make_pair>::type;
};

template<class List, class... Lists>
struct sum {
    using type = void;
};

template<class... Ts>
struct sum<Types<Ts...>> {
    using type = Types<Ts...>;
};

template<class... T1, class... T2>
struct sum<Types<T1...>, Types<T2...>> {
    using type = typename sum<Types<T1..., T2...>>::type;
};

template<class... T1, class... T2>
struct sum<Types<T1...>, T2...> {
    using type = typename sum<Types<T1...>, typename sum<T2...>::type>::type;
};


template<class List, template <class...> class Reducer>
struct meta_reduce {
    using type = void;
};

template<class... Args, template <class...> class Reducer>
struct meta_reduce<Types<Args...>, Reducer> {
    using type = typename Reducer<Args...>::type;
};

template<class TypeList1, class TypeList2>
struct cartesian_product_helper {
    using type = void;
};

template<class TypeList1, class... Args>
struct cartesian_product_helper<TypeList1, Types<Args...>> {
    using type = typename meta_reduce<Types<typename create_pairs<Args, TypeList1>::type...>, sum>::type;
};

template<class List1, class List2>
using cartesian_product = typename cartesian_product_helper<List1, List2>::type;

template<class TypeList>
struct to_test_types {
    using type = void;
};

template<class... Ts>
struct to_test_types<Types<Ts...>> {
    using type = ::testing::Types<Ts...>;
};

template<class TypeList>
using to_test_types_t = typename to_test_types<TypeList>::type;

用法如下所示:

    to_test_types_t<cartesian_product<
      Types<char, bool, unsigned>,
      Types<char, bool>
    >>;

实时示例:https//godbolt.org/z/XmyHDT

编辑:在godbolt上添加了gtest,它似乎可以与此代码一起正常工作

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从两个列表中获取元素的所有组合?

来自分类Dev

查找列表中两个元素的所有组合的最有效方法

来自分类Dev

两个或更多列表的所有可能组合(包括所有子集组合)

来自分类Dev

创建R中两个向量的所有组合?

来自分类Dev

python中两个列表的组合

来自分类Dev

寻求使用python中两个列表的值的所有可能组合来求解方程的通用方法

来自分类Dev

如何`str.join`两个列表到Python3中所有组合的字符串?

来自分类Dev

查找两个列表x和y之间的配对的所有组合,以使y中的所有元素与x中的一个正好配对

来自分类Dev

如何获得两个不同列表的所有可能组合?

来自分类Dev

从两个向量的所有组合生成命名列表

来自分类Dev

R Tidyverse使用两个变量的所有组合扩展数据框(边列表)

来自分类Dev

生成两个列表的所有可能组合的热矩阵?

来自分类Dev

获取两个列表之间的所有可能组合,包括多个连接

来自分类Dev

R-两个列表中元素的所有成对组合

来自分类Dev

组合两个不同案例类类型的列表

来自分类Dev

选择表中具有两个以上匹配组合键的所有行

来自分类Dev

有效地比较Scala集合中两个的所有组合

来自分类Dev

两个列表的笛卡尔积可以返回除涉及两个相同元素的组合之外的所有组合吗?

来自分类Dev

查看两个表之间的所有可能组合

来自分类Dev

批处理-在两个文件中输出所有可能的字符串组合

来自分类Dev

MS SQL Server select语句:显示两个表中的所有组合

来自分类Dev

将两个单独的向量的所有组合粘贴到R中

来自分类Dev

JSOM动态地从所有网站的所有列表中获得两个公告

来自分类Dev

如何获得列表的所有组合,其中两个彼此相邻的元素可以变成一个元素

来自分类Dev

来自 Python 中具有条件的两个列表的成对组合

来自分类Dev

从两个列表中查找不同的组合

来自分类Dev

如何置换涉及两个列表的所有组合,并且每个元素保留在各自的索引处?

来自分类Dev

如何根据DateTime值的接近度将两个列表中的所有对象匹配为两个对

来自分类Dev

如何在Racket中测试两个结构实例是否具有相同的结构类型?

Related 相关文章

  1. 1

    从两个列表中获取元素的所有组合?

  2. 2

    查找列表中两个元素的所有组合的最有效方法

  3. 3

    两个或更多列表的所有可能组合(包括所有子集组合)

  4. 4

    创建R中两个向量的所有组合?

  5. 5

    python中两个列表的组合

  6. 6

    寻求使用python中两个列表的值的所有可能组合来求解方程的通用方法

  7. 7

    如何`str.join`两个列表到Python3中所有组合的字符串?

  8. 8

    查找两个列表x和y之间的配对的所有组合,以使y中的所有元素与x中的一个正好配对

  9. 9

    如何获得两个不同列表的所有可能组合?

  10. 10

    从两个向量的所有组合生成命名列表

  11. 11

    R Tidyverse使用两个变量的所有组合扩展数据框(边列表)

  12. 12

    生成两个列表的所有可能组合的热矩阵?

  13. 13

    获取两个列表之间的所有可能组合,包括多个连接

  14. 14

    R-两个列表中元素的所有成对组合

  15. 15

    组合两个不同案例类类型的列表

  16. 16

    选择表中具有两个以上匹配组合键的所有行

  17. 17

    有效地比较Scala集合中两个的所有组合

  18. 18

    两个列表的笛卡尔积可以返回除涉及两个相同元素的组合之外的所有组合吗?

  19. 19

    查看两个表之间的所有可能组合

  20. 20

    批处理-在两个文件中输出所有可能的字符串组合

  21. 21

    MS SQL Server select语句:显示两个表中的所有组合

  22. 22

    将两个单独的向量的所有组合粘贴到R中

  23. 23

    JSOM动态地从所有网站的所有列表中获得两个公告

  24. 24

    如何获得列表的所有组合,其中两个彼此相邻的元素可以变成一个元素

  25. 25

    来自 Python 中具有条件的两个列表的成对组合

  26. 26

    从两个列表中查找不同的组合

  27. 27

    如何置换涉及两个列表的所有组合,并且每个元素保留在各自的索引处?

  28. 28

    如何根据DateTime值的接近度将两个列表中的所有对象匹配为两个对

  29. 29

    如何在Racket中测试两个结构实例是否具有相同的结构类型?

热门标签

归档