GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: tests/signal-all.cpp Lines: 100 100 100.0 %
Date: 2023-03-15 12:04:10 Branches: 270 580 46.6 %

Line Branch Exec Source
1
//
2
// Created by corentin on 7/3/19.
3
//
4
5
#include <assert.h>
6
#include <dynamic-graph/debug.h>
7
#include <dynamic-graph/factory.h>
8
#include <dynamic-graph/signal-array.h>
9
#include <dynamic-graph/signal-caster.h>
10
#include <dynamic-graph/tracer.h>
11
12
#include <boost/foreach.hpp>
13
#if BOOST_VERSION >= 105900
14
#include <boost/test/tools/output_test_stream.hpp>
15
#else
16
#include <boost/test/output_test_stream.hpp>
17
#endif
18
#include <boost/test/unit_test.hpp>
19
#include <iostream>
20
21
#define BOOST_TEST_MODULE signal_array
22
23
using boost::test_tools::output_test_stream;
24
25
dynamicgraph::SignalArray_const<double> sig;
26
27
using namespace std;
28
using namespace dynamicgraph;
29
using namespace dynamicgraph::command;
30
31
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗
4
BOOST_AUTO_TEST_CASE(test_array) {
32
✓✗✓✗
6
  SignalBase<int> sigBa("add test");
33
✓✗
4
  SignalArray_const<int> sigArr_C(1);
34
✓✗
2
  sigArr_C.operator<<(sigBa);
35
✓✗
2
  sigArr_C.operator<<(sigBa);
36
✓✗✓✗
✓✗✓✗
✗✓
2
  BOOST_CHECK_EQUAL(2, sigArr_C.getSize());
37
38
✓✗
4
  SignalArray<int> sigArr(1);
39
✓✗
2
  sigArr.operator<<(sigBa);
40
✓✗
2
  sigArr.operator<<(sigBa);
41
✓✗✓✗
✓✗✓✗
✗✓
2
  BOOST_CHECK_EQUAL(2, sigArr.getSize());
42
43
✓✗✓✗
6
  SignalBase<int> sigB("constructor test");
44
✓✗
4
  SignalArray<int> sigA(2);
45
✓✗
2
  sigA << sigB;
46
✓✗
2
  sigA.operator<<(sigB);
47
✓✗
4
  SignalArray_const<int> sig_C(sigA);
48
✓✗✓✗
✓✗✓✗
✗✓
2
  BOOST_CHECK_EQUAL(sigA.getSize(), sig_C.getSize());
49
2
}
50
51
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗
4
BOOST_AUTO_TEST_CASE(test_base) {
52
✓✗✓✗
6
  SignalBase<int> sigA("testA");
53
✓✗✓✗
6
  SignalBase<int> sigB("test");
54
2
  sigB.setReady();
55
✓✗✓✗
✓✗✓✗
✗✓
2
  BOOST_CHECK_EQUAL(true, sigB.getReady());
56
  // Does nothing, just check that the interface
57
  // still exist at the abstract level.
58
2
  sigB.setPeriodTime(1);
59
2
  sigB.getPeriodTime();
60
2
  sigB.addDependency(sigA);
61
2
  sigB.removeDependency(sigA);
62
2
  sigB.clearDependencies();
63
✓✗✓✗
✓✗✓✗
✗✓
2
  BOOST_CHECK_EQUAL(true, sigB.needUpdate(10));
64
✓✗✓✗
4
  output_test_stream output;
65
2
  sigB.writeGraph(output);
66
✓✗✓✗
✓✗✓✗
✓✗✓✗
✗✓
2
  BOOST_CHECK(output.is_equal(""));
67
68
  /// Verify plug operations
69
2
  bool res = false;
70
  try {
71
✗✓
2
    sigB.plug(&sigA);
72
2
  } catch (const ExceptionSignal &aea) {
73
✓✗
2
    res = (aea.getCode() == ExceptionSignal::PLUG_IMPOSSIBLE);
74
  }
75
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res);
76
77
2
  res = false;
78
  try {
79
✗✓
2
    sigB.unplug();
80
2
  } catch (const ExceptionSignal &aea) {
81
✓✗
2
    res = (aea.getCode() == ExceptionSignal::PLUG_IMPOSSIBLE);
82
  }
83
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res);
84
85
2
  res = false;
86
  try {
87
✗✓
2
    sigB.setConstantDefault();
88
2
  } catch (const ExceptionSignal &aea) {
89
✓✗
2
    res = (aea.getCode() == ExceptionSignal::PLUG_IMPOSSIBLE);
90
  }
