GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: tests/signal/test_dep.cpp Lines: 61 67 91.0 %
Date: 2023-03-13 12:09:37 Branches: 91 194 46.9 %

Line Branch Exec Source
1
/*
2
 * Copyright 2010,
3
 * François Bleibel,
4
 * Olivier Stasse,
5
 *
6
 * CNRS/AIST
7
 *
8
 */
9
10
/* -------------------------------------------------------------------------- */
11
/* --- INCLUDES ------------------------------------------------------------- */
12
/* -------------------------------------------------------------------------- */
13
#include <dynamic-graph/all-signals.h>
14
#include <dynamic-graph/linear-algebra.h>
15
16
#include <iostream>
17
using namespace std;
18
using namespace dynamicgraph;
19
20
template <class Res = double>
21
class DummyClass {
22
 public:
23
12
  DummyClass(void) : res(), appel(0), timedata(0) {}
24
25
6
  Res &fun(Res &res, int t) {
26
6
    appel++;
27
6
    timedata = t;
28
29
6
    cout << "Inside " << endl;
30
    for (list<SignalTimeDependent<double, int> *>::iterator it =
31
6
             inputsig.begin();
32
6
         it != inputsig.end(); ++it) {
33
      cout << *(*it) << endl;
34
      (*it)->access(timedata);
35
    }
36
    for (list<SignalTimeDependent<dynamicgraph::Vector, int> *>::iterator it =
37
6
             inputsigV.begin();
38
6
         it != inputsigV.end(); ++it) {
39
      cout << *(*it) << endl;
40
      (*it)->access(timedata);
41
    }
42
43
6
    return res = (*this)();
44
  }
45
46
  list<SignalTimeDependent<double, int> *> inputsig;
47
  list<SignalTimeDependent<dynamicgraph::Vector, int> *> inputsigV;
48
49
6
  void add(SignalTimeDependent<double, int> &sig) { inputsig.push_back(&sig); }
50
7
  void add(SignalTimeDependent<dynamicgraph::Vector, int> &sig) {
51
14
    inputsigV.push_back(&sig);
52
14
  }
53
54
  Res operator()(void);
55
56
  Res res;
57
  int appel;
58
  int timedata;
59
};
60
61
template <class Res>
62
Res DummyClass<Res>::operator()(void) {
63
  return this->res;
64
}
65
66
template <>
67
2
double DummyClass<double>::operator()(void) {
68
2
  res = appel * timedata;
69
2
  return res;
70
}
71
template <>
72
1
dynamicgraph::Vector DummyClass<dynamicgraph::Vector>::operator()(void) {
73
1
  res.resize(3);
74
1
  res.fill(appel * timedata);
75
1
  return res;
76
}
77
78
// void dispArray( const SignalArray<int> &ar )
79
// {
80
//   for( unsigned int i=0;i<ar.rank;++i ) cout<<*ar.array[i]<<endl;
81
// }
82
83
#include <vector>
84
1
int main(void) {
85
2
  DummyClass<double> pro1, pro3, pro5;
86

2
  DummyClass<dynamicgraph::Vector> pro2, pro4, pro6;
87
88

3
  SignalTimeDependent<double, int> sig5("Sig5");
89

3
  SignalTimeDependent<dynamicgraph::Vector, int> sig6("Sig6");
90
91

3
  SignalTimeDependent<dynamicgraph::Vector, int> sig4(sig5, "Sig4");
92
  SignalTimeDependent<dynamicgraph::Vector, int> sig2(
93


3
      sig4 << sig4 << sig4 << sig6, "Sig2");
94


3
  SignalTimeDependent<double, int> sig3(sig2 << sig5 << sig6, "Sig3");
95
  SignalTimeDependent<double, int> sig1(
96

2
      boost::bind(&DummyClass<double>::fun, pro1, _1, _2), sig2 << sig3,
97

4
      "Sig1");
98
99
  //    cout << "--- Test Array ------ "<<endl;
100
  //    SignalArray<int> tarr(12);
101
  //    tarr<<sig3<<sig2;//+sig2+sig3;
102
  //    dispArray(sig4<<sig2<<sig3);
103
  //    dispArray(tarr);
104
105
  // sig1.set( &DummyClass<double>::fun,pro1 );
106

1
  sig2.setFunction(
107

2
      boost::bind(&DummyClass<dynamicgraph::Vector>::fun, pro2, _1, _2));
108


1
  sig3.setFunction(boost::bind(&DummyClass<double>::fun, pro3, _1, _2));
109

1
  sig4.setFunction(
110

2
      boost::bind(&DummyClass<dynamicgraph::Vector>::fun, pro4, _1, _2));
111


1
  sig5.setFunction(boost::bind(&DummyClass<double>::fun, pro5, _1, _2));
112

1
  sig6.setFunction(
113

2
      boost::bind(&DummyClass<dynamicgraph::Vector>::fun, pro6, _1, _2));
114
115
  //    sig1.addDependency(sig2);
116
  //     sig1.addDependency(sig3);
117
  //      sig2.addDependency(sig4);
118
  //      sig2.addDependency(sig4);
119
  //     sig2.addDependency(sig4);
120
  //      sig3.addDependency(sig2);
121
  //      sig4.addDependency(sig5);
122
  //      sig2.addDependency(sig6);
123
  //      sig3.addDependency(sig5);
124
  //      sig3.addDependency(sig6);
125
126
1
  pro1.add(sig2);
127
1
  pro1.add(sig3);
128
1
  pro2.add(sig4);
129
1
  pro2.add(sig4);
130
1
  pro2.add(sig4);
131
1
  pro3.add(sig2);
132
1
  pro4.add(sig5);
133
1
  pro2.add(sig6);
134
1
  pro3.add(sig5);
135
1
  pro3.add(sig6);
136
137
  // sig5.setDependencyType(TimeDependency<int>::ALWAYS_READY);
138
  // sig6.setDependencyType(TimeDependency<int>::BOOL_DEPENDENT);
139
140
1
  sig6.setReady();
141
142


1
  sig1.displayDependencies(cout) << endl;
143
144


1
  cout << "Needs update?" << endl << sig1.needUpdate(2) << endl;
145
1
  sig1.access(2);
146


1
  sig1.displayDependencies(cout) << endl;
147
1
  sig2.access(4);
148


1
  sig1.displayDependencies(cout) << endl;
149
1
  sig1.access(4);
150


1
  sig1.displayDependencies(cout) << endl;
151
1
  sig1.needUpdate(6);
152
1
  sig1.needUpdate(6);
153
154
1
  return 0;
155
}