]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/histogram/test/accumulators_sum_test.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / histogram / test / accumulators_sum_test.cpp
CommitLineData
f67539c2
TL
1// Copyright 2015-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 <boost/histogram/accumulators/ostream.hpp>
9#include <boost/histogram/accumulators/sum.hpp>
10#include "throw_exception.hpp"
11#include "utility_str.hpp"
12
13using namespace boost::histogram;
14using namespace std::literals;
15
16int main() {
17 double bad_sum = 0;
18 bad_sum += 1;
19 bad_sum += 1e100;
20 bad_sum += 1;
21 bad_sum += -1e100;
22 BOOST_TEST_EQ(bad_sum, 0); // instead of 2
23
24 using s_t = accumulators::sum<double>;
25 s_t sum;
26 ++sum;
27 BOOST_TEST_EQ(sum, 1);
28 BOOST_TEST_EQ(sum.value(), 1);
1e59de90
TL
29 BOOST_TEST_EQ(sum.large_part(), 1);
30 BOOST_TEST_EQ(sum.small_part(), 0);
f67539c2
TL
31 BOOST_TEST_EQ(str(sum), "sum(1 + 0)"s);
32 BOOST_TEST_EQ(str(sum, 15, false), " sum(1 + 0)"s);
33 BOOST_TEST_EQ(str(sum, 15, true), "sum(1 + 0) "s);
34
1e59de90
TL
35#include <boost/histogram/detail/ignore_deprecation_warning_begin.hpp>
36
37 BOOST_TEST_EQ(sum.large(), 1);
38 BOOST_TEST_EQ(sum.small(), 0);
39
40#include <boost/histogram/detail/ignore_deprecation_warning_end.hpp>
41
f67539c2
TL
42 sum += 1e100;
43 BOOST_TEST_EQ(sum, (s_t{1e100, 1}));
44 ++sum;
45 BOOST_TEST_EQ(sum, (s_t{1e100, 2}));
46 sum += -1e100;
47 BOOST_TEST_EQ(sum, (s_t{0, 2}));
48 BOOST_TEST_EQ(sum, 2); // correct answer
49 BOOST_TEST_EQ(sum.value(), 2);
1e59de90
TL
50 BOOST_TEST_EQ(sum.large_part(), 0);
51 BOOST_TEST_EQ(sum.small_part(), 2);
f67539c2
TL
52
53 sum = s_t{1e100, 1};
54 sum += s_t{1e100, 1};
55 BOOST_TEST_EQ(sum, (s_t{2e100, 2}));
56 sum = s_t{1e100, 1};
57 sum += s_t{1, 0};
58 BOOST_TEST_EQ(sum, (s_t{1e100, 2}));
59 sum = s_t{1, 0};
60 sum += s_t{1e100, 1};
61 BOOST_TEST_EQ(sum, (s_t{1e100, 2}));
62 sum = s_t{0, 1};
63 sum += s_t{1, 0};
64 BOOST_TEST_EQ(sum, (s_t{1, 1}));
65
66 accumulators::sum<double> a{3}, b{2}, c{3};
67 BOOST_TEST_LT(b, c);
68 BOOST_TEST_LE(b, c);
69 BOOST_TEST_LE(a, c);
70 BOOST_TEST_GT(a, b);
71 BOOST_TEST_GE(a, b);
72 BOOST_TEST_GE(a, c);
73
74 BOOST_TEST_EQ(s_t{} += s_t{}, s_t{});
75
76 return boost::report_errors();
77}