GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: tests/debug-logger.cpp Lines: 97 100 97.0 %
Date: 2023-03-15 12:04:10 Branches: 343 684 50.1 %

Line Branch Exec Source
1
/* Copyright 2019, LAAS-CNRS
2
 *
3
 * Olivier Stasse
4
 *
5
 * See LICENSE file
6
 *
7
 */
8
#include <dynamic-graph/entity.h>
9
#include <dynamic-graph/exception-factory.h>
10
11
#include <iostream>
12
#include <sstream>
13
14
#include "dynamic-graph/factory.h"
15
#include "dynamic-graph/pool.h"
16
17
#define ENABLE_RT_LOG
18
#include <dynamic-graph/logger.h>
19
#include <dynamic-graph/real-time-logger.h>
20
21
#define BOOST_TEST_MODULE debug - logger
22
23
#if BOOST_VERSION >= 105900
24
#include <boost/test/tools/output_test_stream.hpp>
25
#else
26
#include <boost/test/output_test_stream.hpp>
27
#endif
28
#include <boost/test/unit_test.hpp>
29
30
using boost::test_tools::output_test_stream;
31
32
namespace dynamicgraph {
33
class CustomEntity : public Entity {
34
 public:
35
  static const std::string CLASS_NAME;
36
  virtual const std::string &getClassName() const { return CLASS_NAME; }
37
1
  explicit CustomEntity(const std::string &n) : Entity(n) {
38
1
    logger_.setTimeSample(0.001);
39
1
    logger_.setStreamPrintPeriod(0.005);
40
41
1
    logger_.setVerbosity(VERBOSITY_NONE);
42



1
    BOOST_CHECK_EQUAL(logger_.getVerbosity(), VERBOSITY_NONE);
43




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_DEBUG).isNull());
44




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_INFO).isNull());
45




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_WARNING).isNull());
46




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_ERROR).isNull());
47
48
1
    logger_.setVerbosity(VERBOSITY_ERROR);
49



1
    BOOST_CHECK_EQUAL(logger_.getVerbosity(), VERBOSITY_ERROR);
50




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_DEBUG).isNull());
51




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_INFO).isNull());
52




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_WARNING).isNull());
53




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_ERROR).isNull());
54
55
1
    logger_.setVerbosity(VERBOSITY_WARNING_ERROR);
56



1
    BOOST_CHECK_EQUAL(logger_.getVerbosity(), VERBOSITY_WARNING_ERROR);
57




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_DEBUG).isNull());
58




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_INFO).isNull());
59




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_WARNING).isNull());
60




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_ERROR).isNull());
61
62
1
    logger_.setVerbosity(VERBOSITY_INFO_WARNING_ERROR);
63



1
    BOOST_CHECK_EQUAL(logger_.getVerbosity(), VERBOSITY_INFO_WARNING_ERROR);
64




1
    BOOST_CHECK(logger_.stream(MSG_TYPE_DEBUG).isNull());
65




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_INFO).isNull());
66




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_WARNING).isNull());
67




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_ERROR).isNull());
68
69
1
    logger_.setVerbosity(VERBOSITY_ALL);
70



1
    BOOST_CHECK_EQUAL(logger_.getVerbosity(), VERBOSITY_ALL);
71




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_DEBUG).isNull());
72




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_INFO).isNull());
73




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_WARNING).isNull());
74




1
    BOOST_CHECK(!logger_.stream(MSG_TYPE_ERROR).isNull());
75
1
  }
76
77
  ~CustomEntity() {}
78
10000
  void testDebugTrace() {
79

20000
    logger_.stream(MSG_TYPE_DEBUG)
80
10000
        << "This is a message of level MSG_TYPE_DEBUG\n";
81

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
82

20000
    logger_.stream(MSG_TYPE_INFO)
83
10000
        << "This is a message of level MSG_TYPE_INFO\n";
84

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
85

20000
    logger_.stream(MSG_TYPE_WARNING)
86
10000
        << "This is a message of level MSG_TYPE_WARNING\n";
87

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
88

20000
    logger_.stream(MSG_TYPE_ERROR)
89
10000
        << "This is a message of level MSG_TYPE_ERROR\n";
90

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
91

20000
    logger_.stream(MSG_TYPE_DEBUG_STREAM)
92
10000
        << "This is a message of level MSG_TYPE_DEBUG_STREAM\n";
93

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
94

20000
    logger_.stream(MSG_TYPE_INFO_STREAM)
95
10000
        << "This is a message of level MSG_TYPE_INFO_STREAM\n";
96

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
97

20000
    logger_.stream(MSG_TYPE_WARNING_STREAM)
98
10000
        << "This is a message of level MSG_TYPE_WARNING_STREAM\n";
99

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
100

20000
    logger_.stream(MSG_TYPE_ERROR_STREAM)
101
10000
        << "This is a message of level MSG_TYPE_ERROR_STREAM\n";
102
    /* Add test toString */
103

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
104
10000
    double q = 1.0;
105


10000
    logger_.stream() << "Value to display: " + toString(q) << '\n';
106

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
107
20000
    std::vector<double> vq;
108
10000
    vq.resize(3);
109
10000
    vq[0] = 1.0;
110
10000
    vq[1] = 2.0;
111
10000
    vq[2] = 3.0;
112

20000
    logger_.stream(MSG_TYPE_INFO)
113


10000
        << "Value to display: " << toString(vq) << '\n';
114

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
115

20000
    logger_.stream(MSG_TYPE_INFO)
116


10000
        << "Value to display: " << toString(vq, 3, 10) << '\n';
117

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
118
10000
    Eigen::Matrix<double, 3, 3> an_eig_m;
119
10000
    an_eig_m.setOnes();
120

20000
    logger_.stream(MSG_TYPE_INFO)
121


10000
        << "Value to display: " << toString(an_eig_m) << '\n';
122

10000
    dynamicgraph::RealTimeLogger::instance().spinOnce();
123
10000
    logger_.countdown();
124
10000
  }
125
};
126
1
DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(CustomEntity, "CustomEntity");
127
}  // namespace dynamicgraph
128
129
















4
BOOST_AUTO_TEST_CASE(debug_logger) {
130
4
  std::ofstream of;
131
2
  dynamicgraph::RealTimeLogger::instance();
132
2
  of.open("/tmp/dg-LOGS.txt", std::ofstream::out | std::ofstream::app);
133


2
  dgADD_OSTREAM_TO_RTLOG(of);
134
135


2
  BOOST_CHECK_EQUAL(dynamicgraph::CustomEntity::CLASS_NAME, "CustomEntity");
136
137
  dynamicgraph::CustomEntity &entity =
138
      *(dynamic_cast<dynamicgraph::CustomEntity *>(
139


4
          dynamicgraph::FactoryStorage::getInstance()->newEntity("CustomEntity",
140
2
                                                                 "my-entity")));
141
142
2
  entity.setTimeSample(0.002);
143



2
  BOOST_CHECK_EQUAL(entity.getTimeSample(), 0.002);
144
2
  entity.setStreamPrintPeriod(0.002);
145



2
  BOOST_CHECK_EQUAL(entity.getStreamPrintPeriod(), 0.002);
146
147
20002
  for (unsigned int i = 0; i < 10000; i++) {
148
20000
    entity.testDebugTrace();
149
  }
150
151
2
  dynamicgraph::RealTimeLogger::destroy();
152
2
}