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 21*de0109beSIlya Mishin #define CONFORMANCE_BUFFERING_NODES 22*de0109beSIlya Mishin #define CONFORMANCE_OVERWRITE_NODE 2351c0b2f7Stbbdev 2451c0b2f7Stbbdev #include "conformance_flowgraph.h" 2551c0b2f7Stbbdev 2651c0b2f7Stbbdev //! \file conformance_overwrite_node.cpp 2751c0b2f7Stbbdev //! \brief Test for [flow_graph.overwrite_node] specification 2851c0b2f7Stbbdev 2951c0b2f7Stbbdev //! Test overwrite_node behavior 3051c0b2f7Stbbdev //! \brief \ref requirement 3151c0b2f7Stbbdev TEST_CASE("overwrite_node messages"){ 32*de0109beSIlya Mishin oneapi::tbb::flow::graph g; 33*de0109beSIlya Mishin 34*de0109beSIlya Mishin oneapi::tbb::flow::overwrite_node<int> testing_node(g); 35*de0109beSIlya Mishin 36*de0109beSIlya Mishin int tmp = -1; 37*de0109beSIlya Mishin testing_node.try_put(1); 38*de0109beSIlya Mishin g.wait_for_all(); 39*de0109beSIlya Mishin 40*de0109beSIlya Mishin CHECK_MESSAGE((testing_node.try_get(tmp) == true), "Descendant needs to receive a message"); 41*de0109beSIlya Mishin CHECK_MESSAGE((tmp == 1), "Descendant needs to receive a correct value"); 42*de0109beSIlya Mishin 43*de0109beSIlya Mishin testing_node.try_put(2); 44*de0109beSIlya Mishin g.wait_for_all(); 45*de0109beSIlya Mishin 46*de0109beSIlya Mishin CHECK_MESSAGE((testing_node.try_get(tmp) == true), "Descendant needs to receive a message"); 47*de0109beSIlya Mishin CHECK_MESSAGE((tmp == 2), "Descendant needs to receive a correct value"); 4851c0b2f7Stbbdev } 4951c0b2f7Stbbdev 5051c0b2f7Stbbdev //! Test function_node broadcast 5151c0b2f7Stbbdev //! \brief \ref requirement 5251c0b2f7Stbbdev TEST_CASE("overwrite_node broadcast"){ 53*de0109beSIlya Mishin conformance::test_forwarding<oneapi::tbb::flow::overwrite_node<int>, int>(1); 5451c0b2f7Stbbdev } 5551c0b2f7Stbbdev 5651c0b2f7Stbbdev //! Test function_node buffering 5751c0b2f7Stbbdev //! \brief \ref requirement 5851c0b2f7Stbbdev TEST_CASE("overwrite_node buffering"){ 59*de0109beSIlya Mishin conformance::test_buffering<oneapi::tbb::flow::overwrite_node<int>, int>(); 6051c0b2f7Stbbdev } 6151c0b2f7Stbbdev 62*de0109beSIlya Mishin //! The node that is constructed has a reference to the same graph object as src,with an invalid internal buffer item. 63*de0109beSIlya Mishin //! The buffered value and list of successors are not copied from src. 64*de0109beSIlya Mishin //! \brief \ref requirement 6551c0b2f7Stbbdev TEST_CASE("overwrite_node copy constructor"){ 66*de0109beSIlya Mishin conformance::test_copy_ctor_for_buffering_nodes<oneapi::tbb::flow::overwrite_node<int>>(); 6751c0b2f7Stbbdev } 6851c0b2f7Stbbdev 6951c0b2f7Stbbdev //! Test inheritance relations 7051c0b2f7Stbbdev //! \brief \ref interface 7151c0b2f7Stbbdev TEST_CASE("overwrite_node superclasses"){ 72*de0109beSIlya Mishin conformance::test_inheritance<oneapi::tbb::flow::overwrite_node<int>, int, int>(); 73*de0109beSIlya Mishin conformance::test_inheritance<oneapi::tbb::flow::overwrite_node<void*>, void*, void*>(); 74*de0109beSIlya Mishin } 75*de0109beSIlya Mishin 76*de0109beSIlya Mishin //! Test overwrite_node node constructor 77*de0109beSIlya Mishin //! \brief \ref requirement 78*de0109beSIlya Mishin TEST_CASE("overwrite_node constructor"){ 79*de0109beSIlya Mishin oneapi::tbb::flow::graph g; 80*de0109beSIlya Mishin oneapi::tbb::flow::overwrite_node<int> testing_node(g); 81*de0109beSIlya Mishin 82*de0109beSIlya Mishin int tmp = -1; 83*de0109beSIlya Mishin CHECK_MESSAGE((!testing_node.is_valid()), "Constructed node has invalid internal buffer item"); 84*de0109beSIlya Mishin CHECK_MESSAGE((!testing_node.try_get(tmp)), "Gets from the node are non-destructive, but the first `try_get' fails"); 85*de0109beSIlya Mishin } 86*de0109beSIlya Mishin 87*de0109beSIlya Mishin //! Test overwrite_node node `is_valid()` and `clear()` 88*de0109beSIlya Mishin //! \brief \ref requirement 89*de0109beSIlya Mishin TEST_CASE("overwrite_node methods"){ 90*de0109beSIlya Mishin oneapi::tbb::flow::graph g; 91*de0109beSIlya Mishin oneapi::tbb::flow::overwrite_node<int> testing_node(g); 92*de0109beSIlya Mishin 93*de0109beSIlya Mishin CHECK_MESSAGE((!testing_node.is_valid()), "Constructed node has invalid internal buffer item"); 94*de0109beSIlya Mishin 95*de0109beSIlya Mishin testing_node.try_put(1); 96*de0109beSIlya Mishin 97*de0109beSIlya Mishin CHECK_MESSAGE((testing_node.is_valid()), "Buffer must be valid after try_put call"); 98*de0109beSIlya Mishin 99*de0109beSIlya Mishin testing_node.clear(); 100*de0109beSIlya Mishin 101*de0109beSIlya Mishin CHECK_MESSAGE((!testing_node.is_valid()), "call `clear` invalidates the value held in the buffer."); 102*de0109beSIlya Mishin } 103*de0109beSIlya Mishin 104*de0109beSIlya Mishin //! The following test shows the possibility to connect the node to a reserving join_node, 105*de0109beSIlya Mishin //! avoiding direct calls to the try_get() method from the body of the successor node 106*de0109beSIlya Mishin //! \brief \ref requirement 107*de0109beSIlya Mishin TEST_CASE("overwrite_node with reserving join_node as successor"){ 108*de0109beSIlya Mishin conformance::test_with_reserving_join_node_class<oneapi::tbb::flow::overwrite_node<int>>(); 10951c0b2f7Stbbdev } 110