File: test_util.hpp

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (95 lines) | stat: -rw-r--r-- 2,290 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Copyright (c) 2018-2025 Jean-Louis Leroy
// Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)

#ifndef BOOST_OPENMETHOD_TEST_HELPERS_HPP
#define BOOST_OPENMETHOD_TEST_HELPERS_HPP

#include <iostream>

#include <boost/openmethod/core.hpp>
#include <boost/openmethod/initialize.hpp>

template<typename Key>
struct unique final {
    using category = unique;
    template<class Registry>
    struct fn {};
};

template<int N, class... Policies>
struct test_registry_ : boost::openmethod::default_registry::with<
                            unique<test_registry_<N>>, Policies...> {
    using registry_type = boost::openmethod::default_registry::with<
        unique<test_registry_<N>>, Policies...>;
};

#define TEST_NS BOOST_PP_CAT(test, __COUNTER__)

struct capture_cout {
    capture_cout(std::streambuf* new_buffer)
        : old(std::cout.rdbuf(new_buffer)) {
    }

    ~capture_cout() {
        std::cout.rdbuf(old);
    }

  private:
    std::streambuf* old;
};

#define MAKE_STRING_CONSTANT(ID) static const std::string ID = #ID;

struct string_pair : std::pair<std::string, std::string> {
    using std::pair<std::string, std::string>::pair;
};

inline std::ostream& operator<<(std::ostream& os, const string_pair& pair) {
    return os << "(" << pair.first << ", " << pair.second << ")";
}

namespace test_matrices {

MAKE_STRING_CONSTANT(NONE)
MAKE_STRING_CONSTANT(MATRIX)
MAKE_STRING_CONSTANT(DIAGONAL)
MAKE_STRING_CONSTANT(SCALAR_MATRIX)
MAKE_STRING_CONSTANT(SCALAR_DIAGONAL)
MAKE_STRING_CONSTANT(MATRIX_SCALAR)
MAKE_STRING_CONSTANT(DIAGONAL_SCALAR)
MAKE_STRING_CONSTANT(MATRIX_MATRIX)
MAKE_STRING_CONSTANT(MATRIX_DIAGONAL)
MAKE_STRING_CONSTANT(DIAGONAL_DIAGONAL)
MAKE_STRING_CONSTANT(DIAGONAL_MATRIX)
MAKE_STRING_CONSTANT(MATRIX_DENSE)
MAKE_STRING_CONSTANT(DENSE_MATRIX)

struct matrix {
    matrix() : type(MATRIX) {
    }

    virtual ~matrix() {
    }

    std::string type;

  protected:
    matrix(std::string type) : type(std::move(type)) {
    }
};

struct dense_matrix : matrix {
    dense_matrix() : matrix(DENSE_MATRIX) {
    }
};

struct diagonal_matrix : matrix {
    diagonal_matrix() : matrix(DIAGONAL_MATRIX) {
    }
};

} // namespace test_matrices

#endif