Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
78761b58
Commit
78761b58
authored
Oct 09, 2018
by
misterg
Committed by
Gennadiy Civil
Oct 09, 2018
Browse files
Remove non-variadic pre C++11 AnyOf
PiperOrigin-RevId: 216411381
parent
7d3b73c8
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
16 additions
and
277 deletions
+16
-277
googlemock/include/gmock/gmock-generated-matchers.h
googlemock/include/gmock/gmock-generated-matchers.h
+0
-171
googlemock/include/gmock/gmock-generated-matchers.h.pump
googlemock/include/gmock/gmock-generated-matchers.h.pump
+0
-50
googlemock/include/gmock/gmock-matchers.h
googlemock/include/gmock/gmock-matchers.h
+0
-30
googlemock/test/gmock-matchers_test.cc
googlemock/test/gmock-matchers_test.cc
+16
-26
No files found.
googlemock/include/gmock/gmock-generated-matchers.h
View file @
78761b58
...
@@ -299,94 +299,6 @@ class ArgsMatcher {
...
@@ -299,94 +299,6 @@ class ArgsMatcher {
GTEST_DISALLOW_ASSIGN_
(
ArgsMatcher
);
GTEST_DISALLOW_ASSIGN_
(
ArgsMatcher
);
};
};
// A set of metafunctions for computing the result type of AnyOf.
// AnyOf(m1, ..., mN) returns
// AnyOfResultN<decltype(m1), ..., decltype(mN)>::type.
// Although AnyOf isn't defined for one argument, AnyOfResult1 is defined
// to simplify the implementation.
template
<
typename
M1
>
struct
AnyOfResult1
{
typedef
M1
type
;
};
template
<
typename
M1
,
typename
M2
>
struct
AnyOfResult2
{
typedef
EitherOfMatcher
<
typename
AnyOfResult1
<
M1
>::
type
,
typename
AnyOfResult1
<
M2
>::
type
>
type
;
};
template
<
typename
M1
,
typename
M2
,
typename
M3
>
struct
AnyOfResult3
{
typedef
EitherOfMatcher
<
typename
AnyOfResult1
<
M1
>::
type
,
typename
AnyOfResult2
<
M2
,
M3
>::
type
>
type
;
};
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
>
struct
AnyOfResult4
{
typedef
EitherOfMatcher
<
typename
AnyOfResult2
<
M1
,
M2
>::
type
,
typename
AnyOfResult2
<
M3
,
M4
>::
type
>
type
;
};
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
>
struct
AnyOfResult5
{
typedef
EitherOfMatcher
<
typename
AnyOfResult2
<
M1
,
M2
>::
type
,
typename
AnyOfResult3
<
M3
,
M4
,
M5
>::
type
>
type
;
};
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
>
struct
AnyOfResult6
{
typedef
EitherOfMatcher
<
typename
AnyOfResult3
<
M1
,
M2
,
M3
>::
type
,
typename
AnyOfResult3
<
M4
,
M5
,
M6
>::
type
>
type
;
};
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
,
typename
M7
>
struct
AnyOfResult7
{
typedef
EitherOfMatcher
<
typename
AnyOfResult3
<
M1
,
M2
,
M3
>::
type
,
typename
AnyOfResult4
<
M4
,
M5
,
M6
,
M7
>::
type
>
type
;
};
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
,
typename
M7
,
typename
M8
>
struct
AnyOfResult8
{
typedef
EitherOfMatcher
<
typename
AnyOfResult4
<
M1
,
M2
,
M3
,
M4
>::
type
,
typename
AnyOfResult4
<
M5
,
M6
,
M7
,
M8
>::
type
>
type
;
};
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
,
typename
M7
,
typename
M8
,
typename
M9
>
struct
AnyOfResult9
{
typedef
EitherOfMatcher
<
typename
AnyOfResult4
<
M1
,
M2
,
M3
,
M4
>::
type
,
typename
AnyOfResult5
<
M5
,
M6
,
M7
,
M8
,
M9
>::
type
>
type
;
};
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
,
typename
M7
,
typename
M8
,
typename
M9
,
typename
M10
>
struct
AnyOfResult10
{
typedef
EitherOfMatcher
<
typename
AnyOfResult5
<
M1
,
M2
,
M3
,
M4
,
M5
>::
type
,
typename
AnyOfResult5
<
M6
,
M7
,
M8
,
M9
,
M10
>::
type
>
type
;
};
}
// namespace internal
}
// namespace internal
// Args<N1, N2, ..., Nk>(a_matcher) matches a tuple if the selected
// Args<N1, N2, ..., Nk>(a_matcher) matches a tuple if the selected
...
@@ -469,89 +381,6 @@ Args(const InnerMatcher& matcher) {
...
@@ -469,89 +381,6 @@ Args(const InnerMatcher& matcher) {
// AnyOf(m1, m2, ..., mk) matches any value that matches any of the given
// sub-matchers. AnyOf is called fully qualified to prevent ADL from firing.
template
<
typename
M1
,
typename
M2
>
inline
typename
internal
::
AnyOfResult2
<
M1
,
M2
>::
type
AnyOf
(
M1
m1
,
M2
m2
)
{
return
typename
internal
::
AnyOfResult2
<
M1
,
M2
>::
type
(
m1
,
m2
);
}
template
<
typename
M1
,
typename
M2
,
typename
M3
>
inline
typename
internal
::
AnyOfResult3
<
M1
,
M2
,
M3
>::
type
AnyOf
(
M1
m1
,
M2
m2
,
M3
m3
)
{
return
typename
internal
::
AnyOfResult3
<
M1
,
M2
,
M3
>::
type
(
m1
,
::
testing
::
AnyOf
(
m2
,
m3
));
}
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
>
inline
typename
internal
::
AnyOfResult4
<
M1
,
M2
,
M3
,
M4
>::
type
AnyOf
(
M1
m1
,
M2
m2
,
M3
m3
,
M4
m4
)
{
return
typename
internal
::
AnyOfResult4
<
M1
,
M2
,
M3
,
M4
>::
type
(
::
testing
::
AnyOf
(
m1
,
m2
),
::
testing
::
AnyOf
(
m3
,
m4
));
}
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
>
inline
typename
internal
::
AnyOfResult5
<
M1
,
M2
,
M3
,
M4
,
M5
>::
type
AnyOf
(
M1
m1
,
M2
m2
,
M3
m3
,
M4
m4
,
M5
m5
)
{
return
typename
internal
::
AnyOfResult5
<
M1
,
M2
,
M3
,
M4
,
M5
>::
type
(
::
testing
::
AnyOf
(
m1
,
m2
),
::
testing
::
AnyOf
(
m3
,
m4
,
m5
));
}
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
>
inline
typename
internal
::
AnyOfResult6
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
>::
type
AnyOf
(
M1
m1
,
M2
m2
,
M3
m3
,
M4
m4
,
M5
m5
,
M6
m6
)
{
return
typename
internal
::
AnyOfResult6
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
>::
type
(
::
testing
::
AnyOf
(
m1
,
m2
,
m3
),
::
testing
::
AnyOf
(
m4
,
m5
,
m6
));
}
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
,
typename
M7
>
inline
typename
internal
::
AnyOfResult7
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
,
M7
>::
type
AnyOf
(
M1
m1
,
M2
m2
,
M3
m3
,
M4
m4
,
M5
m5
,
M6
m6
,
M7
m7
)
{
return
typename
internal
::
AnyOfResult7
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
,
M7
>::
type
(
::
testing
::
AnyOf
(
m1
,
m2
,
m3
),
::
testing
::
AnyOf
(
m4
,
m5
,
m6
,
m7
));
}
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
,
typename
M7
,
typename
M8
>
inline
typename
internal
::
AnyOfResult8
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
,
M7
,
M8
>::
type
AnyOf
(
M1
m1
,
M2
m2
,
M3
m3
,
M4
m4
,
M5
m5
,
M6
m6
,
M7
m7
,
M8
m8
)
{
return
typename
internal
::
AnyOfResult8
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
,
M7
,
M8
>::
type
(
::
testing
::
AnyOf
(
m1
,
m2
,
m3
,
m4
),
::
testing
::
AnyOf
(
m5
,
m6
,
m7
,
m8
));
}
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
,
typename
M7
,
typename
M8
,
typename
M9
>
inline
typename
internal
::
AnyOfResult9
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
,
M7
,
M8
,
M9
>::
type
AnyOf
(
M1
m1
,
M2
m2
,
M3
m3
,
M4
m4
,
M5
m5
,
M6
m6
,
M7
m7
,
M8
m8
,
M9
m9
)
{
return
typename
internal
::
AnyOfResult9
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
,
M7
,
M8
,
M9
>::
type
(
::
testing
::
AnyOf
(
m1
,
m2
,
m3
,
m4
),
::
testing
::
AnyOf
(
m5
,
m6
,
m7
,
m8
,
m9
));
}
template
<
typename
M1
,
typename
M2
,
typename
M3
,
typename
M4
,
typename
M5
,
typename
M6
,
typename
M7
,
typename
M8
,
typename
M9
,
typename
M10
>
inline
typename
internal
::
AnyOfResult10
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
,
M7
,
M8
,
M9
,
M10
>::
type
AnyOf
(
M1
m1
,
M2
m2
,
M3
m3
,
M4
m4
,
M5
m5
,
M6
m6
,
M7
m7
,
M8
m8
,
M9
m9
,
M10
m10
)
{
return
typename
internal
::
AnyOfResult10
<
M1
,
M2
,
M3
,
M4
,
M5
,
M6
,
M7
,
M8
,
M9
,
M10
>::
type
(
::
testing
::
AnyOf
(
m1
,
m2
,
m3
,
m4
,
m5
),
::
testing
::
AnyOf
(
m6
,
m7
,
m8
,
m9
,
m10
));
}
}
// namespace testing
}
// namespace testing
...
...
googlemock/include/gmock/gmock-generated-matchers.h.pump
View file @
78761b58
...
@@ -188,36 +188,6 @@ class ArgsMatcher {
...
@@ -188,36 +188,6 @@ class ArgsMatcher {
GTEST_DISALLOW_ASSIGN_
(
ArgsMatcher
);
GTEST_DISALLOW_ASSIGN_
(
ArgsMatcher
);
};
};
// A set of metafunctions for computing the result type of AnyOf.
// AnyOf(m1, ..., mN) returns
// AnyOfResultN<decltype(m1), ..., decltype(mN)>::type.
// Although AnyOf isn't defined for one argument, AnyOfResult1 is defined
// to simplify the implementation.
template
<
typename
M1
>
struct
AnyOfResult1
{
typedef
M1
type
;
};
$
range
i
1.
.
n
$
range
i
2.
.
n
$
for
i
[[
$
range
j
2.
.
i
$
var
m
=
i
/
2
$
range
k
1.
.
m
$
range
t
m
+
1.
.
i
template
<
typename
M1
$
for
j
[[,
typename
M
$
j
]]>
struct
AnyOfResult
$
i
{
typedef
EitherOfMatcher
<
typename
AnyOfResult
$
m
<
$
for
k
,
[[
M
$
k
]]
>::
type
,
typename
AnyOfResult
$
(
i
-
m
)
<
$
for
t
,
[[
M
$
t
]]
>::
type
>
type
;
};
]]
}
// namespace internal
}
// namespace internal
// Args<N1, N2, ..., Nk>(a_matcher) matches a tuple if the selected
// Args<N1, N2, ..., Nk>(a_matcher) matches a tuple if the selected
...
@@ -234,26 +204,6 @@ Args(const InnerMatcher& matcher) {
...
@@ -234,26 +204,6 @@ Args(const InnerMatcher& matcher) {
}
}
]]
// AnyOf(m1, m2, ..., mk) matches any value that matches any of the given
// sub-matchers. AnyOf is called fully qualified to prevent ADL from firing.
$
range
i
2.
.
n
$
for
i
[[
$
range
j
1.
.
i
$
var
m
=
i
/
2
$
range
k
1.
.
m
$
range
t
m
+
1.
.
i
template
<
$
for
j
,
[[
typename
M
$
j
]]>
inline
typename
internal
::
AnyOfResult
$
i
<
$
for
j
,
[[
M
$
j
]]
>::
type
AnyOf
(
$
for
j
,
[[
M
$
j
m
$
j
]])
{
return
typename
internal
::
AnyOfResult
$
i
<
$
for
j
,
[[
M
$
j
]]
>::
type
(
$
if
m
==
1
[[
m1
]]
$
else
[[
::
testing
::
AnyOf
(
$
for
k
,
[[
m
$
k
]])]],
$
if
m
+
1
==
i
[[
m
$
i
]]
$
else
[[
::
testing
::
AnyOf
(
$
for
t
,
[[
m
$
t
]])]]);
}
]]
]]
}
// namespace testing
}
// namespace testing
...
...
googlemock/include/gmock/gmock-matchers.h
View file @
78761b58
...
@@ -1879,40 +1879,10 @@ class AnyOfMatcherImpl
...
@@ -1879,40 +1879,10 @@ class AnyOfMatcherImpl
GTEST_DISALLOW_ASSIGN_
(
AnyOfMatcherImpl
);
GTEST_DISALLOW_ASSIGN_
(
AnyOfMatcherImpl
);
};
};
#if GTEST_LANG_CXX11
// AnyOfMatcher is used for the variadic implementation of AnyOf(m_1, m_2, ...).
// AnyOfMatcher is used for the variadic implementation of AnyOf(m_1, m_2, ...).
template
<
typename
...
Args
>
template
<
typename
...
Args
>
using
AnyOfMatcher
=
VariadicMatcher
<
AnyOfMatcherImpl
,
Args
...
>
;
using
AnyOfMatcher
=
VariadicMatcher
<
AnyOfMatcherImpl
,
Args
...
>
;
#endif // GTEST_LANG_CXX11
// Used for implementing the AnyOf(m_1, ..., m_n) matcher, which
// matches a value that matches at least one of the matchers m_1, ...,
// and m_n.
template
<
typename
Matcher1
,
typename
Matcher2
>
class
EitherOfMatcher
{
public:
EitherOfMatcher
(
Matcher1
matcher1
,
Matcher2
matcher2
)
:
matcher1_
(
matcher1
),
matcher2_
(
matcher2
)
{}
// This template type conversion operator allows a
// EitherOfMatcher<Matcher1, Matcher2> object to match any type that
// both Matcher1 and Matcher2 can match.
template
<
typename
T
>
operator
Matcher
<
T
>
()
const
{
std
::
vector
<
Matcher
<
T
>
>
values
;
values
.
push_back
(
SafeMatcherCast
<
T
>
(
matcher1_
));
values
.
push_back
(
SafeMatcherCast
<
T
>
(
matcher2_
));
return
Matcher
<
T
>
(
new
AnyOfMatcherImpl
<
T
>
(
internal
::
move
(
values
)));
}
private:
Matcher1
matcher1_
;
Matcher2
matcher2_
;
GTEST_DISALLOW_ASSIGN_
(
EitherOfMatcher
);
};
// Used for implementing Truly(pred), which turns a predicate into a
// Used for implementing Truly(pred), which turns a predicate into a
// matcher.
// matcher.
template
<
typename
Predicate
>
template
<
typename
Predicate
>
...
...
googlemock/test/gmock-matchers_test.cc
View file @
78761b58
...
@@ -2790,27 +2790,21 @@ TEST(ElementsAreTest, HugeMatcherUnordered) {
...
@@ -2790,27 +2790,21 @@ TEST(ElementsAreTest, HugeMatcherUnordered) {
TEST
(
AnyOfTest
,
CanDescribeSelf
)
{
TEST
(
AnyOfTest
,
CanDescribeSelf
)
{
Matcher
<
int
>
m
;
Matcher
<
int
>
m
;
m
=
AnyOf
(
Le
(
1
),
Ge
(
3
));
m
=
AnyOf
(
Le
(
1
),
Ge
(
3
));
EXPECT_EQ
(
"(is <= 1) or (is >= 3)"
,
EXPECT_EQ
(
"(is <= 1) or (is >= 3)"
,
Describe
(
m
));
Describe
(
m
));
m
=
AnyOf
(
Lt
(
0
),
Eq
(
1
),
Eq
(
2
));
m
=
AnyOf
(
Lt
(
0
),
Eq
(
1
),
Eq
(
2
));
EXPECT_EQ
(
"(is < 0) or "
EXPECT_EQ
(
"(is < 0) or (is equal to 1) or (is equal to 2)"
,
Describe
(
m
));
"((is equal to 1) or (is equal to 2))"
,
Describe
(
m
));
m
=
AnyOf
(
Lt
(
0
),
Eq
(
1
),
Eq
(
2
),
Eq
(
3
));
m
=
AnyOf
(
Lt
(
0
),
Eq
(
1
),
Eq
(
2
),
Eq
(
3
));
EXPECT_EQ
(
"((is < 0) or "
EXPECT_EQ
(
"(is < 0) or (is equal to 1) or (is equal to 2) or (is equal to 3)"
,
"(is equal to 1)) or "
"((is equal to 2) or "
"(is equal to 3))"
,
Describe
(
m
));
Describe
(
m
));
m
=
AnyOf
(
Le
(
0
),
Gt
(
10
),
3
,
5
,
7
);
m
=
AnyOf
(
Le
(
0
),
Gt
(
10
),
3
,
5
,
7
);
EXPECT_EQ
(
"((is <= 0) or "
EXPECT_EQ
(
"(is > 10)) or "
"(is <= 0) or (is > 10) or (is equal to 3) or (is equal to 5) or (is "
"((is equal to 3) or "
"equal to 7)"
,
"((is equal to 5) or "
"(is equal to 7)))"
,
Describe
(
m
));
Describe
(
m
));
}
}
...
@@ -2822,23 +2816,19 @@ TEST(AnyOfTest, CanDescribeNegation) {
...
@@ -2822,23 +2816,19 @@ TEST(AnyOfTest, CanDescribeNegation) {
DescribeNegation
(
m
));
DescribeNegation
(
m
));
m
=
AnyOf
(
Lt
(
0
),
Eq
(
1
),
Eq
(
2
));
m
=
AnyOf
(
Lt
(
0
),
Eq
(
1
),
Eq
(
2
));
EXPECT_EQ
(
"(isn't < 0) and "
EXPECT_EQ
(
"(isn't < 0) and (isn't equal to 1) and (isn't equal to 2)"
,
"((isn't equal to 1) and (isn't equal to 2))"
,
DescribeNegation
(
m
));
DescribeNegation
(
m
));
m
=
AnyOf
(
Lt
(
0
),
Eq
(
1
),
Eq
(
2
),
Eq
(
3
));
m
=
AnyOf
(
Lt
(
0
),
Eq
(
1
),
Eq
(
2
),
Eq
(
3
));
EXPECT_EQ
(
"((isn't < 0) and "
EXPECT_EQ
(
"(isn't equal to 1)) and "
"(isn't < 0) and (isn't equal to 1) and (isn't equal to 2) and (isn't "
"((isn't equal to 2) and "
"equal to 3)"
,
"(isn't equal to 3))"
,
DescribeNegation
(
m
));
DescribeNegation
(
m
));
m
=
AnyOf
(
Le
(
0
),
Gt
(
10
),
3
,
5
,
7
);
m
=
AnyOf
(
Le
(
0
),
Gt
(
10
),
3
,
5
,
7
);
EXPECT_EQ
(
"((isn't <= 0) and "
EXPECT_EQ
(
"(isn't > 10)) and "
"(isn't <= 0) and (isn't > 10) and (isn't equal to 3) and (isn't equal "
"((isn't equal to 3) and "
"to 5) and (isn't equal to 7)"
,
"((isn't equal to 5) and "
"(isn't equal to 7)))"
,
DescribeNegation
(
m
));
DescribeNegation
(
m
));
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment