• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  // Copyright 2018 Hans Dembinski
2  //
3  // Distributed under the Boost Software License, Version 1.0.
4  // (See accompanying file LICENSE_1_0.txt
5  // or copy at http://www.boost.org/LICENSE_1_0.txt)
6  
7  #include <boost/core/lightweight_test.hpp>
8  #include "throw_exception.hpp"
9  #include <sstream>
10  #include <tuple>
11  #include <vector>
12  #include "utility_allocator.hpp"
13  #include "std_ostream.hpp"
14  
15  using namespace boost::histogram;
16  
main()17  int main() {
18    // vector streaming
19    {
20      std::ostringstream os;
21      std::vector<int> v = {1, 3, 2};
22      os << v;
23      BOOST_TEST_EQ(os.str(), std::string("[ 1 3 2 ]"));
24    }
25  
26    // tuple streaming
27    {
28      std::ostringstream os;
29      auto v = std::make_tuple(1, 2.5, "hi");
30      os << v;
31      BOOST_TEST_EQ(os.str(), std::string("[ 1 2.5 hi ]"));
32    }
33  
34    // tracing_allocator
35    {
36      tracing_allocator_db db;
37      tracing_allocator<char> a(db);
38      auto p1 = a.allocate(2);
39      a.deallocate(p1, 2);
40      tracing_allocator<int> b(a);
41      auto p2 = b.allocate(3);
42      b.deallocate(p2, 3);
43      BOOST_TEST_EQ(db.size(), 2);
44      BOOST_TEST_EQ(db.at<char>().first, 0);
45      BOOST_TEST_EQ(db.at<char>().second, 2);
46      BOOST_TEST_EQ(db.at<int>().first, 0);
47      BOOST_TEST_EQ(db.at<int>().second, 3);
48      BOOST_TEST_EQ(db.first, 0);
49      BOOST_TEST_EQ(db.second, 2 + 3 * sizeof(int));
50    }
51  
52    return boost::report_errors();
53  }
54