1*e0cc5187SIlya Isaev /*
2*e0cc5187SIlya Isaev     Copyright (c) 2022 Intel Corporation
3*e0cc5187SIlya Isaev 
4*e0cc5187SIlya Isaev     Licensed under the Apache License, Version 2.0 (the "License");
5*e0cc5187SIlya Isaev     you may not use this file except in compliance with the License.
6*e0cc5187SIlya Isaev     You may obtain a copy of the License at
7*e0cc5187SIlya Isaev 
8*e0cc5187SIlya Isaev         http://www.apache.org/licenses/LICENSE-2.0
9*e0cc5187SIlya Isaev 
10*e0cc5187SIlya Isaev     Unless required by applicable law or agreed to in writing, software
11*e0cc5187SIlya Isaev     distributed under the License is distributed on an "AS IS" BASIS,
12*e0cc5187SIlya Isaev     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e0cc5187SIlya Isaev     See the License for the specific language governing permissions and
14*e0cc5187SIlya Isaev     limitations under the License.
15*e0cc5187SIlya Isaev */
16*e0cc5187SIlya Isaev 
17*e0cc5187SIlya Isaev // Message based key matching is a preview feature
18*e0cc5187SIlya Isaev #define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1
19*e0cc5187SIlya Isaev 
20*e0cc5187SIlya Isaev #include "common/config.h"
21*e0cc5187SIlya Isaev 
22*e0cc5187SIlya Isaev #include "test_join_node.h"
23*e0cc5187SIlya Isaev 
24*e0cc5187SIlya Isaev //! \file test_join_node_msg_key_matching_n_args.cpp
25*e0cc5187SIlya Isaev //! \brief Test for [preview] functionality
26*e0cc5187SIlya Isaev 
27*e0cc5187SIlya Isaev template <typename T1, typename T2>
28*e0cc5187SIlya Isaev using make_tuple = decltype(std::tuple_cat(T1(), std::tuple<T2>()));
29*e0cc5187SIlya Isaev using T1 = std::tuple<MyMessageKeyWithoutKeyMethod<std::string, double>>;
30*e0cc5187SIlya Isaev using T2 = make_tuple<T1, MyMessageKeyWithBrokenKey<std::string, int>>;
31*e0cc5187SIlya Isaev using T3 = make_tuple < T2, MyMessageKeyWithoutKey<std::string, int>>;
32*e0cc5187SIlya Isaev using T4 = make_tuple < T3, MyMessageKeyWithoutKeyMethod<std::string, size_t>>;
33*e0cc5187SIlya Isaev using T5 = make_tuple < T4, MyMessageKeyWithBrokenKey<std::string, int>>;
34*e0cc5187SIlya Isaev using T6 = make_tuple < T5, MyMessageKeyWithoutKeyMethod<std::string, short>>;
35*e0cc5187SIlya Isaev using T7 = make_tuple < T6, MyMessageKeyWithoutKeyMethod<std::string, threebyte>>;
36*e0cc5187SIlya Isaev using T8 = make_tuple < T7, MyMessageKeyWithBrokenKey<std::string, int>>;
37*e0cc5187SIlya Isaev using T9 = make_tuple < T8, MyMessageKeyWithoutKeyMethod<std::string, threebyte>>;
38*e0cc5187SIlya Isaev using T10 = make_tuple < T9, MyMessageKeyWithBrokenKey<std::string, size_t>>;
39*e0cc5187SIlya Isaev 
40*e0cc5187SIlya Isaev #if TBB_TEST_LOW_WORKLOAD && TBB_USE_DEBUG
41*e0cc5187SIlya Isaev // the compiler might generate huge object file in debug (>64M)
42*e0cc5187SIlya Isaev #define TEST_CASE_TEMPLATE_N_ARGS(dec) TEST_CASE_TEMPLATE(dec, T, T2, T10)
43*e0cc5187SIlya Isaev #else
44*e0cc5187SIlya Isaev #define TEST_CASE_TEMPLATE_N_ARGS(dec) TEST_CASE_TEMPLATE(dec, T, T2, T3, T4, T5, T6, T7, T8, T9, T10)
45*e0cc5187SIlya Isaev #endif
46*e0cc5187SIlya Isaev 
47*e0cc5187SIlya Isaev //! Serial test with different tuple sizes
48*e0cc5187SIlya Isaev //! \brief \ref error_guessing
49*e0cc5187SIlya Isaev TEST_CASE_TEMPLATE_N_ARGS("Serial N tests") {
50*e0cc5187SIlya Isaev     generate_test<serial_test, T, message_based_key_matching<std::string&> >::do_test();
51*e0cc5187SIlya Isaev }
52*e0cc5187SIlya Isaev 
53*e0cc5187SIlya Isaev //! Parallel test with different tuple sizes
54*e0cc5187SIlya Isaev //! \brief \ref error_guessing
55*e0cc5187SIlya Isaev TEST_CASE_TEMPLATE_N_ARGS("Parallel N tests") {
56*e0cc5187SIlya Isaev     generate_test<parallel_test, T, message_based_key_matching<std::string&> >::do_test();
57*e0cc5187SIlya Isaev }
58