151c0b2f7Stbbdev /* 2b15aabb3Stbbdev Copyright (c) 2020-2021 Intel Corporation 351c0b2f7Stbbdev 451c0b2f7Stbbdev Licensed under the Apache License, Version 2.0 (the "License"); 551c0b2f7Stbbdev you may not use this file except in compliance with the License. 651c0b2f7Stbbdev You may obtain a copy of the License at 751c0b2f7Stbbdev 851c0b2f7Stbbdev http://www.apache.org/licenses/LICENSE-2.0 951c0b2f7Stbbdev 1051c0b2f7Stbbdev Unless required by applicable law or agreed to in writing, software 1151c0b2f7Stbbdev distributed under the License is distributed on an "AS IS" BASIS, 1251c0b2f7Stbbdev WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1351c0b2f7Stbbdev See the License for the specific language governing permissions and 1451c0b2f7Stbbdev limitations under the License. 1551c0b2f7Stbbdev */ 1651c0b2f7Stbbdev 17b15aabb3Stbbdev #if __INTEL_COMPILER && _MSC_VER 18b15aabb3Stbbdev #pragma warning(disable : 2586) // decorated name length exceeded, name was truncated 19b15aabb3Stbbdev #endif 2051c0b2f7Stbbdev 2151c0b2f7Stbbdev #include "conformance_flowgraph.h" 2251c0b2f7Stbbdev 2351c0b2f7Stbbdev //! \file conformance_broadcast_node.cpp 2451c0b2f7Stbbdev //! \brief Test for [flow_graph.broadcast_node] specification 2551c0b2f7Stbbdev 26*de0109beSIlya Mishin using input_msg = conformance::message</*default_ctor*/false, /*copy_ctor*/true/*enable for queue_node successor*/, /*copy_assign*/true/*enable for queue_node successor*/>; 2751c0b2f7Stbbdev 2851c0b2f7Stbbdev //! Test function_node broadcast 2951c0b2f7Stbbdev //! \brief \ref requirement 3051c0b2f7Stbbdev TEST_CASE("broadcast_node broadcasts"){ 31*de0109beSIlya Mishin conformance::test_forwarding<oneapi::tbb::flow::broadcast_node<int>, int>(1); 32*de0109beSIlya Mishin conformance::test_forwarding<oneapi::tbb::flow::broadcast_node<input_msg>, input_msg>(1); 3351c0b2f7Stbbdev } 3451c0b2f7Stbbdev 3551c0b2f7Stbbdev //! Test broadcast_node buffering 3651c0b2f7Stbbdev //! \brief \ref requirement 3751c0b2f7Stbbdev TEST_CASE("broadcast_node buffering"){ 38*de0109beSIlya Mishin conformance::test_buffering<oneapi::tbb::flow::broadcast_node<int>, int>(); 3951c0b2f7Stbbdev } 4051c0b2f7Stbbdev 4151c0b2f7Stbbdev //! Test inheritance relations 4251c0b2f7Stbbdev //! \brief \ref interface 4351c0b2f7Stbbdev TEST_CASE("broadcast_node superclasses"){ 44*de0109beSIlya Mishin conformance::test_inheritance<oneapi::tbb::flow::broadcast_node<int>, int, int>(); 45*de0109beSIlya Mishin conformance::test_inheritance<oneapi::tbb::flow::broadcast_node<float>, float, float>(); 46*de0109beSIlya Mishin conformance::test_inheritance<oneapi::tbb::flow::broadcast_node<input_msg>, input_msg, input_msg>(); 4751c0b2f7Stbbdev } 4851c0b2f7Stbbdev 49*de0109beSIlya Mishin //! The node that is constructed has a reference to the same graph object as src. 50*de0109beSIlya Mishin //! The predecessors and successors of src are not copied. 51*de0109beSIlya Mishin //! \brief \ref interface 52*de0109beSIlya Mishin TEST_CASE("broadcast_node copy constructor"){ 53*de0109beSIlya Mishin using namespace oneapi::tbb::flow; 54*de0109beSIlya Mishin graph g; 55*de0109beSIlya Mishin 56*de0109beSIlya Mishin broadcast_node<int> node0(g); 57*de0109beSIlya Mishin broadcast_node<int> node1(g); 58*de0109beSIlya Mishin conformance::test_push_receiver<int> node2(g); 59*de0109beSIlya Mishin conformance::test_push_receiver<int> node3(g); 60*de0109beSIlya Mishin 61*de0109beSIlya Mishin oneapi::tbb::flow::make_edge(node0, node1); 62*de0109beSIlya Mishin oneapi::tbb::flow::make_edge(node1, node2); 63*de0109beSIlya Mishin 64*de0109beSIlya Mishin broadcast_node<int> node_copy(node1); 65*de0109beSIlya Mishin 66*de0109beSIlya Mishin oneapi::tbb::flow::make_edge(node_copy, node3); 67*de0109beSIlya Mishin 68*de0109beSIlya Mishin node_copy.try_put(1); 69*de0109beSIlya Mishin g.wait_for_all(); 70*de0109beSIlya Mishin 71*de0109beSIlya Mishin CHECK_MESSAGE((conformance::get_values(node2).size() == 0 && conformance::get_values(node3).size() == 1), "Copied node doesn`t copy successor"); 72*de0109beSIlya Mishin 73*de0109beSIlya Mishin node0.try_put(1); 74*de0109beSIlya Mishin g.wait_for_all(); 75*de0109beSIlya Mishin 76*de0109beSIlya Mishin CHECK_MESSAGE((conformance::get_values(node2).size() == 1 && conformance::get_values(node3).size() == 0), "Copied node doesn`t copy predecessor"); 77*de0109beSIlya Mishin } 78