ArmNN
 21.05
UnitTests.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #define BOOST_TEST_MODULE UnitTests
6 #include <boost/test/unit_test.hpp>
7 
8 #include "UnitTests.hpp"
9 #include <armnn/Logging.hpp>
11 
12 struct ConfigureLoggingFixture
13 {
14  ConfigureLoggingFixture()
15  {
17  }
18 };
19 
20 BOOST_GLOBAL_FIXTURE(ConfigureLoggingFixture);
21 
22 // On Windows, duplicate the boost test logging output to the Visual Studio output window using OutputDebugString.
23 #if defined(_MSC_VER)
24 
25 #include <boost/iostreams/filtering_stream.hpp>
26 #include <boost/iostreams/tee.hpp>
27 #include <iostream>
28 #include <common/include/WindowsWrapper.hpp>
29 
30 using namespace boost::iostreams;
31 using namespace std;
32 
33 struct DebugOutputSink : boost::iostreams::sink
34 {
35  std::streamsize write(const char* s, std::streamsize n)
36  {
37  // The given string is not null-terminated, so we need to copy it.
38  std::string s2(s, armnn::numeric_cast<size_t>(n));
39  OutputDebugString(s2.c_str());
40  return n;
41  }
42 };
43 
44 class SetupDebugOutput
45 {
46 public:
47  SetupDebugOutput()
48  {
49  // Sends the output to both cout (as standard) and the debug output.
50  m_OutputStream.push(tee(std::cout));
51  m_OutputStream.push(m_DebugOutputSink);
52 
53  boost::unit_test::unit_test_log.set_stream(m_OutputStream);
54  }
55 private:
56  filtering_ostream m_OutputStream;
57  DebugOutputSink m_DebugOutputSink;
58 };
59 
60 BOOST_GLOBAL_FIXTURE(SetupDebugOutput);
61 
62 #endif // defined(_MSC_VER)
63 
64 
65 BOOST_AUTO_TEST_SUITE(LoggerSuite)
66 
68 {
69  std::stringstream ss;
70 
71  {
72  struct StreamRedirector
73  {
74  public:
75  StreamRedirector(std::ostream& stream, std::streambuf* newStreamBuffer)
76  : m_Stream(stream)
77  , m_BackupBuffer(m_Stream.rdbuf(newStreamBuffer))
78  {}
79  ~StreamRedirector() { m_Stream.rdbuf(m_BackupBuffer); }
80 
81  private:
82  std::ostream& m_Stream;
83  std::streambuf* m_BackupBuffer;
84  };
85 
86 
87  StreamRedirector redirect(std::cout, ss.rdbuf());
88 
89  using namespace armnn;
90  SetLogFilter(LogSeverity::Trace);
91  SetAllLoggingSinks(true, false, false);
92 
93 
94  ARMNN_LOG(trace) << "My trace message; " << -2;
95  ARMNN_LOG(debug) << "My debug message; " << -1;
96  ARMNN_LOG(info) << "My info message; " << 0;
97  ARMNN_LOG(warning) << "My warning message; " << 1;
98  ARMNN_LOG(error) << "My error message; " << 2;
99  ARMNN_LOG(fatal) << "My fatal message; " << 3;
100 
101  SetLogFilter(LogSeverity::Fatal);
102 
103  }
104 
105  BOOST_CHECK(ss.str().find("Trace: My trace message; -2") != std::string::npos);
106  BOOST_CHECK(ss.str().find("Debug: My debug message; -1") != std::string::npos);
107  BOOST_CHECK(ss.str().find("Info: My info message; 0") != std::string::npos);
108  BOOST_CHECK(ss.str().find("Warning: My warning message; 1") != std::string::npos);
109  BOOST_CHECK(ss.str().find("Error: My error message; 2") != std::string::npos);
110  BOOST_CHECK(ss.str().find("Fatal: My fatal message; 3") != std::string::npos);
111 }
112 
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
BOOST_AUTO_TEST_CASE(LoggerTest)
Definition: UnitTests.cpp:67
void SetAllLoggingSinks(bool standardOut, bool debugOut, bool coloured)
Definition: Logging.cpp:142
#define ARMNN_LOG(severity)
Definition: Logging.hpp:202
Copyright (c) 2021 ARM Limited and Contributors.
void SetLogFilter(LogSeverity level)
Definition: Logging.cpp:24
void ConfigureLoggingTest()
Definition: UnitTests.hpp:17
BOOST_AUTO_TEST_SUITE_END()
BOOST_GLOBAL_FIXTURE(ConfigureLoggingFixture)