1#include <catch2/catch_test_macros.hpp>
3#include <Core/Utils/TypesUtils.hpp>
4#include <Dataflow/Core/DataflowGraph.hpp>
5#include <Dataflow/Core/Sinks/Types.hpp>
6#include <Dataflow/Core/Sources/Types.hpp>
11using namespace Ra::Dataflow::Core;
12using namespace Ra::Core::Utils;
16void testGraph(
const std::string& name, T in, T& out ) {
17 auto g = std::make_unique<DataflowGraph>( name );
20 g->add_node( source );
22 auto linked = g->add_link( source,
"to", sink,
"from" );
23 if ( !linked ) {
std::cerr <<
"Error linking source and sink nodes.\n"; }
26 auto input = g->input_node_port(
"in",
"from" );
27 REQUIRE( input !=
nullptr );
28 auto output = g->output_node_port(
"out",
"data" );
29 REQUIRE( output !=
nullptr );
31 auto compiled = g->compile();
32 if ( !compiled ) {
std::cerr <<
"Error compiling graph.\n"; }
35 std::cout <<
"Setting " << simplifiedDemangledType<T>() <<
" data on interface port ... ";
36 input->set_default_value( in );
40 T r = output->data<T>();
41 std::cout <<
"Getting a " << simplifiedDemangledType( r ) <<
" from interface port ... ";
44 source->set_data( in );
46 nlohmann::json graphData;
47 g->toJson( graphData );
50 g = std::make_unique<DataflowGraph>( name );
51 g->fromJson( graphData );
52 auto ok = g->execute();
56TEST_CASE(
"Dataflow/Core/Sources and Sinks",
"[unittests][Dataflow][Core][Sources and Sinks]" ) {
57 SECTION(
"Operations on base type : Scalar" ) {
58 using DataType = Scalar;
59 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
61 DataType x { 3.141592_ra };
63 testGraph<DataType>(
"Test on Scalar", x, y );
68 SECTION(
"Operations on base type : float" ) {
69 using DataType = float;
70 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
71 DataType x { 3.141592 };
73 testGraph<DataType>(
"Test on float", x, y );
78 SECTION(
"Operations on base type : double" ) {
79 using DataType = double;
80 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
81 DataType x { 3.141592 };
83 testGraph<DataType>(
"Test on float", x, y );
88 SECTION(
"Operations on base type : int" ) {
90 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
93 testGraph<DataType>(
"Test on int", x, y );
98 SECTION(
"Operations on base type : unsigned int" ) {
99 using DataType =
unsigned int;
100 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
103 testGraph<DataType>(
"Test on unsigned int", x, y );
108 SECTION(
"Operations on base type : bool" ) {
109 using DataType = bool;
110 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
112 DataType y {
false };
113 testGraph<DataType>(
"Test on bool", x, y );
118 SECTION(
"Operations on base type : Vector2" ) {
119 using DataType = Ra::Core::Vector2;
120 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
121 DataType x { 1_ra, 2_ra };
123 testGraph<DataType>(
"Test on Vector2", x, y );
128 SECTION(
"Operations on base type : Vector3" ) {
129 using DataType = Ra::Core::Vector3;
130 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
131 DataType x { 1_ra, 2_ra, 3_ra };
133 testGraph<DataType>(
"Test on Vector3", x, y );
138 SECTION(
"Operations on base type : Vector4" ) {
139 using DataType = Ra::Core::Vector4;
140 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
141 DataType x { 1_ra, 2_ra, 3_ra, 4_ra };
143 testGraph<DataType>(
"Test on Vector4", x, y );
148 SECTION(
"Operations on base type : Color" ) {
150 std::cout <<
"Test on " << simplifiedDemangledType<DataType>() <<
" ... ";
151 DataType x = Ra::Core::Utils::Color::Skin();
153 testGraph<DataType>(
"Test on Color", x, y );