Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
test
result_tests.cpp
Go to the documentation of this file.
1
// Copyright (c) 2022-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
util/result.h
>
6
7
#include <boost/test/unit_test.hpp>
8
9
inline
bool
operator==
(
const
bilingual_str
& a,
const
bilingual_str
& b)
10
{
11
return
a.
original
== b.
original
&& a.
translated
== b.
translated
;
12
}
13
14
inline
std::ostream&
operator<<
(std::ostream& os,
const
bilingual_str
& s)
15
{
16
return
os <<
"bilingual_str('"
<< s.original <<
"' , '"
<< s.translated <<
"')"
;
17
}
18
19
BOOST_AUTO_TEST_SUITE(result_tests)
20
21
struct
NoCopy
{
22
NoCopy
(
int
n) :
m_n
{
std
::make_unique<int>(n)} {}
23
std::unique_ptr<int>
m_n
;
24
};
25
26
bool
operator==
(
const
NoCopy
& a,
const
NoCopy
& b)
27
{
28
return
*a.
m_n
== *b.
m_n
;
29
}
30
31
std::ostream&
operator<<
(std::ostream& os,
const
NoCopy
& o)
32
{
33
return
os <<
"NoCopy("
<< *o.
m_n
<<
")"
;
34
}
35
36
util::Result<int>
IntFn
(
int
i,
bool
success)
37
{
38
if
(success)
return
i;
39
return
util::Error
{
Untranslated
(
strprintf
(
"int %i error."
, i))};
40
}
41
42
util::Result<bilingual_str>
StrFn
(
bilingual_str
s,
bool
success)
43
{
44
if
(success)
return
s;
45
return
util::Error
{
Untranslated
(
strprintf
(
"str %s error."
, s.original))};
46
}
47
48
util::Result<NoCopy>
NoCopyFn
(
int
i,
bool
success)
49
{
50
if
(success)
return
{i};
51
return
util::Error
{
Untranslated
(
strprintf
(
"nocopy %i error."
, i))};
52
}
53
54
template
<
typename
T>
55
void
ExpectResult
(
const
util::Result<T>
& result,
bool
success,
const
bilingual_str
& str)
56
{
57
BOOST_CHECK_EQUAL
(
bool
(result), success);
58
BOOST_CHECK_EQUAL
(
util::ErrorString
(result), str);
59
}
60
61
template
<
typename
T
,
typename
... Args>
62
void
ExpectSuccess
(
const
util::Result<T>
& result,
const
bilingual_str
& str, Args&&...
args
)
63
{
64
ExpectResult
(result,
true
, str);
65
BOOST_CHECK_EQUAL
(result.
has_value
(),
true
);
66
T
expected{std::forward<Args>(
args
)...};
67
BOOST_CHECK_EQUAL
(result.
value
(), expected);
68
BOOST_CHECK_EQUAL
(&result.
value
(), &*result);
69
}
70
71
template
<
typename
T
,
typename
... Args>
72
void
ExpectFail
(
const
util::Result<T>
& result,
const
bilingual_str
& str)
73
{
74
ExpectResult
(result,
false
, str);
75
}
76
77
BOOST_AUTO_TEST_CASE
(check_returned)
78
{
79
ExpectSuccess
(
IntFn
(5,
true
), {}, 5);
80
ExpectFail
(
IntFn
(5,
false
),
Untranslated
(
"int 5 error."
));
81
ExpectSuccess
(
NoCopyFn
(5,
true
), {}, 5);
82
ExpectFail
(
NoCopyFn
(5,
false
),
Untranslated
(
"nocopy 5 error."
));
83
ExpectSuccess
(
StrFn
(
Untranslated
(
"S"
),
true
), {},
Untranslated
(
"S"
));
84
ExpectFail
(
StrFn
(
Untranslated
(
"S"
),
false
),
Untranslated
(
"str S error."
));
85
}
86
87
BOOST_AUTO_TEST_CASE
(check_value_or)
88
{
89
BOOST_CHECK_EQUAL
(
IntFn
(10,
true
).value_or(20), 10);
90
BOOST_CHECK_EQUAL
(
IntFn
(10,
false
).value_or(20), 20);
91
BOOST_CHECK_EQUAL
(
NoCopyFn
(10,
true
).value_or(20), 10);
92
BOOST_CHECK_EQUAL
(
NoCopyFn
(10,
false
).value_or(20), 20);
93
BOOST_CHECK_EQUAL
(
StrFn
(
Untranslated
(
"A"
),
true
).value_or(
Untranslated
(
"B"
)),
Untranslated
(
"A"
));
94
BOOST_CHECK_EQUAL
(
StrFn
(
Untranslated
(
"A"
),
false
).value_or(
Untranslated
(
"B"
)),
Untranslated
(
"B"
));
95
}
96
97
BOOST_AUTO_TEST_SUITE_END
()
args
ArgsManager & args
Definition
bitcoind.cpp:277
util::Result
Definition
result.h:36
util::Result::has_value
bool has_value() const noexcept
Definition
result.h:64
util::Result::value
const T & value() const LIFETIMEBOUND
Definition
result.h:65
BOOST_AUTO_TEST_SUITE_END
BOOST_AUTO_TEST_SUITE_END()
T
#define T(expected, seed, data)
std
Definition
common.h:29
util::ErrorString
bilingual_str ErrorString(const Result< T > &result)
Definition
result.h:93
BOOST_CHECK_EQUAL
#define BOOST_CHECK_EQUAL(v1, v2)
Definition
object.cpp:17
result.h
IntFn
util::Result< int > IntFn(int i, bool success)
Definition
result_tests.cpp:36
ExpectFail
void ExpectFail(const util::Result< T > &result, const bilingual_str &str)
Definition
result_tests.cpp:72
ExpectResult
void ExpectResult(const util::Result< T > &result, bool success, const bilingual_str &str)
Definition
result_tests.cpp:55
operator==
bool operator==(const bilingual_str &a, const bilingual_str &b)
Definition
result_tests.cpp:9
operator<<
std::ostream & operator<<(std::ostream &os, const bilingual_str &s)
Definition
result_tests.cpp:14
ExpectSuccess
void ExpectSuccess(const util::Result< T > &result, const bilingual_str &str, Args &&... args)
Definition
result_tests.cpp:62
StrFn
util::Result< bilingual_str > StrFn(bilingual_str s, bool success)
Definition
result_tests.cpp:42
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(check_returned)
Definition
result_tests.cpp:77
NoCopyFn
util::Result< NoCopy > NoCopyFn(int i, bool success)
Definition
result_tests.cpp:48
NoCopy
Definition
result_tests.cpp:21
NoCopy::m_n
std::unique_ptr< int > m_n
Definition
result_tests.cpp:23
NoCopy::NoCopy
NoCopy(int n)
Definition
result_tests.cpp:22
bilingual_str
Bilingual messages:
Definition
translation.h:24
bilingual_str::translated
std::string translated
Definition
translation.h:26
bilingual_str::original
std::string original
Definition
translation.h:25
util::Error
Definition
result.h:15
strprintf
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition
tinyformat.h:1172
Untranslated
bilingual_str Untranslated(std::string original)
Mark a bilingual_str as untranslated.
Definition
translation.h:82
Generated on
for Bitcoin Core by
1.17.0