|
1 | 1 | /* |
2 | 2 | Copyright (c) 2005-2025 Intel Corporation |
| 3 | + Copyright (c) 2025 UXL Foundation Contributors |
3 | 4 |
|
4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 6 | you may not use this file except in compliance with the License. |
@@ -970,4 +971,45 @@ void test(unsigned N) { |
970 | 971 |
|
971 | 972 | } // namespace lightweight_testing |
972 | 973 |
|
| 974 | +template <std::size_t N> |
| 975 | +struct edge_maker { |
| 976 | + template <typename Sender, typename NodeType> |
| 977 | + static void make(Sender& sender, NodeType& node) { |
| 978 | + oneapi::tbb::flow::make_edge(sender, oneapi::tbb::flow::input_port<N - 1>(node)); |
| 979 | + edge_maker<N - 1>::make(sender, node); |
| 980 | + } |
| 981 | + |
| 982 | + template <typename Sender, typename NodeType> |
| 983 | + static void make(std::vector<Sender>& senders, NodeType& node) { |
| 984 | + oneapi::tbb::flow::make_edge(senders[N - 1], oneapi::tbb::flow::input_port<N - 1>(node)); |
| 985 | + edge_maker<N - 1>::make(senders, node); |
| 986 | + } |
| 987 | +}; |
| 988 | + |
| 989 | +template <> |
| 990 | +struct edge_maker<0> { |
| 991 | + template <typename Sender, typename NodeType> |
| 992 | + static void make(Sender&, NodeType&) {} |
| 993 | +}; |
| 994 | + |
| 995 | +template <std::size_t N> |
| 996 | +struct assert_all_items_equal_impl { |
| 997 | + template <typename TupleLike, typename Message> |
| 998 | + static void compare(const TupleLike& tuple_like, const Message& message) { |
| 999 | + CHECK_MESSAGE(std::get<N - 1>(tuple_like) == message, "Unexpected element"); |
| 1000 | + assert_all_items_equal_impl<N - 1>::compare(tuple_like, message); |
| 1001 | + } |
| 1002 | +}; |
| 1003 | + |
| 1004 | +template <> |
| 1005 | +struct assert_all_items_equal_impl<0> { |
| 1006 | + template <typename TupleLike, typename Message> |
| 1007 | + static void compare(const TupleLike&, const Message&) {} |
| 1008 | +}; |
| 1009 | + |
| 1010 | +template <typename TupleLike, typename Message> |
| 1011 | +void assert_all_items_equal_to(const TupleLike& tuple_like, const Message& message) { |
| 1012 | + assert_all_items_equal_impl<std::tuple_size<TupleLike>::value>::compare(tuple_like, message); |
| 1013 | +} |
| 1014 | + |
973 | 1015 | #endif // __TBB_harness_graph_H |
0 commit comments