91
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res);
92
93
2
  res = false;
94
  try {
95
    /// Check signal compatibility.
96
✗✓
2
    sigB.checkCompatibility();
97
2
  } catch (const ExceptionSignal &aea) {
98
✓✗
2
    res = (aea.getCode() == ExceptionSignal::PLUG_IMPOSSIBLE);
99
  }
100
  /// Verify set command value
101
102
  /// set
103
✓✗✓✗
6
  std::istringstream iss("empty");
104
2
  res = false;
105
  try {
106
✗✓
2
    sigB.set(iss);
107
2
  } catch (const ExceptionSignal &aea) {
108
✓✗
2
    res = (aea.getCode() == ExceptionSignal::SET_IMPOSSIBLE);
109
  }
110
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res);
111
112
  /// get a value
113
2
  res = false;
114
✓✗
4
  std::ostringstream oss;
115
  try {
116
✗✓
2
    sigB.get(oss);
117
2
  } catch (const ExceptionSignal &aea) {
118
✓✗
2
    res = (aea.getCode() == ExceptionSignal::SET_IMPOSSIBLE);
119
  }
120
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res);
121
122
  /// Trigger revaluation of the signal
123
2
  res = false;
124
  try {
125
✗✓
2
    sigB.recompute(100);
126
2
  } catch (const ExceptionSignal &aea) {
127
✓✗
2
    res = (aea.getCode() == ExceptionSignal::SET_IMPOSSIBLE);
128
  }
129
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res);
130
131
  /// Trace the signal
132
2
  res = false;
133
  try {
134
✗✓
2
    sigB.trace(oss);
135
2
  } catch (const ExceptionSignal &aea) {
136
✓✗
2
    res = (aea.getCode() == ExceptionSignal::SET_IMPOSSIBLE);
137
  }
138
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res);
139
140
  /// Display the signal
141
✓✗
2
  sigB.display(output);
142
✓✗✓✗
✓✗✓✗
✓✗✓✗
✗✓
2
  BOOST_CHECK(output.is_equal("Sig:test"));
143
2
}
144
145
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗
4
BOOST_AUTO_TEST_CASE(test_cast_helper) {
146
✓✗
4
  std::istringstream iss;
147
✓✗✓✗
2
  iss.str("1");
148
✓✗
2
  signal_io<int>::cast(iss);
149
150
  {
151
✓✗
4
    std::istringstream iss_fail;
152
✓✗✓✗
2
    iss.str("test");
153
✓✗✓✗
✗✓✗✗
✗✗✗✗
✗✗✗✗
✗✗✗✓
✓✗✓✗
✓✗✓✗
✓✗✗✓
6
    BOOST_CHECK_THROW(signal_io<int>::cast(iss_fail), ExceptionSignal);
154
  }
155
156
  /// Test cast register with Vector
157
✓✗✓✗
4
  output_test_stream output;
158
✓✗
4
  dynamicgraph::Vector avec;
159
✓✗
2
  avec.resize(4);
160
✓✗
2
  avec[0] = 1.0;
161
✓✗
2
  avec[1] = 2.0;
162
✓✗
2
  avec[2] = 3.0;
163
✓✗
2
  avec[3] = 4.0;
164
✓✗✓✗
✓✗✓✗
✓✗✓✗
✗✓✗✓
✗✗✗✗
✗✗✗✗
✗✗✗✗
✗✗
2
  BOOST_CHECK_NO_THROW(signal_io<Vector>::trace(avec, output));
165
166
  /// Test cast register with Matrix
167
✓✗
4
  dynamicgraph::Matrix amatrix;
168
✓✗
2
  amatrix.resize(2, 2);
169
✓✗
2
  amatrix(0, 0) = 0.0;
170
✓✗
2
  amatrix(0, 1) = 1.0;
171
✓✗
2
  amatrix(1, 0) = 2.0;
172
✓✗
2
  amatrix(1, 1) = 3.0;
173
✓✗✓✗
✓✗✓✗
✓✗✓✗
✗✓✗✓
✗✗✗✗
✗✗✗✗
✗✗✗✗
✗✗
2
  BOOST_CHECK_NO_THROW(signal_io<Matrix>::trace(amatrix, output));
174
175
✓✗✓✗
4
  std::istringstream aiss("test");
176
✓✗
2
  signal_io<std::string>::cast(aiss);
177
2
}