Home | History | Annotate | Download | only in test
      1 // Copyright 2007, Google Inc.
      2 // All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions are
      6 // met:
      7 //
      8 //     * Redistributions of source code must retain the above copyright
      9 // notice, this list of conditions and the following disclaimer.
     10 //     * Redistributions in binary form must reproduce the above
     11 // copyright notice, this list of conditions and the following disclaimer
     12 // in the documentation and/or other materials provided with the
     13 // distribution.
     14 //     * Neither the name of Google Inc. nor the names of its
     15 // contributors may be used to endorse or promote products derived from
     16 // this software without specific prior written permission.
     17 //
     18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 //
     30 // Author: wan (at) google.com (Zhanyong Wan)
     31 
     32 // Google Mock - a framework for writing C++ mock classes.
     33 //
     34 // This file tests some commonly used argument matchers.
     35 
     36 #include "gmock/gmock-matchers.h"
     37 #include "gmock/gmock-more-matchers.h"
     38 
     39 #include <string.h>
     40 #include <time.h>
     41 #include <deque>
     42 #include <functional>
     43 #include <iostream>
     44 #include <iterator>
     45 #include <limits>
     46 #include <list>
     47 #include <map>
     48 #include <set>
     49 #include <sstream>
     50 #include <string>
     51 #include <utility>
     52 #include <vector>
     53 #include "gmock/gmock.h"
     54 #include "gtest/gtest.h"
     55 #include "gtest/gtest-spi.h"
     56 
     57 namespace testing {
     58 
     59 namespace internal {
     60 GTEST_API_ string JoinAsTuple(const Strings& fields);
     61 }  // namespace internal
     62 
     63 namespace gmock_matchers_test {
     64 
     65 using std::greater;
     66 using std::less;
     67 using std::list;
     68 using std::make_pair;
     69 using std::map;
     70 using std::multimap;
     71 using std::multiset;
     72 using std::ostream;
     73 using std::pair;
     74 using std::set;
     75 using std::stringstream;
     76 using std::tr1::get;
     77 using std::tr1::make_tuple;
     78 using std::tr1::tuple;
     79 using std::vector;
     80 using testing::A;
     81 using testing::AllArgs;
     82 using testing::AllOf;
     83 using testing::An;
     84 using testing::AnyOf;
     85 using testing::ByRef;
     86 using testing::ContainsRegex;
     87 using testing::DoubleEq;
     88 using testing::DoubleNear;
     89 using testing::EndsWith;
     90 using testing::Eq;
     91 using testing::ExplainMatchResult;
     92 using testing::Field;
     93 using testing::FloatEq;
     94 using testing::FloatNear;
     95 using testing::Ge;
     96 using testing::Gt;
     97 using testing::HasSubstr;
     98 using testing::IsEmpty;
     99 using testing::IsNull;
    100 using testing::Key;
    101 using testing::Le;
    102 using testing::Lt;
    103 using testing::MakeMatcher;
    104 using testing::MakePolymorphicMatcher;
    105 using testing::MatchResultListener;
    106 using testing::Matcher;
    107 using testing::MatcherCast;
    108 using testing::MatcherInterface;
    109 using testing::Matches;
    110 using testing::MatchesRegex;
    111 using testing::NanSensitiveDoubleEq;
    112 using testing::NanSensitiveDoubleNear;
    113 using testing::NanSensitiveFloatEq;
    114 using testing::NanSensitiveFloatNear;
    115 using testing::Ne;
    116 using testing::Not;
    117 using testing::NotNull;
    118 using testing::Pair;
    119 using testing::Pointee;
    120 using testing::Pointwise;
    121 using testing::PolymorphicMatcher;
    122 using testing::Property;
    123 using testing::Ref;
    124 using testing::ResultOf;
    125 using testing::SizeIs;
    126 using testing::StartsWith;
    127 using testing::StringMatchResultListener;
    128 using testing::StrCaseEq;
    129 using testing::StrCaseNe;
    130 using testing::StrEq;
    131 using testing::StrNe;
    132 using testing::Truly;
    133 using testing::TypedEq;
    134 using testing::Value;
    135 using testing::WhenSorted;
    136 using testing::WhenSortedBy;
    137 using testing::_;
    138 using testing::internal::DummyMatchResultListener;
    139 using testing::internal::ElementMatcherPair;
    140 using testing::internal::ElementMatcherPairs;
    141 using testing::internal::ExplainMatchFailureTupleTo;
    142 using testing::internal::FloatingEqMatcher;
    143 using testing::internal::FormatMatcherDescription;
    144 using testing::internal::IsReadableTypeName;
    145 using testing::internal::JoinAsTuple;
    146 using testing::internal::MatchMatrix;
    147 using testing::internal::RE;
    148 using testing::internal::StreamMatchResultListener;
    149 using testing::internal::Strings;
    150 using testing::internal::linked_ptr;
    151 using testing::internal::scoped_ptr;
    152 using testing::internal::string;
    153 
    154 // Evaluates to the number of elements in 'array'.
    155 #define GMOCK_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0]))
    156 
    157 // For testing ExplainMatchResultTo().
    158 class GreaterThanMatcher : public MatcherInterface<int> {
    159  public:
    160   explicit GreaterThanMatcher(int rhs) : rhs_(rhs) {}
    161 
    162   virtual void DescribeTo(ostream* os) const {
    163     *os << "is > " << rhs_;
    164   }
    165 
    166   virtual bool MatchAndExplain(int lhs,
    167                                MatchResultListener* listener) const {
    168     const int diff = lhs - rhs_;
    169     if (diff > 0) {
    170       *listener << "which is " << diff << " more than " << rhs_;
    171     } else if (diff == 0) {
    172       *listener << "which is the same as " << rhs_;
    173     } else {
    174       *listener << "which is " << -diff << " less than " << rhs_;
    175     }
    176 
    177     return lhs > rhs_;
    178   }
    179 
    180  private:
    181   int rhs_;
    182 };
    183 
    184 Matcher<int> GreaterThan(int n) {
    185   return MakeMatcher(new GreaterThanMatcher(n));
    186 }
    187 
    188 string OfType(const string& type_name) {
    189 #if GTEST_HAS_RTTI
    190   return " (of type " + type_name + ")";
    191 #else
    192   return "";
    193 #endif
    194 }
    195 
    196 // Returns the description of the given matcher.
    197 template <typename T>
    198 string Describe(const Matcher<T>& m) {
    199   stringstream ss;
    200   m.DescribeTo(&ss);
    201   return ss.str();
    202 }
    203 
    204 // Returns the description of the negation of the given matcher.
    205 template <typename T>
    206 string DescribeNegation(const Matcher<T>& m) {
    207   stringstream ss;
    208   m.DescribeNegationTo(&ss);
    209   return ss.str();
    210 }
    211 
    212 // Returns the reason why x matches, or doesn't match, m.
    213 template <typename MatcherType, typename Value>
    214 string Explain(const MatcherType& m, const Value& x) {
    215   StringMatchResultListener listener;
    216   ExplainMatchResult(m, x, &listener);
    217   return listener.str();
    218 }
    219 
    220 TEST(MatchResultListenerTest, StreamingWorks) {
    221   StringMatchResultListener listener;
    222   listener << "hi" << 5;
    223   EXPECT_EQ("hi5", listener.str());
    224 
    225   listener.Clear();
    226   EXPECT_EQ("", listener.str());
    227 
    228   listener << 42;
    229   EXPECT_EQ("42", listener.str());
    230 
    231   // Streaming shouldn't crash when the underlying ostream is NULL.
    232   DummyMatchResultListener dummy;
    233   dummy << "hi" << 5;
    234 }
    235 
    236 TEST(MatchResultListenerTest, CanAccessUnderlyingStream) {
    237   EXPECT_TRUE(DummyMatchResultListener().stream() == NULL);
    238   EXPECT_TRUE(StreamMatchResultListener(NULL).stream() == NULL);
    239 
    240   EXPECT_EQ(&std::cout, StreamMatchResultListener(&std::cout).stream());
    241 }
    242 
    243 TEST(MatchResultListenerTest, IsInterestedWorks) {
    244   EXPECT_TRUE(StringMatchResultListener().IsInterested());
    245   EXPECT_TRUE(StreamMatchResultListener(&std::cout).IsInterested());
    246 
    247   EXPECT_FALSE(DummyMatchResultListener().IsInterested());
    248   EXPECT_FALSE(StreamMatchResultListener(NULL).IsInterested());
    249 }
    250 
    251 // Makes sure that the MatcherInterface<T> interface doesn't
    252 // change.
    253 class EvenMatcherImpl : public MatcherInterface<int> {
    254  public:
    255   virtual bool MatchAndExplain(int x,
    256                                MatchResultListener* /* listener */) const {
    257     return x % 2 == 0;
    258   }
    259 
    260   virtual void DescribeTo(ostream* os) const {
    261     *os << "is an even number";
    262   }
    263 
    264   // We deliberately don't define DescribeNegationTo() and
    265   // ExplainMatchResultTo() here, to make sure the definition of these
    266   // two methods is optional.
    267 };
    268 
    269 // Makes sure that the MatcherInterface API doesn't change.
    270 TEST(MatcherInterfaceTest, CanBeImplementedUsingPublishedAPI) {
    271   EvenMatcherImpl m;
    272 }
    273 
    274 // Tests implementing a monomorphic matcher using MatchAndExplain().
    275 
    276 class NewEvenMatcherImpl : public MatcherInterface<int> {
    277  public:
    278   virtual bool MatchAndExplain(int x, MatchResultListener* listener) const {
    279     const bool match = x % 2 == 0;
    280     // Verifies that we can stream to a listener directly.
    281     *listener << "value % " << 2;
    282     if (listener->stream() != NULL) {
    283       // Verifies that we can stream to a listener's underlying stream
    284       // too.
    285       *listener->stream() << " == " << (x % 2);
    286     }
    287     return match;
    288   }
    289 
    290   virtual void DescribeTo(ostream* os) const {
    291     *os << "is an even number";
    292   }
    293 };
    294 
    295 TEST(MatcherInterfaceTest, CanBeImplementedUsingNewAPI) {
    296   Matcher<int> m = MakeMatcher(new NewEvenMatcherImpl);
    297   EXPECT_TRUE(m.Matches(2));
    298   EXPECT_FALSE(m.Matches(3));
    299   EXPECT_EQ("value % 2 == 0", Explain(m, 2));
    300   EXPECT_EQ("value % 2 == 1", Explain(m, 3));
    301 }
    302 
    303 // Tests default-constructing a matcher.
    304 TEST(MatcherTest, CanBeDefaultConstructed) {
    305   Matcher<double> m;
    306 }
    307 
    308 // Tests that Matcher<T> can be constructed from a MatcherInterface<T>*.
    309 TEST(MatcherTest, CanBeConstructedFromMatcherInterface) {
    310   const MatcherInterface<int>* impl = new EvenMatcherImpl;
    311   Matcher<int> m(impl);
    312   EXPECT_TRUE(m.Matches(4));
    313   EXPECT_FALSE(m.Matches(5));
    314 }
    315 
    316 // Tests that value can be used in place of Eq(value).
    317 TEST(MatcherTest, CanBeImplicitlyConstructedFromValue) {
    318   Matcher<int> m1 = 5;
    319   EXPECT_TRUE(m1.Matches(5));
    320   EXPECT_FALSE(m1.Matches(6));
    321 }
    322 
    323 // Tests that NULL can be used in place of Eq(NULL).
    324 TEST(MatcherTest, CanBeImplicitlyConstructedFromNULL) {
    325   Matcher<int*> m1 = NULL;
    326   EXPECT_TRUE(m1.Matches(NULL));
    327   int n = 0;
    328   EXPECT_FALSE(m1.Matches(&n));
    329 }
    330 
    331 // Tests that matchers are copyable.
    332 TEST(MatcherTest, IsCopyable) {
    333   // Tests the copy constructor.
    334   Matcher<bool> m1 = Eq(false);
    335   EXPECT_TRUE(m1.Matches(false));
    336   EXPECT_FALSE(m1.Matches(true));
    337 
    338   // Tests the assignment operator.
    339   m1 = Eq(true);
    340   EXPECT_TRUE(m1.Matches(true));
    341   EXPECT_FALSE(m1.Matches(false));
    342 }
    343 
    344 // Tests that Matcher<T>::DescribeTo() calls
    345 // MatcherInterface<T>::DescribeTo().
    346 TEST(MatcherTest, CanDescribeItself) {
    347   EXPECT_EQ("is an even number",
    348             Describe(Matcher<int>(new EvenMatcherImpl)));
    349 }
    350 
    351 // Tests Matcher<T>::MatchAndExplain().
    352 TEST(MatcherTest, MatchAndExplain) {
    353   Matcher<int> m = GreaterThan(0);
    354   StringMatchResultListener listener1;
    355   EXPECT_TRUE(m.MatchAndExplain(42, &listener1));
    356   EXPECT_EQ("which is 42 more than 0", listener1.str());
    357 
    358   StringMatchResultListener listener2;
    359   EXPECT_FALSE(m.MatchAndExplain(-9, &listener2));
    360   EXPECT_EQ("which is 9 less than 0", listener2.str());
    361 }
    362 
    363 // Tests that a C-string literal can be implicitly converted to a
    364 // Matcher<string> or Matcher<const string&>.
    365 TEST(StringMatcherTest, CanBeImplicitlyConstructedFromCStringLiteral) {
    366   Matcher<string> m1 = "hi";
    367   EXPECT_TRUE(m1.Matches("hi"));
    368   EXPECT_FALSE(m1.Matches("hello"));
    369 
    370   Matcher<const string&> m2 = "hi";
    371   EXPECT_TRUE(m2.Matches("hi"));
    372   EXPECT_FALSE(m2.Matches("hello"));
    373 }
    374 
    375 // Tests that a string object can be implicitly converted to a
    376 // Matcher<string> or Matcher<const string&>.
    377 TEST(StringMatcherTest, CanBeImplicitlyConstructedFromString) {
    378   Matcher<string> m1 = string("hi");
    379   EXPECT_TRUE(m1.Matches("hi"));
    380   EXPECT_FALSE(m1.Matches("hello"));
    381 
    382   Matcher<const string&> m2 = string("hi");
    383   EXPECT_TRUE(m2.Matches("hi"));
    384   EXPECT_FALSE(m2.Matches("hello"));
    385 }
    386 
    387 #if GTEST_HAS_STRING_PIECE_
    388 // Tests that a C-string literal can be implicitly converted to a
    389 // Matcher<StringPiece> or Matcher<const StringPiece&>.
    390 TEST(StringPieceMatcherTest, CanBeImplicitlyConstructedFromCStringLiteral) {
    391   Matcher<StringPiece> m1 = "cats";
    392   EXPECT_TRUE(m1.Matches("cats"));
    393   EXPECT_FALSE(m1.Matches("dogs"));
    394 
    395   Matcher<const StringPiece&> m2 = "cats";
    396   EXPECT_TRUE(m2.Matches("cats"));
    397   EXPECT_FALSE(m2.Matches("dogs"));
    398 }
    399 
    400 // Tests that a string object can be implicitly converted to a
    401 // Matcher<StringPiece> or Matcher<const StringPiece&>.
    402 TEST(StringPieceMatcherTest, CanBeImplicitlyConstructedFromString) {
    403   Matcher<StringPiece> m1 = string("cats");
    404   EXPECT_TRUE(m1.Matches("cats"));
    405   EXPECT_FALSE(m1.Matches("dogs"));
    406 
    407   Matcher<const StringPiece&> m2 = string("cats");
    408   EXPECT_TRUE(m2.Matches("cats"));
    409   EXPECT_FALSE(m2.Matches("dogs"));
    410 }
    411 
    412 // Tests that a StringPiece object can be implicitly converted to a
    413 // Matcher<StringPiece> or Matcher<const StringPiece&>.
    414 TEST(StringPieceMatcherTest, CanBeImplicitlyConstructedFromStringPiece) {
    415   Matcher<StringPiece> m1 = StringPiece("cats");
    416   EXPECT_TRUE(m1.Matches("cats"));
    417   EXPECT_FALSE(m1.Matches("dogs"));
    418 
    419   Matcher<const StringPiece&> m2 = StringPiece("cats");
    420   EXPECT_TRUE(m2.Matches("cats"));
    421   EXPECT_FALSE(m2.Matches("dogs"));
    422 }
    423 #endif  // GTEST_HAS_STRING_PIECE_
    424 
    425 // Tests that MakeMatcher() constructs a Matcher<T> from a
    426 // MatcherInterface* without requiring the user to explicitly
    427 // write the type.
    428 TEST(MakeMatcherTest, ConstructsMatcherFromMatcherInterface) {
    429   const MatcherInterface<int>* dummy_impl = NULL;
    430   Matcher<int> m = MakeMatcher(dummy_impl);
    431 }
    432 
    433 // Tests that MakePolymorphicMatcher() can construct a polymorphic
    434 // matcher from its implementation using the old API.
    435 const int g_bar = 1;
    436 class ReferencesBarOrIsZeroImpl {
    437  public:
    438   template <typename T>
    439   bool MatchAndExplain(const T& x,
    440                        MatchResultListener* /* listener */) const {
    441     const void* p = &x;
    442     return p == &g_bar || x == 0;
    443   }
    444 
    445   void DescribeTo(ostream* os) const { *os << "g_bar or zero"; }
    446 
    447   void DescribeNegationTo(ostream* os) const {
    448     *os << "doesn't reference g_bar and is not zero";
    449   }
    450 };
    451 
    452 // This function verifies that MakePolymorphicMatcher() returns a
    453 // PolymorphicMatcher<T> where T is the argument's type.
    454 PolymorphicMatcher<ReferencesBarOrIsZeroImpl> ReferencesBarOrIsZero() {
    455   return MakePolymorphicMatcher(ReferencesBarOrIsZeroImpl());
    456 }
    457 
    458 TEST(MakePolymorphicMatcherTest, ConstructsMatcherUsingOldAPI) {
    459   // Using a polymorphic matcher to match a reference type.
    460   Matcher<const int&> m1 = ReferencesBarOrIsZero();
    461   EXPECT_TRUE(m1.Matches(0));
    462   // Verifies that the identity of a by-reference argument is preserved.
    463   EXPECT_TRUE(m1.Matches(g_bar));
    464   EXPECT_FALSE(m1.Matches(1));
    465   EXPECT_EQ("g_bar or zero", Describe(m1));
    466 
    467   // Using a polymorphic matcher to match a value type.
    468   Matcher<double> m2 = ReferencesBarOrIsZero();
    469   EXPECT_TRUE(m2.Matches(0.0));
    470   EXPECT_FALSE(m2.Matches(0.1));
    471   EXPECT_EQ("g_bar or zero", Describe(m2));
    472 }
    473 
    474 // Tests implementing a polymorphic matcher using MatchAndExplain().
    475 
    476 class PolymorphicIsEvenImpl {
    477  public:
    478   void DescribeTo(ostream* os) const { *os << "is even"; }
    479 
    480   void DescribeNegationTo(ostream* os) const {
    481     *os << "is odd";
    482   }
    483 
    484   template <typename T>
    485   bool MatchAndExplain(const T& x, MatchResultListener* listener) const {
    486     // Verifies that we can stream to the listener directly.
    487     *listener << "% " << 2;
    488     if (listener->stream() != NULL) {
    489       // Verifies that we can stream to the listener's underlying stream
    490       // too.
    491       *listener->stream() << " == " << (x % 2);
    492     }
    493     return (x % 2) == 0;
    494   }
    495 };
    496 
    497 PolymorphicMatcher<PolymorphicIsEvenImpl> PolymorphicIsEven() {
    498   return MakePolymorphicMatcher(PolymorphicIsEvenImpl());
    499 }
    500 
    501 TEST(MakePolymorphicMatcherTest, ConstructsMatcherUsingNewAPI) {
    502   // Using PolymorphicIsEven() as a Matcher<int>.
    503   const Matcher<int> m1 = PolymorphicIsEven();
    504   EXPECT_TRUE(m1.Matches(42));
    505   EXPECT_FALSE(m1.Matches(43));
    506   EXPECT_EQ("is even", Describe(m1));
    507 
    508   const Matcher<int> not_m1 = Not(m1);
    509   EXPECT_EQ("is odd", Describe(not_m1));
    510 
    511   EXPECT_EQ("% 2 == 0", Explain(m1, 42));
    512 
    513   // Using PolymorphicIsEven() as a Matcher<char>.
    514   const Matcher<char> m2 = PolymorphicIsEven();
    515   EXPECT_TRUE(m2.Matches('\x42'));
    516   EXPECT_FALSE(m2.Matches('\x43'));
    517   EXPECT_EQ("is even", Describe(m2));
    518 
    519   const Matcher<char> not_m2 = Not(m2);
    520   EXPECT_EQ("is odd", Describe(not_m2));
    521 
    522   EXPECT_EQ("% 2 == 0", Explain(m2, '\x42'));
    523 }
    524 
    525 // Tests that MatcherCast<T>(m) works when m is a polymorphic matcher.
    526 TEST(MatcherCastTest, FromPolymorphicMatcher) {
    527   Matcher<int> m = MatcherCast<int>(Eq(5));
    528   EXPECT_TRUE(m.Matches(5));
    529   EXPECT_FALSE(m.Matches(6));
    530 }
    531 
    532 // For testing casting matchers between compatible types.
    533 class IntValue {
    534  public:
    535   // An int can be statically (although not implicitly) cast to a
    536   // IntValue.
    537   explicit IntValue(int a_value) : value_(a_value) {}
    538 
    539   int value() const { return value_; }
    540  private:
    541   int value_;
    542 };
    543 
    544 // For testing casting matchers between compatible types.
    545 bool IsPositiveIntValue(const IntValue& foo) {
    546   return foo.value() > 0;
    547 }
    548 
    549 // Tests that MatcherCast<T>(m) works when m is a Matcher<U> where T
    550 // can be statically converted to U.
    551 TEST(MatcherCastTest, FromCompatibleType) {
    552   Matcher<double> m1 = Eq(2.0);
    553   Matcher<int> m2 = MatcherCast<int>(m1);
    554   EXPECT_TRUE(m2.Matches(2));
    555   EXPECT_FALSE(m2.Matches(3));
    556 
    557   Matcher<IntValue> m3 = Truly(IsPositiveIntValue);
    558   Matcher<int> m4 = MatcherCast<int>(m3);
    559   // In the following, the arguments 1 and 0 are statically converted
    560   // to IntValue objects, and then tested by the IsPositiveIntValue()
    561   // predicate.
    562   EXPECT_TRUE(m4.Matches(1));
    563   EXPECT_FALSE(m4.Matches(0));
    564 }
    565 
    566 // Tests that MatcherCast<T>(m) works when m is a Matcher<const T&>.
    567 TEST(MatcherCastTest, FromConstReferenceToNonReference) {
    568   Matcher<const int&> m1 = Eq(0);
    569   Matcher<int> m2 = MatcherCast<int>(m1);
    570   EXPECT_TRUE(m2.Matches(0));
    571   EXPECT_FALSE(m2.Matches(1));
    572 }
    573 
    574 // Tests that MatcherCast<T>(m) works when m is a Matcher<T&>.
    575 TEST(MatcherCastTest, FromReferenceToNonReference) {
    576   Matcher<int&> m1 = Eq(0);
    577   Matcher<int> m2 = MatcherCast<int>(m1);
    578   EXPECT_TRUE(m2.Matches(0));
    579   EXPECT_FALSE(m2.Matches(1));
    580 }
    581 
    582 // Tests that MatcherCast<const T&>(m) works when m is a Matcher<T>.
    583 TEST(MatcherCastTest, FromNonReferenceToConstReference) {
    584   Matcher<int> m1 = Eq(0);
    585   Matcher<const int&> m2 = MatcherCast<const int&>(m1);
    586   EXPECT_TRUE(m2.Matches(0));
    587   EXPECT_FALSE(m2.Matches(1));
    588 }
    589 
    590 // Tests that MatcherCast<T&>(m) works when m is a Matcher<T>.
    591 TEST(MatcherCastTest, FromNonReferenceToReference) {
    592   Matcher<int> m1 = Eq(0);
    593   Matcher<int&> m2 = MatcherCast<int&>(m1);
    594   int n = 0;
    595   EXPECT_TRUE(m2.Matches(n));
    596   n = 1;
    597   EXPECT_FALSE(m2.Matches(n));
    598 }
    599 
    600 // Tests that MatcherCast<T>(m) works when m is a Matcher<T>.
    601 TEST(MatcherCastTest, FromSameType) {
    602   Matcher<int> m1 = Eq(0);
    603   Matcher<int> m2 = MatcherCast<int>(m1);
    604   EXPECT_TRUE(m2.Matches(0));
    605   EXPECT_FALSE(m2.Matches(1));
    606 }
    607 
    608 // Implicitly convertible form any type.
    609 struct ConvertibleFromAny {
    610   ConvertibleFromAny(int a_value) : value(a_value) {}
    611   template <typename T>
    612   ConvertibleFromAny(const T& a_value) : value(-1) {
    613     ADD_FAILURE() << "Conversion constructor called";
    614   }
    615   int value;
    616 };
    617 
    618 bool operator==(const ConvertibleFromAny& a, const ConvertibleFromAny& b) {
    619   return a.value == b.value;
    620 }
    621 
    622 ostream& operator<<(ostream& os, const ConvertibleFromAny& a) {
    623   return os << a.value;
    624 }
    625 
    626 TEST(MatcherCastTest, ConversionConstructorIsUsed) {
    627   Matcher<ConvertibleFromAny> m = MatcherCast<ConvertibleFromAny>(1);
    628   EXPECT_TRUE(m.Matches(ConvertibleFromAny(1)));
    629   EXPECT_FALSE(m.Matches(ConvertibleFromAny(2)));
    630 }
    631 
    632 TEST(MatcherCastTest, FromConvertibleFromAny) {
    633   Matcher<ConvertibleFromAny> m =
    634       MatcherCast<ConvertibleFromAny>(Eq(ConvertibleFromAny(1)));
    635   EXPECT_TRUE(m.Matches(ConvertibleFromAny(1)));
    636   EXPECT_FALSE(m.Matches(ConvertibleFromAny(2)));
    637 }
    638 
    639 class Base {};
    640 class Derived : public Base {};
    641 
    642 // Tests that SafeMatcherCast<T>(m) works when m is a polymorphic matcher.
    643 TEST(SafeMatcherCastTest, FromPolymorphicMatcher) {
    644   Matcher<char> m2 = SafeMatcherCast<char>(Eq(32));
    645   EXPECT_TRUE(m2.Matches(' '));
    646   EXPECT_FALSE(m2.Matches('\n'));
    647 }
    648 
    649 // Tests that SafeMatcherCast<T>(m) works when m is a Matcher<U> where
    650 // T and U are arithmetic types and T can be losslessly converted to
    651 // U.
    652 TEST(SafeMatcherCastTest, FromLosslesslyConvertibleArithmeticType) {
    653   Matcher<double> m1 = DoubleEq(1.0);
    654   Matcher<float> m2 = SafeMatcherCast<float>(m1);
    655   EXPECT_TRUE(m2.Matches(1.0f));
    656   EXPECT_FALSE(m2.Matches(2.0f));
    657 
    658   Matcher<char> m3 = SafeMatcherCast<char>(TypedEq<int>('a'));
    659   EXPECT_TRUE(m3.Matches('a'));
    660   EXPECT_FALSE(m3.Matches('b'));
    661 }
    662 
    663 // Tests that SafeMatcherCast<T>(m) works when m is a Matcher<U> where T and U
    664 // are pointers or references to a derived and a base class, correspondingly.
    665 TEST(SafeMatcherCastTest, FromBaseClass) {
    666   Derived d, d2;
    667   Matcher<Base*> m1 = Eq(&d);
    668   Matcher<Derived*> m2 = SafeMatcherCast<Derived*>(m1);
    669   EXPECT_TRUE(m2.Matches(&d));
    670   EXPECT_FALSE(m2.Matches(&d2));
    671 
    672   Matcher<Base&> m3 = Ref(d);
    673   Matcher<Derived&> m4 = SafeMatcherCast<Derived&>(m3);
    674   EXPECT_TRUE(m4.Matches(d));
    675   EXPECT_FALSE(m4.Matches(d2));
    676 }
    677 
    678 // Tests that SafeMatcherCast<T&>(m) works when m is a Matcher<const T&>.
    679 TEST(SafeMatcherCastTest, FromConstReferenceToReference) {
    680   int n = 0;
    681   Matcher<const int&> m1 = Ref(n);
    682   Matcher<int&> m2 = SafeMatcherCast<int&>(m1);
    683   int n1 = 0;
    684   EXPECT_TRUE(m2.Matches(n));
    685   EXPECT_FALSE(m2.Matches(n1));
    686 }
    687 
    688 // Tests that MatcherCast<const T&>(m) works when m is a Matcher<T>.
    689 TEST(SafeMatcherCastTest, FromNonReferenceToConstReference) {
    690   Matcher<int> m1 = Eq(0);
    691   Matcher<const int&> m2 = SafeMatcherCast<const int&>(m1);
    692   EXPECT_TRUE(m2.Matches(0));
    693   EXPECT_FALSE(m2.Matches(1));
    694 }
    695 
    696 // Tests that SafeMatcherCast<T&>(m) works when m is a Matcher<T>.
    697 TEST(SafeMatcherCastTest, FromNonReferenceToReference) {
    698   Matcher<int> m1 = Eq(0);
    699   Matcher<int&> m2 = SafeMatcherCast<int&>(m1);
    700   int n = 0;
    701   EXPECT_TRUE(m2.Matches(n));
    702   n = 1;
    703   EXPECT_FALSE(m2.Matches(n));
    704 }
    705 
    706 // Tests that SafeMatcherCast<T>(m) works when m is a Matcher<T>.
    707 TEST(SafeMatcherCastTest, FromSameType) {
    708   Matcher<int> m1 = Eq(0);
    709   Matcher<int> m2 = SafeMatcherCast<int>(m1);
    710   EXPECT_TRUE(m2.Matches(0));
    711   EXPECT_FALSE(m2.Matches(1));
    712 }
    713 
    714 TEST(SafeMatcherCastTest, ConversionConstructorIsUsed) {
    715   Matcher<ConvertibleFromAny> m = SafeMatcherCast<ConvertibleFromAny>(1);
    716   EXPECT_TRUE(m.Matches(ConvertibleFromAny(1)));
    717   EXPECT_FALSE(m.Matches(ConvertibleFromAny(2)));
    718 }
    719 
    720 TEST(SafeMatcherCastTest, FromConvertibleFromAny) {
    721   Matcher<ConvertibleFromAny> m =
    722       SafeMatcherCast<ConvertibleFromAny>(Eq(ConvertibleFromAny(1)));
    723   EXPECT_TRUE(m.Matches(ConvertibleFromAny(1)));
    724   EXPECT_FALSE(m.Matches(ConvertibleFromAny(2)));
    725 }
    726 
    727 // Tests that A<T>() matches any value of type T.
    728 TEST(ATest, MatchesAnyValue) {
    729   // Tests a matcher for a value type.
    730   Matcher<double> m1 = A<double>();
    731   EXPECT_TRUE(m1.Matches(91.43));
    732   EXPECT_TRUE(m1.Matches(-15.32));
    733 
    734   // Tests a matcher for a reference type.
    735   int a = 2;
    736   int b = -6;
    737   Matcher<int&> m2 = A<int&>();
    738   EXPECT_TRUE(m2.Matches(a));
    739   EXPECT_TRUE(m2.Matches(b));
    740 }
    741 
    742 TEST(ATest, WorksForDerivedClass) {
    743   Base base;
    744   Derived derived;
    745   EXPECT_THAT(&base, A<Base*>());
    746   // This shouldn't compile: EXPECT_THAT(&base, A<Derived*>());
    747   EXPECT_THAT(&derived, A<Base*>());
    748   EXPECT_THAT(&derived, A<Derived*>());
    749 }
    750 
    751 // Tests that A<T>() describes itself properly.
    752 TEST(ATest, CanDescribeSelf) {
    753   EXPECT_EQ("is anything", Describe(A<bool>()));
    754 }
    755 
    756 // Tests that An<T>() matches any value of type T.
    757 TEST(AnTest, MatchesAnyValue) {
    758   // Tests a matcher for a value type.
    759   Matcher<int> m1 = An<int>();
    760   EXPECT_TRUE(m1.Matches(9143));
    761   EXPECT_TRUE(m1.Matches(-1532));
    762 
    763   // Tests a matcher for a reference type.
    764   int a = 2;
    765   int b = -6;
    766   Matcher<int&> m2 = An<int&>();
    767   EXPECT_TRUE(m2.Matches(a));
    768   EXPECT_TRUE(m2.Matches(b));
    769 }
    770 
    771 // Tests that An<T>() describes itself properly.
    772 TEST(AnTest, CanDescribeSelf) {
    773   EXPECT_EQ("is anything", Describe(An<int>()));
    774 }
    775 
    776 // Tests that _ can be used as a matcher for any type and matches any
    777 // value of that type.
    778 TEST(UnderscoreTest, MatchesAnyValue) {
    779   // Uses _ as a matcher for a value type.
    780   Matcher<int> m1 = _;
    781   EXPECT_TRUE(m1.Matches(123));
    782   EXPECT_TRUE(m1.Matches(-242));
    783 
    784   // Uses _ as a matcher for a reference type.
    785   bool a = false;
    786   const bool b = true;
    787   Matcher<const bool&> m2 = _;
    788   EXPECT_TRUE(m2.Matches(a));
    789   EXPECT_TRUE(m2.Matches(b));
    790 }
    791 
    792 // Tests that _ describes itself properly.
    793 TEST(UnderscoreTest, CanDescribeSelf) {
    794   Matcher<int> m = _;
    795   EXPECT_EQ("is anything", Describe(m));
    796 }
    797 
    798 // Tests that Eq(x) matches any value equal to x.
    799 TEST(EqTest, MatchesEqualValue) {
    800   // 2 C-strings with same content but different addresses.
    801   const char a1[] = "hi";
    802   const char a2[] = "hi";
    803 
    804   Matcher<const char*> m1 = Eq(a1);
    805   EXPECT_TRUE(m1.Matches(a1));
    806   EXPECT_FALSE(m1.Matches(a2));
    807 }
    808 
    809 // Tests that Eq(v) describes itself properly.
    810 
    811 class Unprintable {
    812  public:
    813   Unprintable() : c_('a') {}
    814 
    815   bool operator==(const Unprintable& /* rhs */) { return true; }
    816  private:
    817   char c_;
    818 };
    819 
    820 TEST(EqTest, CanDescribeSelf) {
    821   Matcher<Unprintable> m = Eq(Unprintable());
    822   EXPECT_EQ("is equal to 1-byte object <61>", Describe(m));
    823 }
    824 
    825 // Tests that Eq(v) can be used to match any type that supports
    826 // comparing with type T, where T is v's type.
    827 TEST(EqTest, IsPolymorphic) {
    828   Matcher<int> m1 = Eq(1);
    829   EXPECT_TRUE(m1.Matches(1));
    830   EXPECT_FALSE(m1.Matches(2));
    831 
    832   Matcher<char> m2 = Eq(1);
    833   EXPECT_TRUE(m2.Matches('\1'));
    834   EXPECT_FALSE(m2.Matches('a'));
    835 }
    836 
    837 // Tests that TypedEq<T>(v) matches values of type T that's equal to v.
    838 TEST(TypedEqTest, ChecksEqualityForGivenType) {
    839   Matcher<char> m1 = TypedEq<char>('a');
    840   EXPECT_TRUE(m1.Matches('a'));
    841   EXPECT_FALSE(m1.Matches('b'));
    842 
    843   Matcher<int> m2 = TypedEq<int>(6);
    844   EXPECT_TRUE(m2.Matches(6));
    845   EXPECT_FALSE(m2.Matches(7));
    846 }
    847 
    848 // Tests that TypedEq(v) describes itself properly.
    849 TEST(TypedEqTest, CanDescribeSelf) {
    850   EXPECT_EQ("is equal to 2", Describe(TypedEq<int>(2)));
    851 }
    852 
    853 // Tests that TypedEq<T>(v) has type Matcher<T>.
    854 
    855 // Type<T>::IsTypeOf(v) compiles iff the type of value v is T, where T
    856 // is a "bare" type (i.e. not in the form of const U or U&).  If v's
    857 // type is not T, the compiler will generate a message about
    858 // "undefined referece".
    859 template <typename T>
    860 struct Type {
    861   static bool IsTypeOf(const T& /* v */) { return true; }
    862 
    863   template <typename T2>
    864   static void IsTypeOf(T2 v);
    865 };
    866 
    867 TEST(TypedEqTest, HasSpecifiedType) {
    868   // Verfies that the type of TypedEq<T>(v) is Matcher<T>.
    869   Type<Matcher<int> >::IsTypeOf(TypedEq<int>(5));
    870   Type<Matcher<double> >::IsTypeOf(TypedEq<double>(5));
    871 }
    872 
    873 // Tests that Ge(v) matches anything >= v.
    874 TEST(GeTest, ImplementsGreaterThanOrEqual) {
    875   Matcher<int> m1 = Ge(0);
    876   EXPECT_TRUE(m1.Matches(1));
    877   EXPECT_TRUE(m1.Matches(0));
    878   EXPECT_FALSE(m1.Matches(-1));
    879 }
    880 
    881 // Tests that Ge(v) describes itself properly.
    882 TEST(GeTest, CanDescribeSelf) {
    883   Matcher<int> m = Ge(5);
    884   EXPECT_EQ("is >= 5", Describe(m));
    885 }
    886 
    887 // Tests that Gt(v) matches anything > v.
    888 TEST(GtTest, ImplementsGreaterThan) {
    889   Matcher<double> m1 = Gt(0);
    890   EXPECT_TRUE(m1.Matches(1.0));
    891   EXPECT_FALSE(m1.Matches(0.0));
    892   EXPECT_FALSE(m1.Matches(-1.0));
    893 }
    894 
    895 // Tests that Gt(v) describes itself properly.
    896 TEST(GtTest, CanDescribeSelf) {
    897   Matcher<int> m = Gt(5);
    898   EXPECT_EQ("is > 5", Describe(m));
    899 }
    900 
    901 // Tests that Le(v) matches anything <= v.
    902 TEST(LeTest, ImplementsLessThanOrEqual) {
    903   Matcher<char> m1 = Le('b');
    904   EXPECT_TRUE(m1.Matches('a'));
    905   EXPECT_TRUE(m1.Matches('b'));
    906   EXPECT_FALSE(m1.Matches('c'));
    907 }
    908 
    909 // Tests that Le(v) describes itself properly.
    910 TEST(LeTest, CanDescribeSelf) {
    911   Matcher<int> m = Le(5);
    912   EXPECT_EQ("is <= 5", Describe(m));
    913 }
    914 
    915 // Tests that Lt(v) matches anything < v.
    916 TEST(LtTest, ImplementsLessThan) {
    917   Matcher<const string&> m1 = Lt("Hello");
    918   EXPECT_TRUE(m1.Matches("Abc"));
    919   EXPECT_FALSE(m1.Matches("Hello"));
    920   EXPECT_FALSE(m1.Matches("Hello, world!"));
    921 }
    922 
    923 // Tests that Lt(v) describes itself properly.
    924 TEST(LtTest, CanDescribeSelf) {
    925   Matcher<int> m = Lt(5);
    926   EXPECT_EQ("is < 5", Describe(m));
    927 }
    928 
    929 // Tests that Ne(v) matches anything != v.
    930 TEST(NeTest, ImplementsNotEqual) {
    931   Matcher<int> m1 = Ne(0);
    932   EXPECT_TRUE(m1.Matches(1));
    933   EXPECT_TRUE(m1.Matches(-1));
    934   EXPECT_FALSE(m1.Matches(0));
    935 }
    936 
    937 // Tests that Ne(v) describes itself properly.
    938 TEST(NeTest, CanDescribeSelf) {
    939   Matcher<int> m = Ne(5);
    940   EXPECT_EQ("isn't equal to 5", Describe(m));
    941 }
    942 
    943 // Tests that IsNull() matches any NULL pointer of any type.
    944 TEST(IsNullTest, MatchesNullPointer) {
    945   Matcher<int*> m1 = IsNull();
    946   int* p1 = NULL;
    947   int n = 0;
    948   EXPECT_TRUE(m1.Matches(p1));
    949   EXPECT_FALSE(m1.Matches(&n));
    950 
    951   Matcher<const char*> m2 = IsNull();
    952   const char* p2 = NULL;
    953   EXPECT_TRUE(m2.Matches(p2));
    954   EXPECT_FALSE(m2.Matches("hi"));
    955 
    956 #if !GTEST_OS_SYMBIAN
    957   // Nokia's Symbian compiler generates:
    958   // gmock-matchers.h: ambiguous access to overloaded function
    959   // gmock-matchers.h: 'testing::Matcher<void *>::Matcher(void *)'
    960   // gmock-matchers.h: 'testing::Matcher<void *>::Matcher(const testing::
    961   //     MatcherInterface<void *> *)'
    962   // gmock-matchers.h:  (point of instantiation: 'testing::
    963   //     gmock_matchers_test::IsNullTest_MatchesNullPointer_Test::TestBody()')
    964   // gmock-matchers.h:   (instantiating: 'testing::PolymorphicMatc
    965   Matcher<void*> m3 = IsNull();
    966   void* p3 = NULL;
    967   EXPECT_TRUE(m3.Matches(p3));
    968   EXPECT_FALSE(m3.Matches(reinterpret_cast<void*>(0xbeef)));
    969 #endif
    970 }
    971 
    972 TEST(IsNullTest, LinkedPtr) {
    973   const Matcher<linked_ptr<int> > m = IsNull();
    974   const linked_ptr<int> null_p;
    975   const linked_ptr<int> non_null_p(new int);
    976 
    977   EXPECT_TRUE(m.Matches(null_p));
    978   EXPECT_FALSE(m.Matches(non_null_p));
    979 }
    980 
    981 TEST(IsNullTest, ReferenceToConstLinkedPtr) {
    982   const Matcher<const linked_ptr<double>&> m = IsNull();
    983   const linked_ptr<double> null_p;
    984   const linked_ptr<double> non_null_p(new double);
    985 
    986   EXPECT_TRUE(m.Matches(null_p));
    987   EXPECT_FALSE(m.Matches(non_null_p));
    988 }
    989 
    990 TEST(IsNullTest, ReferenceToConstScopedPtr) {
    991   const Matcher<const scoped_ptr<double>&> m = IsNull();
    992   const scoped_ptr<double> null_p;
    993   const scoped_ptr<double> non_null_p(new double);
    994 
    995   EXPECT_TRUE(m.Matches(null_p));
    996   EXPECT_FALSE(m.Matches(non_null_p));
    997 }
    998 
    999 // Tests that IsNull() describes itself properly.
   1000 TEST(IsNullTest, CanDescribeSelf) {
   1001   Matcher<int*> m = IsNull();
   1002   EXPECT_EQ("is NULL", Describe(m));
   1003   EXPECT_EQ("isn't NULL", DescribeNegation(m));
   1004 }
   1005 
   1006 // Tests that NotNull() matches any non-NULL pointer of any type.
   1007 TEST(NotNullTest, MatchesNonNullPointer) {
   1008   Matcher<int*> m1 = NotNull();
   1009   int* p1 = NULL;
   1010   int n = 0;
   1011   EXPECT_FALSE(m1.Matches(p1));
   1012   EXPECT_TRUE(m1.Matches(&n));
   1013 
   1014   Matcher<const char*> m2 = NotNull();
   1015   const char* p2 = NULL;
   1016   EXPECT_FALSE(m2.Matches(p2));
   1017   EXPECT_TRUE(m2.Matches("hi"));
   1018 }
   1019 
   1020 TEST(NotNullTest, LinkedPtr) {
   1021   const Matcher<linked_ptr<int> > m = NotNull();
   1022   const linked_ptr<int> null_p;
   1023   const linked_ptr<int> non_null_p(new int);
   1024 
   1025   EXPECT_FALSE(m.Matches(null_p));
   1026   EXPECT_TRUE(m.Matches(non_null_p));
   1027 }
   1028 
   1029 TEST(NotNullTest, ReferenceToConstLinkedPtr) {
   1030   const Matcher<const linked_ptr<double>&> m = NotNull();
   1031   const linked_ptr<double> null_p;
   1032   const linked_ptr<double> non_null_p(new double);
   1033 
   1034   EXPECT_FALSE(m.Matches(null_p));
   1035   EXPECT_TRUE(m.Matches(non_null_p));
   1036 }
   1037 
   1038 TEST(NotNullTest, ReferenceToConstScopedPtr) {
   1039   const Matcher<const scoped_ptr<double>&> m = NotNull();
   1040   const scoped_ptr<double> null_p;
   1041   const scoped_ptr<double> non_null_p(new double);
   1042 
   1043   EXPECT_FALSE(m.Matches(null_p));
   1044   EXPECT_TRUE(m.Matches(non_null_p));
   1045 }
   1046 
   1047 // Tests that NotNull() describes itself properly.
   1048 TEST(NotNullTest, CanDescribeSelf) {
   1049   Matcher<int*> m = NotNull();
   1050   EXPECT_EQ("isn't NULL", Describe(m));
   1051 }
   1052 
   1053 // Tests that Ref(variable) matches an argument that references
   1054 // 'variable'.
   1055 TEST(RefTest, MatchesSameVariable) {
   1056   int a = 0;
   1057   int b = 0;
   1058   Matcher<int&> m = Ref(a);
   1059   EXPECT_TRUE(m.Matches(a));
   1060   EXPECT_FALSE(m.Matches(b));
   1061 }
   1062 
   1063 // Tests that Ref(variable) describes itself properly.
   1064 TEST(RefTest, CanDescribeSelf) {
   1065   int n = 5;
   1066   Matcher<int&> m = Ref(n);
   1067   stringstream ss;
   1068   ss << "references the variable @" << &n << " 5";
   1069   EXPECT_EQ(string(ss.str()), Describe(m));
   1070 }
   1071 
   1072 // Test that Ref(non_const_varialbe) can be used as a matcher for a
   1073 // const reference.
   1074 TEST(RefTest, CanBeUsedAsMatcherForConstReference) {
   1075   int a = 0;
   1076   int b = 0;
   1077   Matcher<const int&> m = Ref(a);
   1078   EXPECT_TRUE(m.Matches(a));
   1079   EXPECT_FALSE(m.Matches(b));
   1080 }
   1081 
   1082 // Tests that Ref(variable) is covariant, i.e. Ref(derived) can be
   1083 // used wherever Ref(base) can be used (Ref(derived) is a sub-type
   1084 // of Ref(base), but not vice versa.
   1085 
   1086 TEST(RefTest, IsCovariant) {
   1087   Base base, base2;
   1088   Derived derived;
   1089   Matcher<const Base&> m1 = Ref(base);
   1090   EXPECT_TRUE(m1.Matches(base));
   1091   EXPECT_FALSE(m1.Matches(base2));
   1092   EXPECT_FALSE(m1.Matches(derived));
   1093 
   1094   m1 = Ref(derived);
   1095   EXPECT_TRUE(m1.Matches(derived));
   1096   EXPECT_FALSE(m1.Matches(base));
   1097   EXPECT_FALSE(m1.Matches(base2));
   1098 }
   1099 
   1100 TEST(RefTest, ExplainsResult) {
   1101   int n = 0;
   1102   EXPECT_THAT(Explain(Matcher<const int&>(Ref(n)), n),
   1103               StartsWith("which is located @"));
   1104 
   1105   int m = 0;
   1106   EXPECT_THAT(Explain(Matcher<const int&>(Ref(n)), m),
   1107               StartsWith("which is located @"));
   1108 }
   1109 
   1110 // Tests string comparison matchers.
   1111 
   1112 TEST(StrEqTest, MatchesEqualString) {
   1113   Matcher<const char*> m = StrEq(string("Hello"));
   1114   EXPECT_TRUE(m.Matches("Hello"));
   1115   EXPECT_FALSE(m.Matches("hello"));
   1116   EXPECT_FALSE(m.Matches(NULL));
   1117 
   1118   Matcher<const string&> m2 = StrEq("Hello");
   1119   EXPECT_TRUE(m2.Matches("Hello"));
   1120   EXPECT_FALSE(m2.Matches("Hi"));
   1121 }
   1122 
   1123 TEST(StrEqTest, CanDescribeSelf) {
   1124   Matcher<string> m = StrEq("Hi-\'\"?\\\a\b\f\n\r\t\v\xD3");
   1125   EXPECT_EQ("is equal to \"Hi-\'\\\"?\\\\\\a\\b\\f\\n\\r\\t\\v\\xD3\"",
   1126       Describe(m));
   1127 
   1128   string str("01204500800");
   1129   str[3] = '\0';
   1130   Matcher<string> m2 = StrEq(str);
   1131   EXPECT_EQ("is equal to \"012\\04500800\"", Describe(m2));
   1132   str[0] = str[6] = str[7] = str[9] = str[10] = '\0';
   1133   Matcher<string> m3 = StrEq(str);
   1134   EXPECT_EQ("is equal to \"\\012\\045\\0\\08\\0\\0\"", Describe(m3));
   1135 }
   1136 
   1137 TEST(StrNeTest, MatchesUnequalString) {
   1138   Matcher<const char*> m = StrNe("Hello");
   1139   EXPECT_TRUE(m.Matches(""));
   1140   EXPECT_TRUE(m.Matches(NULL));
   1141   EXPECT_FALSE(m.Matches("Hello"));
   1142 
   1143   Matcher<string> m2 = StrNe(string("Hello"));
   1144   EXPECT_TRUE(m2.Matches("hello"));
   1145   EXPECT_FALSE(m2.Matches("Hello"));
   1146 }
   1147 
   1148 TEST(StrNeTest, CanDescribeSelf) {
   1149   Matcher<const char*> m = StrNe("Hi");
   1150   EXPECT_EQ("isn't equal to \"Hi\"", Describe(m));
   1151 }
   1152 
   1153 TEST(StrCaseEqTest, MatchesEqualStringIgnoringCase) {
   1154   Matcher<const char*> m = StrCaseEq(string("Hello"));
   1155   EXPECT_TRUE(m.Matches("Hello"));
   1156   EXPECT_TRUE(m.Matches("hello"));
   1157   EXPECT_FALSE(m.Matches("Hi"));
   1158   EXPECT_FALSE(m.Matches(NULL));
   1159 
   1160   Matcher<const string&> m2 = StrCaseEq("Hello");
   1161   EXPECT_TRUE(m2.Matches("hello"));
   1162   EXPECT_FALSE(m2.Matches("Hi"));
   1163 }
   1164 
   1165 TEST(StrCaseEqTest, MatchesEqualStringWith0IgnoringCase) {
   1166   string str1("oabocdooeoo");
   1167   string str2("OABOCDOOEOO");
   1168   Matcher<const string&> m0 = StrCaseEq(str1);
   1169   EXPECT_FALSE(m0.Matches(str2 + string(1, '\0')));
   1170 
   1171   str1[3] = str2[3] = '\0';
   1172   Matcher<const string&> m1 = StrCaseEq(str1);
   1173   EXPECT_TRUE(m1.Matches(str2));
   1174 
   1175   str1[0] = str1[6] = str1[7] = str1[10] = '\0';
   1176   str2[0] = str2[6] = str2[7] = str2[10] = '\0';
   1177   Matcher<const string&> m2 = StrCaseEq(str1);
   1178   str1[9] = str2[9] = '\0';
   1179   EXPECT_FALSE(m2.Matches(str2));
   1180 
   1181   Matcher<const string&> m3 = StrCaseEq(str1);
   1182   EXPECT_TRUE(m3.Matches(str2));
   1183 
   1184   EXPECT_FALSE(m3.Matches(str2 + "x"));
   1185   str2.append(1, '\0');
   1186   EXPECT_FALSE(m3.Matches(str2));
   1187   EXPECT_FALSE(m3.Matches(string(str2, 0, 9)));
   1188 }
   1189 
   1190 TEST(StrCaseEqTest, CanDescribeSelf) {
   1191   Matcher<string> m = StrCaseEq("Hi");
   1192   EXPECT_EQ("is equal to (ignoring case) \"Hi\"", Describe(m));
   1193 }
   1194 
   1195 TEST(StrCaseNeTest, MatchesUnequalStringIgnoringCase) {
   1196   Matcher<const char*> m = StrCaseNe("Hello");
   1197   EXPECT_TRUE(m.Matches("Hi"));
   1198   EXPECT_TRUE(m.Matches(NULL));
   1199   EXPECT_FALSE(m.Matches("Hello"));
   1200   EXPECT_FALSE(m.Matches("hello"));
   1201 
   1202   Matcher<string> m2 = StrCaseNe(string("Hello"));
   1203   EXPECT_TRUE(m2.Matches(""));
   1204   EXPECT_FALSE(m2.Matches("Hello"));
   1205 }
   1206 
   1207 TEST(StrCaseNeTest, CanDescribeSelf) {
   1208   Matcher<const char*> m = StrCaseNe("Hi");
   1209   EXPECT_EQ("isn't equal to (ignoring case) \"Hi\"", Describe(m));
   1210 }
   1211 
   1212 // Tests that HasSubstr() works for matching string-typed values.
   1213 TEST(HasSubstrTest, WorksForStringClasses) {
   1214   const Matcher<string> m1 = HasSubstr("foo");
   1215   EXPECT_TRUE(m1.Matches(string("I love food.")));
   1216   EXPECT_FALSE(m1.Matches(string("tofo")));
   1217 
   1218   const Matcher<const std::string&> m2 = HasSubstr("foo");
   1219   EXPECT_TRUE(m2.Matches(std::string("I love food.")));
   1220   EXPECT_FALSE(m2.Matches(std::string("tofo")));
   1221 }
   1222 
   1223 // Tests that HasSubstr() works for matching C-string-typed values.
   1224 TEST(HasSubstrTest, WorksForCStrings) {
   1225   const Matcher<char*> m1 = HasSubstr("foo");
   1226   EXPECT_TRUE(m1.Matches(const_cast<char*>("I love food.")));
   1227   EXPECT_FALSE(m1.Matches(const_cast<char*>("tofo")));
   1228   EXPECT_FALSE(m1.Matches(NULL));
   1229 
   1230   const Matcher<const char*> m2 = HasSubstr("foo");
   1231   EXPECT_TRUE(m2.Matches("I love food."));
   1232   EXPECT_FALSE(m2.Matches("tofo"));
   1233   EXPECT_FALSE(m2.Matches(NULL));
   1234 }
   1235 
   1236 // Tests that HasSubstr(s) describes itself properly.
   1237 TEST(HasSubstrTest, CanDescribeSelf) {
   1238   Matcher<string> m = HasSubstr("foo\n\"");
   1239   EXPECT_EQ("has substring \"foo\\n\\\"\"", Describe(m));
   1240 }
   1241 
   1242 TEST(KeyTest, CanDescribeSelf) {
   1243   Matcher<const pair<std::string, int>&> m = Key("foo");
   1244   EXPECT_EQ("has a key that is equal to \"foo\"", Describe(m));
   1245   EXPECT_EQ("doesn't have a key that is equal to \"foo\"", DescribeNegation(m));
   1246 }
   1247 
   1248 TEST(KeyTest, ExplainsResult) {
   1249   Matcher<pair<int, bool> > m = Key(GreaterThan(10));
   1250   EXPECT_EQ("whose first field is a value which is 5 less than 10",
   1251             Explain(m, make_pair(5, true)));
   1252   EXPECT_EQ("whose first field is a value which is 5 more than 10",
   1253             Explain(m, make_pair(15, true)));
   1254 }
   1255 
   1256 TEST(KeyTest, MatchesCorrectly) {
   1257   pair<int, std::string> p(25, "foo");
   1258   EXPECT_THAT(p, Key(25));
   1259   EXPECT_THAT(p, Not(Key(42)));
   1260   EXPECT_THAT(p, Key(Ge(20)));
   1261   EXPECT_THAT(p, Not(Key(Lt(25))));
   1262 }
   1263 
   1264 TEST(KeyTest, SafelyCastsInnerMatcher) {
   1265   Matcher<int> is_positive = Gt(0);
   1266   Matcher<int> is_negative = Lt(0);
   1267   pair<char, bool> p('a', true);
   1268   EXPECT_THAT(p, Key(is_positive));
   1269   EXPECT_THAT(p, Not(Key(is_negative)));
   1270 }
   1271 
   1272 TEST(KeyTest, InsideContainsUsingMap) {
   1273   map<int, char> container;
   1274   container.insert(make_pair(1, 'a'));
   1275   container.insert(make_pair(2, 'b'));
   1276   container.insert(make_pair(4, 'c'));
   1277   EXPECT_THAT(container, Contains(Key(1)));
   1278   EXPECT_THAT(container, Not(Contains(Key(3))));
   1279 }
   1280 
   1281 TEST(KeyTest, InsideContainsUsingMultimap) {
   1282   multimap<int, char> container;
   1283   container.insert(make_pair(1, 'a'));
   1284   container.insert(make_pair(2, 'b'));
   1285   container.insert(make_pair(4, 'c'));
   1286 
   1287   EXPECT_THAT(container, Not(Contains(Key(25))));
   1288   container.insert(make_pair(25, 'd'));
   1289   EXPECT_THAT(container, Contains(Key(25)));
   1290   container.insert(make_pair(25, 'e'));
   1291   EXPECT_THAT(container, Contains(Key(25)));
   1292 
   1293   EXPECT_THAT(container, Contains(Key(1)));
   1294   EXPECT_THAT(container, Not(Contains(Key(3))));
   1295 }
   1296 
   1297 TEST(PairTest, Typing) {
   1298   // Test verifies the following type conversions can be compiled.
   1299   Matcher<const pair<const char*, int>&> m1 = Pair("foo", 42);
   1300   Matcher<const pair<const char*, int> > m2 = Pair("foo", 42);
   1301   Matcher<pair<const char*, int> > m3 = Pair("foo", 42);
   1302 
   1303   Matcher<pair<int, const std::string> > m4 = Pair(25, "42");
   1304   Matcher<pair<const std::string, int> > m5 = Pair("25", 42);
   1305 }
   1306 
   1307 TEST(PairTest, CanDescribeSelf) {
   1308   Matcher<const pair<std::string, int>&> m1 = Pair("foo", 42);
   1309   EXPECT_EQ("has a first field that is equal to \"foo\""
   1310             ", and has a second field that is equal to 42",
   1311             Describe(m1));
   1312   EXPECT_EQ("has a first field that isn't equal to \"foo\""
   1313             ", or has a second field that isn't equal to 42",
   1314             DescribeNegation(m1));
   1315   // Double and triple negation (1 or 2 times not and description of negation).
   1316   Matcher<const pair<int, int>&> m2 = Not(Pair(Not(13), 42));
   1317   EXPECT_EQ("has a first field that isn't equal to 13"
   1318             ", and has a second field that is equal to 42",
   1319             DescribeNegation(m2));
   1320 }
   1321 
   1322 TEST(PairTest, CanExplainMatchResultTo) {
   1323   // If neither field matches, Pair() should explain about the first
   1324   // field.
   1325   const Matcher<pair<int, int> > m = Pair(GreaterThan(0), GreaterThan(0));
   1326   EXPECT_EQ("whose first field does not match, which is 1 less than 0",
   1327             Explain(m, make_pair(-1, -2)));
   1328 
   1329   // If the first field matches but the second doesn't, Pair() should
   1330   // explain about the second field.
   1331   EXPECT_EQ("whose second field does not match, which is 2 less than 0",
   1332             Explain(m, make_pair(1, -2)));
   1333 
   1334   // If the first field doesn't match but the second does, Pair()
   1335   // should explain about the first field.
   1336   EXPECT_EQ("whose first field does not match, which is 1 less than 0",
   1337             Explain(m, make_pair(-1, 2)));
   1338 
   1339   // If both fields match, Pair() should explain about them both.
   1340   EXPECT_EQ("whose both fields match, where the first field is a value "
   1341             "which is 1 more than 0, and the second field is a value "
   1342             "which is 2 more than 0",
   1343             Explain(m, make_pair(1, 2)));
   1344 
   1345   // If only the first match has an explanation, only this explanation should
   1346   // be printed.
   1347   const Matcher<pair<int, int> > explain_first = Pair(GreaterThan(0), 0);
   1348   EXPECT_EQ("whose both fields match, where the first field is a value "
   1349             "which is 1 more than 0",
   1350             Explain(explain_first, make_pair(1, 0)));
   1351 
   1352   // If only the second match has an explanation, only this explanation should
   1353   // be printed.
   1354   const Matcher<pair<int, int> > explain_second = Pair(0, GreaterThan(0));
   1355   EXPECT_EQ("whose both fields match, where the second field is a value "
   1356             "which is 1 more than 0",
   1357             Explain(explain_second, make_pair(0, 1)));
   1358 }
   1359 
   1360 TEST(PairTest, MatchesCorrectly) {
   1361   pair<int, std::string> p(25, "foo");
   1362 
   1363   // Both fields match.
   1364   EXPECT_THAT(p, Pair(25, "foo"));
   1365   EXPECT_THAT(p, Pair(Ge(20), HasSubstr("o")));
   1366 
   1367   // 'first' doesnt' match, but 'second' matches.
   1368   EXPECT_THAT(p, Not(Pair(42, "foo")));
   1369   EXPECT_THAT(p, Not(Pair(Lt(25), "foo")));
   1370 
   1371   // 'first' matches, but 'second' doesn't match.
   1372   EXPECT_THAT(p, Not(Pair(25, "bar")));
   1373   EXPECT_THAT(p, Not(Pair(25, Not("foo"))));
   1374 
   1375   // Neither field matches.
   1376   EXPECT_THAT(p, Not(Pair(13, "bar")));
   1377   EXPECT_THAT(p, Not(Pair(Lt(13), HasSubstr("a"))));
   1378 }
   1379 
   1380 TEST(PairTest, SafelyCastsInnerMatchers) {
   1381   Matcher<int> is_positive = Gt(0);
   1382   Matcher<int> is_negative = Lt(0);
   1383   pair<char, bool> p('a', true);
   1384   EXPECT_THAT(p, Pair(is_positive, _));
   1385   EXPECT_THAT(p, Not(Pair(is_negative, _)));
   1386   EXPECT_THAT(p, Pair(_, is_positive));
   1387   EXPECT_THAT(p, Not(Pair(_, is_negative)));
   1388 }
   1389 
   1390 TEST(PairTest, InsideContainsUsingMap) {
   1391   map<int, char> container;
   1392   container.insert(make_pair(1, 'a'));
   1393   container.insert(make_pair(2, 'b'));
   1394   container.insert(make_pair(4, 'c'));
   1395   EXPECT_THAT(container, Contains(Pair(1, 'a')));
   1396   EXPECT_THAT(container, Contains(Pair(1, _)));
   1397   EXPECT_THAT(container, Contains(Pair(_, 'a')));
   1398   EXPECT_THAT(container, Not(Contains(Pair(3, _))));
   1399 }
   1400 
   1401 // Tests StartsWith(s).
   1402 
   1403 TEST(StartsWithTest, MatchesStringWithGivenPrefix) {
   1404   const Matcher<const char*> m1 = StartsWith(string(""));
   1405   EXPECT_TRUE(m1.Matches("Hi"));
   1406   EXPECT_TRUE(m1.Matches(""));
   1407   EXPECT_FALSE(m1.Matches(NULL));
   1408 
   1409   const Matcher<const string&> m2 = StartsWith("Hi");
   1410   EXPECT_TRUE(m2.Matches("Hi"));
   1411   EXPECT_TRUE(m2.Matches("Hi Hi!"));
   1412   EXPECT_TRUE(m2.Matches("High"));
   1413   EXPECT_FALSE(m2.Matches("H"));
   1414   EXPECT_FALSE(m2.Matches(" Hi"));
   1415 }
   1416 
   1417 TEST(StartsWithTest, CanDescribeSelf) {
   1418   Matcher<const std::string> m = StartsWith("Hi");
   1419   EXPECT_EQ("starts with \"Hi\"", Describe(m));
   1420 }
   1421 
   1422 // Tests EndsWith(s).
   1423 
   1424 TEST(EndsWithTest, MatchesStringWithGivenSuffix) {
   1425   const Matcher<const char*> m1 = EndsWith("");
   1426   EXPECT_TRUE(m1.Matches("Hi"));
   1427   EXPECT_TRUE(m1.Matches(""));
   1428   EXPECT_FALSE(m1.Matches(NULL));
   1429 
   1430   const Matcher<const string&> m2 = EndsWith(string("Hi"));
   1431   EXPECT_TRUE(m2.Matches("Hi"));
   1432   EXPECT_TRUE(m2.Matches("Wow Hi Hi"));
   1433   EXPECT_TRUE(m2.Matches("Super Hi"));
   1434   EXPECT_FALSE(m2.Matches("i"));
   1435   EXPECT_FALSE(m2.Matches("Hi "));
   1436 }
   1437 
   1438 TEST(EndsWithTest, CanDescribeSelf) {
   1439   Matcher<const std::string> m = EndsWith("Hi");
   1440   EXPECT_EQ("ends with \"Hi\"", Describe(m));
   1441 }
   1442 
   1443 // Tests MatchesRegex().
   1444 
   1445 TEST(MatchesRegexTest, MatchesStringMatchingGivenRegex) {
   1446   const Matcher<const char*> m1 = MatchesRegex("a.*z");
   1447   EXPECT_TRUE(m1.Matches("az"));
   1448   EXPECT_TRUE(m1.Matches("abcz"));
   1449   EXPECT_FALSE(m1.Matches(NULL));
   1450 
   1451   const Matcher<const string&> m2 = MatchesRegex(new RE("a.*z"));
   1452   EXPECT_TRUE(m2.Matches("azbz"));
   1453   EXPECT_FALSE(m2.Matches("az1"));
   1454   EXPECT_FALSE(m2.Matches("1az"));
   1455 }
   1456 
   1457 TEST(MatchesRegexTest, CanDescribeSelf) {
   1458   Matcher<const std::string> m1 = MatchesRegex(string("Hi.*"));
   1459   EXPECT_EQ("matches regular expression \"Hi.*\"", Describe(m1));
   1460 
   1461   Matcher<const char*> m2 = MatchesRegex(new RE("a.*"));
   1462   EXPECT_EQ("matches regular expression \"a.*\"", Describe(m2));
   1463 }
   1464 
   1465 // Tests ContainsRegex().
   1466 
   1467 TEST(ContainsRegexTest, MatchesStringContainingGivenRegex) {
   1468   const Matcher<const char*> m1 = ContainsRegex(string("a.*z"));
   1469   EXPECT_TRUE(m1.Matches("az"));
   1470   EXPECT_TRUE(m1.Matches("0abcz1"));
   1471   EXPECT_FALSE(m1.Matches(NULL));
   1472 
   1473   const Matcher<const string&> m2 = ContainsRegex(new RE("a.*z"));
   1474   EXPECT_TRUE(m2.Matches("azbz"));
   1475   EXPECT_TRUE(m2.Matches("az1"));
   1476   EXPECT_FALSE(m2.Matches("1a"));
   1477 }
   1478 
   1479 TEST(ContainsRegexTest, CanDescribeSelf) {
   1480   Matcher<const std::string> m1 = ContainsRegex("Hi.*");
   1481   EXPECT_EQ("contains regular expression \"Hi.*\"", Describe(m1));
   1482 
   1483   Matcher<const char*> m2 = ContainsRegex(new RE("a.*"));
   1484   EXPECT_EQ("contains regular expression \"a.*\"", Describe(m2));
   1485 }
   1486 
   1487 // Tests for wide strings.
   1488 #if GTEST_HAS_STD_WSTRING
   1489 TEST(StdWideStrEqTest, MatchesEqual) {
   1490   Matcher<const wchar_t*> m = StrEq(::std::wstring(L"Hello"));
   1491   EXPECT_TRUE(m.Matches(L"Hello"));
   1492   EXPECT_FALSE(m.Matches(L"hello"));
   1493   EXPECT_FALSE(m.Matches(NULL));
   1494 
   1495   Matcher<const ::std::wstring&> m2 = StrEq(L"Hello");
   1496   EXPECT_TRUE(m2.Matches(L"Hello"));
   1497   EXPECT_FALSE(m2.Matches(L"Hi"));
   1498 
   1499   Matcher<const ::std::wstring&> m3 = StrEq(L"\xD3\x576\x8D3\xC74D");
   1500   EXPECT_TRUE(m3.Matches(L"\xD3\x576\x8D3\xC74D"));
   1501   EXPECT_FALSE(m3.Matches(L"\xD3\x576\x8D3\xC74E"));
   1502 
   1503   ::std::wstring str(L"01204500800");
   1504   str[3] = L'\0';
   1505   Matcher<const ::std::wstring&> m4 = StrEq(str);
   1506   EXPECT_TRUE(m4.Matches(str));
   1507   str[0] = str[6] = str[7] = str[9] = str[10] = L'\0';
   1508   Matcher<const ::std::wstring&> m5 = StrEq(str);
   1509   EXPECT_TRUE(m5.Matches(str));
   1510 }
   1511 
   1512 TEST(StdWideStrEqTest, CanDescribeSelf) {
   1513   Matcher< ::std::wstring> m = StrEq(L"Hi-\'\"?\\\a\b\f\n\r\t\v");
   1514   EXPECT_EQ("is equal to L\"Hi-\'\\\"?\\\\\\a\\b\\f\\n\\r\\t\\v\"",
   1515     Describe(m));
   1516 
   1517   Matcher< ::std::wstring> m2 = StrEq(L"\xD3\x576\x8D3\xC74D");
   1518   EXPECT_EQ("is equal to L\"\\xD3\\x576\\x8D3\\xC74D\"",
   1519     Describe(m2));
   1520 
   1521   ::std::wstring str(L"01204500800");
   1522   str[3] = L'\0';
   1523   Matcher<const ::std::wstring&> m4 = StrEq(str);
   1524   EXPECT_EQ("is equal to L\"012\\04500800\"", Describe(m4));
   1525   str[0] = str[6] = str[7] = str[9] = str[10] = L'\0';
   1526   Matcher<const ::std::wstring&> m5 = StrEq(str);
   1527   EXPECT_EQ("is equal to L\"\\012\\045\\0\\08\\0\\0\"", Describe(m5));
   1528 }
   1529 
   1530 TEST(StdWideStrNeTest, MatchesUnequalString) {
   1531   Matcher<const wchar_t*> m = StrNe(L"Hello");
   1532   EXPECT_TRUE(m.Matches(L""));
   1533   EXPECT_TRUE(m.Matches(NULL));
   1534   EXPECT_FALSE(m.Matches(L"Hello"));
   1535 
   1536   Matcher< ::std::wstring> m2 = StrNe(::std::wstring(L"Hello"));
   1537   EXPECT_TRUE(m2.Matches(L"hello"));
   1538   EXPECT_FALSE(m2.Matches(L"Hello"));
   1539 }
   1540 
   1541 TEST(StdWideStrNeTest, CanDescribeSelf) {
   1542   Matcher<const wchar_t*> m = StrNe(L"Hi");
   1543   EXPECT_EQ("isn't equal to L\"Hi\"", Describe(m));
   1544 }
   1545 
   1546 TEST(StdWideStrCaseEqTest, MatchesEqualStringIgnoringCase) {
   1547   Matcher<const wchar_t*> m = StrCaseEq(::std::wstring(L"Hello"));
   1548   EXPECT_TRUE(m.Matches(L"Hello"));
   1549   EXPECT_TRUE(m.Matches(L"hello"));
   1550   EXPECT_FALSE(m.Matches(L"Hi"));
   1551   EXPECT_FALSE(m.Matches(NULL));
   1552 
   1553   Matcher<const ::std::wstring&> m2 = StrCaseEq(L"Hello");
   1554   EXPECT_TRUE(m2.Matches(L"hello"));
   1555   EXPECT_FALSE(m2.Matches(L"Hi"));
   1556 }
   1557 
   1558 TEST(StdWideStrCaseEqTest, MatchesEqualStringWith0IgnoringCase) {
   1559   ::std::wstring str1(L"oabocdooeoo");
   1560   ::std::wstring str2(L"OABOCDOOEOO");
   1561   Matcher<const ::std::wstring&> m0 = StrCaseEq(str1);
   1562   EXPECT_FALSE(m0.Matches(str2 + ::std::wstring(1, L'\0')));
   1563 
   1564   str1[3] = str2[3] = L'\0';
   1565   Matcher<const ::std::wstring&> m1 = StrCaseEq(str1);
   1566   EXPECT_TRUE(m1.Matches(str2));
   1567 
   1568   str1[0] = str1[6] = str1[7] = str1[10] = L'\0';
   1569   str2[0] = str2[6] = str2[7] = str2[10] = L'\0';
   1570   Matcher<const ::std::wstring&> m2 = StrCaseEq(str1);
   1571   str1[9] = str2[9] = L'\0';
   1572   EXPECT_FALSE(m2.Matches(str2));
   1573 
   1574   Matcher<const ::std::wstring&> m3 = StrCaseEq(str1);
   1575   EXPECT_TRUE(m3.Matches(str2));
   1576 
   1577   EXPECT_FALSE(m3.Matches(str2 + L"x"));
   1578   str2.append(1, L'\0');
   1579   EXPECT_FALSE(m3.Matches(str2));
   1580   EXPECT_FALSE(m3.Matches(::std::wstring(str2, 0, 9)));
   1581 }
   1582 
   1583 TEST(StdWideStrCaseEqTest, CanDescribeSelf) {
   1584   Matcher< ::std::wstring> m = StrCaseEq(L"Hi");
   1585   EXPECT_EQ("is equal to (ignoring case) L\"Hi\"", Describe(m));
   1586 }
   1587 
   1588 TEST(StdWideStrCaseNeTest, MatchesUnequalStringIgnoringCase) {
   1589   Matcher<const wchar_t*> m = StrCaseNe(L"Hello");
   1590   EXPECT_TRUE(m.Matches(L"Hi"));
   1591   EXPECT_TRUE(m.Matches(NULL));
   1592   EXPECT_FALSE(m.Matches(L"Hello"));
   1593   EXPECT_FALSE(m.Matches(L"hello"));
   1594 
   1595   Matcher< ::std::wstring> m2 = StrCaseNe(::std::wstring(L"Hello"));
   1596   EXPECT_TRUE(m2.Matches(L""));
   1597   EXPECT_FALSE(m2.Matches(L"Hello"));
   1598 }
   1599 
   1600 TEST(StdWideStrCaseNeTest, CanDescribeSelf) {
   1601   Matcher<const wchar_t*> m = StrCaseNe(L"Hi");
   1602   EXPECT_EQ("isn't equal to (ignoring case) L\"Hi\"", Describe(m));
   1603 }
   1604 
   1605 // Tests that HasSubstr() works for matching wstring-typed values.
   1606 TEST(StdWideHasSubstrTest, WorksForStringClasses) {
   1607   const Matcher< ::std::wstring> m1 = HasSubstr(L"foo");
   1608   EXPECT_TRUE(m1.Matches(::std::wstring(L"I love food.")));
   1609   EXPECT_FALSE(m1.Matches(::std::wstring(L"tofo")));
   1610 
   1611   const Matcher<const ::std::wstring&> m2 = HasSubstr(L"foo");
   1612   EXPECT_TRUE(m2.Matches(::std::wstring(L"I love food.")));
   1613   EXPECT_FALSE(m2.Matches(::std::wstring(L"tofo")));
   1614 }
   1615 
   1616 // Tests that HasSubstr() works for matching C-wide-string-typed values.
   1617 TEST(StdWideHasSubstrTest, WorksForCStrings) {
   1618   const Matcher<wchar_t*> m1 = HasSubstr(L"foo");
   1619   EXPECT_TRUE(m1.Matches(const_cast<wchar_t*>(L"I love food.")));
   1620   EXPECT_FALSE(m1.Matches(const_cast<wchar_t*>(L"tofo")));
   1621   EXPECT_FALSE(m1.Matches(NULL));
   1622 
   1623   const Matcher<const wchar_t*> m2 = HasSubstr(L"foo");
   1624   EXPECT_TRUE(m2.Matches(L"I love food."));
   1625   EXPECT_FALSE(m2.Matches(L"tofo"));
   1626   EXPECT_FALSE(m2.Matches(NULL));
   1627 }
   1628 
   1629 // Tests that HasSubstr(s) describes itself properly.
   1630 TEST(StdWideHasSubstrTest, CanDescribeSelf) {
   1631   Matcher< ::std::wstring> m = HasSubstr(L"foo\n\"");
   1632   EXPECT_EQ("has substring L\"foo\\n\\\"\"", Describe(m));
   1633 }
   1634 
   1635 // Tests StartsWith(s).
   1636 
   1637 TEST(StdWideStartsWithTest, MatchesStringWithGivenPrefix) {
   1638   const Matcher<const wchar_t*> m1 = StartsWith(::std::wstring(L""));
   1639   EXPECT_TRUE(m1.Matches(L"Hi"));
   1640   EXPECT_TRUE(m1.Matches(L""));
   1641   EXPECT_FALSE(m1.Matches(NULL));
   1642 
   1643   const Matcher<const ::std::wstring&> m2 = StartsWith(L"Hi");
   1644   EXPECT_TRUE(m2.Matches(L"Hi"));
   1645   EXPECT_TRUE(m2.Matches(L"Hi Hi!"));
   1646   EXPECT_TRUE(m2.Matches(L"High"));
   1647   EXPECT_FALSE(m2.Matches(L"H"));
   1648   EXPECT_FALSE(m2.Matches(L" Hi"));
   1649 }
   1650 
   1651 TEST(StdWideStartsWithTest, CanDescribeSelf) {
   1652   Matcher<const ::std::wstring> m = StartsWith(L"Hi");
   1653   EXPECT_EQ("starts with L\"Hi\"", Describe(m));
   1654 }
   1655 
   1656 // Tests EndsWith(s).
   1657 
   1658 TEST(StdWideEndsWithTest, MatchesStringWithGivenSuffix) {
   1659   const Matcher<const wchar_t*> m1 = EndsWith(L"");
   1660   EXPECT_TRUE(m1.Matches(L"Hi"));
   1661   EXPECT_TRUE(m1.Matches(L""));
   1662   EXPECT_FALSE(m1.Matches(NULL));
   1663 
   1664   const Matcher<const ::std::wstring&> m2 = EndsWith(::std::wstring(L"Hi"));
   1665   EXPECT_TRUE(m2.Matches(L"Hi"));
   1666   EXPECT_TRUE(m2.Matches(L"Wow Hi Hi"));
   1667   EXPECT_TRUE(m2.Matches(L"Super Hi"));
   1668   EXPECT_FALSE(m2.Matches(L"i"));
   1669   EXPECT_FALSE(m2.Matches(L"Hi "));
   1670 }
   1671 
   1672 TEST(StdWideEndsWithTest, CanDescribeSelf) {
   1673   Matcher<const ::std::wstring> m = EndsWith(L"Hi");
   1674   EXPECT_EQ("ends with L\"Hi\"", Describe(m));
   1675 }
   1676 
   1677 #endif  // GTEST_HAS_STD_WSTRING
   1678 
   1679 #if GTEST_HAS_GLOBAL_WSTRING
   1680 TEST(GlobalWideStrEqTest, MatchesEqual) {
   1681   Matcher<const wchar_t*> m = StrEq(::wstring(L"Hello"));
   1682   EXPECT_TRUE(m.Matches(L"Hello"));
   1683   EXPECT_FALSE(m.Matches(L"hello"));
   1684   EXPECT_FALSE(m.Matches(NULL));
   1685 
   1686   Matcher<const ::wstring&> m2 = StrEq(L"Hello");
   1687   EXPECT_TRUE(m2.Matches(L"Hello"));
   1688   EXPECT_FALSE(m2.Matches(L"Hi"));
   1689 
   1690   Matcher<const ::wstring&> m3 = StrEq(L"\xD3\x576\x8D3\xC74D");
   1691   EXPECT_TRUE(m3.Matches(L"\xD3\x576\x8D3\xC74D"));
   1692   EXPECT_FALSE(m3.Matches(L"\xD3\x576\x8D3\xC74E"));
   1693 
   1694   ::wstring str(L"01204500800");
   1695   str[3] = L'\0';
   1696   Matcher<const ::wstring&> m4 = StrEq(str);
   1697   EXPECT_TRUE(m4.Matches(str));
   1698   str[0] = str[6] = str[7] = str[9] = str[10] = L'\0';
   1699   Matcher<const ::wstring&> m5 = StrEq(str);
   1700   EXPECT_TRUE(m5.Matches(str));
   1701 }
   1702 
   1703 TEST(GlobalWideStrEqTest, CanDescribeSelf) {
   1704   Matcher< ::wstring> m = StrEq(L"Hi-\'\"?\\\a\b\f\n\r\t\v");
   1705   EXPECT_EQ("is equal to L\"Hi-\'\\\"?\\\\\\a\\b\\f\\n\\r\\t\\v\"",
   1706     Describe(m));
   1707 
   1708   Matcher< ::wstring> m2 = StrEq(L"\xD3\x576\x8D3\xC74D");
   1709   EXPECT_EQ("is equal to L\"\\xD3\\x576\\x8D3\\xC74D\"",
   1710     Describe(m2));
   1711 
   1712   ::wstring str(L"01204500800");
   1713   str[3] = L'\0';
   1714   Matcher<const ::wstring&> m4 = StrEq(str);
   1715   EXPECT_EQ("is equal to L\"012\\04500800\"", Describe(m4));
   1716   str[0] = str[6] = str[7] = str[9] = str[10] = L'\0';
   1717   Matcher<const ::wstring&> m5 = StrEq(str);
   1718   EXPECT_EQ("is equal to L\"\\012\\045\\0\\08\\0\\0\"", Describe(m5));
   1719 }
   1720 
   1721 TEST(GlobalWideStrNeTest, MatchesUnequalString) {
   1722   Matcher<const wchar_t*> m = StrNe(L"Hello");
   1723   EXPECT_TRUE(m.Matches(L""));
   1724   EXPECT_TRUE(m.Matches(NULL));
   1725   EXPECT_FALSE(m.Matches(L"Hello"));
   1726 
   1727   Matcher< ::wstring> m2 = StrNe(::wstring(L"Hello"));
   1728   EXPECT_TRUE(m2.Matches(L"hello"));
   1729   EXPECT_FALSE(m2.Matches(L"Hello"));
   1730 }
   1731 
   1732 TEST(GlobalWideStrNeTest, CanDescribeSelf) {
   1733   Matcher<const wchar_t*> m = StrNe(L"Hi");
   1734   EXPECT_EQ("isn't equal to L\"Hi\"", Describe(m));
   1735 }
   1736 
   1737 TEST(GlobalWideStrCaseEqTest, MatchesEqualStringIgnoringCase) {
   1738   Matcher<const wchar_t*> m = StrCaseEq(::wstring(L"Hello"));
   1739   EXPECT_TRUE(m.Matches(L"Hello"));
   1740   EXPECT_TRUE(m.Matches(L"hello"));
   1741   EXPECT_FALSE(m.Matches(L"Hi"));
   1742   EXPECT_FALSE(m.Matches(NULL));
   1743 
   1744   Matcher<const ::wstring&> m2 = StrCaseEq(L"Hello");
   1745   EXPECT_TRUE(m2.Matches(L"hello"));
   1746   EXPECT_FALSE(m2.Matches(L"Hi"));
   1747 }
   1748 
   1749 TEST(GlobalWideStrCaseEqTest, MatchesEqualStringWith0IgnoringCase) {
   1750   ::wstring str1(L"oabocdooeoo");
   1751   ::wstring str2(L"OABOCDOOEOO");
   1752   Matcher<const ::wstring&> m0 = StrCaseEq(str1);
   1753   EXPECT_FALSE(m0.Matches(str2 + ::wstring(1, L'\0')));
   1754 
   1755   str1[3] = str2[3] = L'\0';
   1756   Matcher<const ::wstring&> m1 = StrCaseEq(str1);
   1757   EXPECT_TRUE(m1.Matches(str2));
   1758 
   1759   str1[0] = str1[6] = str1[7] = str1[10] = L'\0';
   1760   str2[0] = str2[6] = str2[7] = str2[10] = L'\0';
   1761   Matcher<const ::wstring&> m2 = StrCaseEq(str1);
   1762   str1[9] = str2[9] = L'\0';
   1763   EXPECT_FALSE(m2.Matches(str2));
   1764 
   1765   Matcher<const ::wstring&> m3 = StrCaseEq(str1);
   1766   EXPECT_TRUE(m3.Matches(str2));
   1767 
   1768   EXPECT_FALSE(m3.Matches(str2 + L"x"));
   1769   str2.append(1, L'\0');
   1770   EXPECT_FALSE(m3.Matches(str2));
   1771   EXPECT_FALSE(m3.Matches(::wstring(str2, 0, 9)));
   1772 }
   1773 
   1774 TEST(GlobalWideStrCaseEqTest, CanDescribeSelf) {
   1775   Matcher< ::wstring> m = StrCaseEq(L"Hi");
   1776   EXPECT_EQ("is equal to (ignoring case) L\"Hi\"", Describe(m));
   1777 }
   1778 
   1779 TEST(GlobalWideStrCaseNeTest, MatchesUnequalStringIgnoringCase) {
   1780   Matcher<const wchar_t*> m = StrCaseNe(L"Hello");
   1781   EXPECT_TRUE(m.Matches(L"Hi"));
   1782   EXPECT_TRUE(m.Matches(NULL));
   1783   EXPECT_FALSE(m.Matches(L"Hello"));
   1784   EXPECT_FALSE(m.Matches(L"hello"));
   1785 
   1786   Matcher< ::wstring> m2 = StrCaseNe(::wstring(L"Hello"));
   1787   EXPECT_TRUE(m2.Matches(L""));
   1788   EXPECT_FALSE(m2.Matches(L"Hello"));
   1789 }
   1790 
   1791 TEST(GlobalWideStrCaseNeTest, CanDescribeSelf) {
   1792   Matcher<const wchar_t*> m = StrCaseNe(L"Hi");
   1793   EXPECT_EQ("isn't equal to (ignoring case) L\"Hi\"", Describe(m));
   1794 }
   1795 
   1796 // Tests that HasSubstr() works for matching wstring-typed values.
   1797 TEST(GlobalWideHasSubstrTest, WorksForStringClasses) {
   1798   const Matcher< ::wstring> m1 = HasSubstr(L"foo");
   1799   EXPECT_TRUE(m1.Matches(::wstring(L"I love food.")));
   1800   EXPECT_FALSE(m1.Matches(::wstring(L"tofo")));
   1801 
   1802   const Matcher<const ::wstring&> m2 = HasSubstr(L"foo");
   1803   EXPECT_TRUE(m2.Matches(::wstring(L"I love food.")));
   1804   EXPECT_FALSE(m2.Matches(::wstring(L"tofo")));
   1805 }
   1806 
   1807 // Tests that HasSubstr() works for matching C-wide-string-typed values.
   1808 TEST(GlobalWideHasSubstrTest, WorksForCStrings) {
   1809   const Matcher<wchar_t*> m1 = HasSubstr(L"foo");
   1810   EXPECT_TRUE(m1.Matches(const_cast<wchar_t*>(L"I love food.")));
   1811   EXPECT_FALSE(m1.Matches(const_cast<wchar_t*>(L"tofo")));
   1812   EXPECT_FALSE(m1.Matches(NULL));
   1813 
   1814   const Matcher<const wchar_t*> m2 = HasSubstr(L"foo");
   1815   EXPECT_TRUE(m2.Matches(L"I love food."));
   1816   EXPECT_FALSE(m2.Matches(L"tofo"));
   1817   EXPECT_FALSE(m2.Matches(NULL));
   1818 }
   1819 
   1820 // Tests that HasSubstr(s) describes itself properly.
   1821 TEST(GlobalWideHasSubstrTest, CanDescribeSelf) {
   1822   Matcher< ::wstring> m = HasSubstr(L"foo\n\"");
   1823   EXPECT_EQ("has substring L\"foo\\n\\\"\"", Describe(m));
   1824 }
   1825 
   1826 // Tests StartsWith(s).
   1827 
   1828 TEST(GlobalWideStartsWithTest, MatchesStringWithGivenPrefix) {
   1829   const Matcher<const wchar_t*> m1 = StartsWith(::wstring(L""));
   1830   EXPECT_TRUE(m1.Matches(L"Hi"));
   1831   EXPECT_TRUE(m1.Matches(L""));
   1832   EXPECT_FALSE(m1.Matches(NULL));
   1833 
   1834   const Matcher<const ::wstring&> m2 = StartsWith(L"Hi");
   1835   EXPECT_TRUE(m2.Matches(L"Hi"));
   1836   EXPECT_TRUE(m2.Matches(L"Hi Hi!"));
   1837   EXPECT_TRUE(m2.Matches(L"High"));
   1838   EXPECT_FALSE(m2.Matches(L"H"));
   1839   EXPECT_FALSE(m2.Matches(L" Hi"));
   1840 }
   1841 
   1842 TEST(GlobalWideStartsWithTest, CanDescribeSelf) {
   1843   Matcher<const ::wstring> m = StartsWith(L"Hi");
   1844   EXPECT_EQ("starts with L\"Hi\"", Describe(m));
   1845 }
   1846 
   1847 // Tests EndsWith(s).
   1848 
   1849 TEST(GlobalWideEndsWithTest, MatchesStringWithGivenSuffix) {
   1850   const Matcher<const wchar_t*> m1 = EndsWith(L"");
   1851   EXPECT_TRUE(m1.Matches(L"Hi"));
   1852   EXPECT_TRUE(m1.Matches(L""));
   1853   EXPECT_FALSE(m1.Matches(NULL));
   1854 
   1855   const Matcher<const ::wstring&> m2 = EndsWith(::wstring(L"Hi"));
   1856   EXPECT_TRUE(m2.Matches(L"Hi"));
   1857   EXPECT_TRUE(m2.Matches(L"Wow Hi Hi"));
   1858   EXPECT_TRUE(m2.Matches(L"Super Hi"));
   1859   EXPECT_FALSE(m2.Matches(L"i"));
   1860   EXPECT_FALSE(m2.Matches(L"Hi "));
   1861 }
   1862 
   1863 TEST(GlobalWideEndsWithTest, CanDescribeSelf) {
   1864   Matcher<const ::wstring> m = EndsWith(L"Hi");
   1865   EXPECT_EQ("ends with L\"Hi\"", Describe(m));
   1866 }
   1867 
   1868 #endif  // GTEST_HAS_GLOBAL_WSTRING
   1869 
   1870 
   1871 typedef ::std::tr1::tuple<long, int> Tuple2;  // NOLINT
   1872 
   1873 // Tests that Eq() matches a 2-tuple where the first field == the
   1874 // second field.
   1875 TEST(Eq2Test, MatchesEqualArguments) {
   1876   Matcher<const Tuple2&> m = Eq();
   1877   EXPECT_TRUE(m.Matches(Tuple2(5L, 5)));
   1878   EXPECT_FALSE(m.Matches(Tuple2(5L, 6)));
   1879 }
   1880 
   1881 // Tests that Eq() describes itself properly.
   1882 TEST(Eq2Test, CanDescribeSelf) {
   1883   Matcher<const Tuple2&> m = Eq();
   1884   EXPECT_EQ("are an equal pair", Describe(m));
   1885 }
   1886 
   1887 // Tests that Ge() matches a 2-tuple where the first field >= the
   1888 // second field.
   1889 TEST(Ge2Test, MatchesGreaterThanOrEqualArguments) {
   1890   Matcher<const Tuple2&> m = Ge();
   1891   EXPECT_TRUE(m.Matches(Tuple2(5L, 4)));
   1892   EXPECT_TRUE(m.Matches(Tuple2(5L, 5)));
   1893   EXPECT_FALSE(m.Matches(Tuple2(5L, 6)));
   1894 }
   1895 
   1896 // Tests that Ge() describes itself properly.
   1897 TEST(Ge2Test, CanDescribeSelf) {
   1898   Matcher<const Tuple2&> m = Ge();
   1899   EXPECT_EQ("are a pair where the first >= the second", Describe(m));
   1900 }
   1901 
   1902 // Tests that Gt() matches a 2-tuple where the first field > the
   1903 // second field.
   1904 TEST(Gt2Test, MatchesGreaterThanArguments) {
   1905   Matcher<const Tuple2&> m = Gt();
   1906   EXPECT_TRUE(m.Matches(Tuple2(5L, 4)));
   1907   EXPECT_FALSE(m.Matches(Tuple2(5L, 5)));
   1908   EXPECT_FALSE(m.Matches(Tuple2(5L, 6)));
   1909 }
   1910 
   1911 // Tests that Gt() describes itself properly.
   1912 TEST(Gt2Test, CanDescribeSelf) {
   1913   Matcher<const Tuple2&> m = Gt();
   1914   EXPECT_EQ("are a pair where the first > the second", Describe(m));
   1915 }
   1916 
   1917 // Tests that Le() matches a 2-tuple where the first field <= the
   1918 // second field.
   1919 TEST(Le2Test, MatchesLessThanOrEqualArguments) {
   1920   Matcher<const Tuple2&> m = Le();
   1921   EXPECT_TRUE(m.Matches(Tuple2(5L, 6)));
   1922   EXPECT_TRUE(m.Matches(Tuple2(5L, 5)));
   1923   EXPECT_FALSE(m.Matches(Tuple2(5L, 4)));
   1924 }
   1925 
   1926 // Tests that Le() describes itself properly.
   1927 TEST(Le2Test, CanDescribeSelf) {
   1928   Matcher<const Tuple2&> m = Le();
   1929   EXPECT_EQ("are a pair where the first <= the second", Describe(m));
   1930 }
   1931 
   1932 // Tests that Lt() matches a 2-tuple where the first field < the
   1933 // second field.
   1934 TEST(Lt2Test, MatchesLessThanArguments) {
   1935   Matcher<const Tuple2&> m = Lt();
   1936   EXPECT_TRUE(m.Matches(Tuple2(5L, 6)));
   1937   EXPECT_FALSE(m.Matches(Tuple2(5L, 5)));
   1938   EXPECT_FALSE(m.Matches(Tuple2(5L, 4)));
   1939 }
   1940 
   1941 // Tests that Lt() describes itself properly.
   1942 TEST(Lt2Test, CanDescribeSelf) {
   1943   Matcher<const Tuple2&> m = Lt();
   1944   EXPECT_EQ("are a pair where the first < the second", Describe(m));
   1945 }
   1946 
   1947 // Tests that Ne() matches a 2-tuple where the first field != the
   1948 // second field.
   1949 TEST(Ne2Test, MatchesUnequalArguments) {
   1950   Matcher<const Tuple2&> m = Ne();
   1951   EXPECT_TRUE(m.Matches(Tuple2(5L, 6)));
   1952   EXPECT_TRUE(m.Matches(Tuple2(5L, 4)));
   1953   EXPECT_FALSE(m.Matches(Tuple2(5L, 5)));
   1954 }
   1955 
   1956 // Tests that Ne() describes itself properly.
   1957 TEST(Ne2Test, CanDescribeSelf) {
   1958   Matcher<const Tuple2&> m = Ne();
   1959   EXPECT_EQ("are an unequal pair", Describe(m));
   1960 }
   1961 
   1962 // Tests that Not(m) matches any value that doesn't match m.
   1963 TEST(NotTest, NegatesMatcher) {
   1964   Matcher<int> m;
   1965   m = Not(Eq(2));
   1966   EXPECT_TRUE(m.Matches(3));
   1967   EXPECT_FALSE(m.Matches(2));
   1968 }
   1969 
   1970 // Tests that Not(m) describes itself properly.
   1971 TEST(NotTest, CanDescribeSelf) {
   1972   Matcher<int> m = Not(Eq(5));
   1973   EXPECT_EQ("isn't equal to 5", Describe(m));
   1974 }
   1975 
   1976 // Tests that monomorphic matchers are safely cast by the Not matcher.
   1977 TEST(NotTest, NotMatcherSafelyCastsMonomorphicMatchers) {
   1978   // greater_than_5 is a monomorphic matcher.
   1979   Matcher<int> greater_than_5 = Gt(5);
   1980 
   1981   Matcher<const int&> m = Not(greater_than_5);
   1982   Matcher<int&> m2 = Not(greater_than_5);
   1983   Matcher<int&> m3 = Not(m);
   1984 }
   1985 
   1986 // Helper to allow easy testing of AllOf matchers with num parameters.
   1987 void AllOfMatches(int num, const Matcher<int>& m) {
   1988   SCOPED_TRACE(Describe(m));
   1989   EXPECT_TRUE(m.Matches(0));
   1990   for (int i = 1; i <= num; ++i) {
   1991     EXPECT_FALSE(m.Matches(i));
   1992   }
   1993   EXPECT_TRUE(m.Matches(num + 1));
   1994 }
   1995 
   1996 // Tests that AllOf(m1, ..., mn) matches any value that matches all of
   1997 // the given matchers.
   1998 TEST(AllOfTest, MatchesWhenAllMatch) {
   1999   Matcher<int> m;
   2000   m = AllOf(Le(2), Ge(1));
   2001   EXPECT_TRUE(m.Matches(1));
   2002   EXPECT_TRUE(m.Matches(2));
   2003   EXPECT_FALSE(m.Matches(0));
   2004   EXPECT_FALSE(m.Matches(3));
   2005 
   2006   m = AllOf(Gt(0), Ne(1), Ne(2));
   2007   EXPECT_TRUE(m.Matches(3));
   2008   EXPECT_FALSE(m.Matches(2));
   2009   EXPECT_FALSE(m.Matches(1));
   2010   EXPECT_FALSE(m.Matches(0));
   2011 
   2012   m = AllOf(Gt(0), Ne(1), Ne(2), Ne(3));
   2013   EXPECT_TRUE(m.Matches(4));
   2014   EXPECT_FALSE(m.Matches(3));
   2015   EXPECT_FALSE(m.Matches(2));
   2016   EXPECT_FALSE(m.Matches(1));
   2017   EXPECT_FALSE(m.Matches(0));
   2018 
   2019   m = AllOf(Ge(0), Lt(10), Ne(3), Ne(5), Ne(7));
   2020   EXPECT_TRUE(m.Matches(0));
   2021   EXPECT_TRUE(m.Matches(1));
   2022   EXPECT_FALSE(m.Matches(3));
   2023 
   2024   // The following tests for varying number of sub-matchers. Due to the way
   2025   // the sub-matchers are handled it is enough to test every sub-matcher once
   2026   // with sub-matchers using the same matcher type. Varying matcher types are
   2027   // checked for above.
   2028   AllOfMatches(2, AllOf(Ne(1), Ne(2)));
   2029   AllOfMatches(3, AllOf(Ne(1), Ne(2), Ne(3)));
   2030   AllOfMatches(4, AllOf(Ne(1), Ne(2), Ne(3), Ne(4)));
   2031   AllOfMatches(5, AllOf(Ne(1), Ne(2), Ne(3), Ne(4), Ne(5)));
   2032   AllOfMatches(6, AllOf(Ne(1), Ne(2), Ne(3), Ne(4), Ne(5), Ne(6)));
   2033   AllOfMatches(7, AllOf(Ne(1), Ne(2), Ne(3), Ne(4), Ne(5), Ne(6), Ne(7)));
   2034   AllOfMatches(8, AllOf(Ne(1), Ne(2), Ne(3), Ne(4), Ne(5), Ne(6), Ne(7),
   2035                         Ne(8)));
   2036   AllOfMatches(9, AllOf(Ne(1), Ne(2), Ne(3), Ne(4), Ne(5), Ne(6), Ne(7),
   2037                         Ne(8), Ne(9)));
   2038   AllOfMatches(10, AllOf(Ne(1), Ne(2), Ne(3), Ne(4), Ne(5), Ne(6), Ne(7), Ne(8),
   2039                          Ne(9), Ne(10)));
   2040 }
   2041 
   2042 #if GTEST_LANG_CXX11
   2043 // Tests the variadic version of the AllOfMatcher.
   2044 TEST(AllOfTest, VariadicMatchesWhenAllMatch) {
   2045   // Make sure AllOf is defined in the right namespace and does not depend on
   2046   // ADL.
   2047   ::testing::AllOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
   2048   Matcher<int> m = AllOf(Ne(1), Ne(2), Ne(3), Ne(4), Ne(5), Ne(6), Ne(7), Ne(8),
   2049                          Ne(9), Ne(10), Ne(11));
   2050   EXPECT_THAT(Describe(m), EndsWith("and (isn't equal to 11))))))))))"));
   2051   AllOfMatches(11, m);
   2052   AllOfMatches(50, AllOf(Ne(1), Ne(2), Ne(3), Ne(4), Ne(5), Ne(6), Ne(7), Ne(8),
   2053                          Ne(9), Ne(10), Ne(11), Ne(12), Ne(13), Ne(14), Ne(15),
   2054                          Ne(16), Ne(17), Ne(18), Ne(19), Ne(20), Ne(21), Ne(22),
   2055                          Ne(23), Ne(24), Ne(25), Ne(26), Ne(27), Ne(28), Ne(29),
   2056                          Ne(30), Ne(31), Ne(32), Ne(33), Ne(34), Ne(35), Ne(36),
   2057                          Ne(37), Ne(38), Ne(39), Ne(40), Ne(41), Ne(42), Ne(43),
   2058                          Ne(44), Ne(45), Ne(46), Ne(47), Ne(48), Ne(49),
   2059                          Ne(50)));
   2060 }
   2061 
   2062 #endif  // GTEST_LANG_CXX11
   2063 
   2064 // Tests that AllOf(m1, ..., mn) describes itself properly.
   2065 TEST(AllOfTest, CanDescribeSelf) {
   2066   Matcher<int> m;
   2067   m = AllOf(Le(2), Ge(1));
   2068   EXPECT_EQ("(is <= 2) and (is >= 1)", Describe(m));
   2069 
   2070   m = AllOf(Gt(0), Ne(1), Ne(2));
   2071   EXPECT_EQ("(is > 0) and "
   2072             "((isn't equal to 1) and "
   2073             "(isn't equal to 2))",
   2074             Describe(m));
   2075 
   2076 
   2077   m = AllOf(Gt(0), Ne(1), Ne(2), Ne(3));
   2078   EXPECT_EQ("((is > 0) and "
   2079             "(isn't equal to 1)) and "
   2080             "((isn't equal to 2) and "
   2081             "(isn't equal to 3))",
   2082             Describe(m));
   2083 
   2084 
   2085   m = AllOf(Ge(0), Lt(10), Ne(3), Ne(5), Ne(7));
   2086   EXPECT_EQ("((is >= 0) and "
   2087             "(is < 10)) and "
   2088             "((isn't equal to 3) and "
   2089             "((isn't equal to 5) and "
   2090             "(isn't equal to 7)))",
   2091             Describe(m));
   2092 }
   2093 
   2094 // Tests that AllOf(m1, ..., mn) describes its negation properly.
   2095 TEST(AllOfTest, CanDescribeNegation) {
   2096   Matcher<int> m;
   2097   m = AllOf(Le(2), Ge(1));
   2098   EXPECT_EQ("(isn't <= 2) or "
   2099             "(isn't >= 1)",
   2100             DescribeNegation(m));
   2101 
   2102   m = AllOf(Gt(0), Ne(1), Ne(2));
   2103   EXPECT_EQ("(isn't > 0) or "
   2104             "((is equal to 1) or "
   2105             "(is equal to 2))",
   2106             DescribeNegation(m));
   2107 
   2108 
   2109   m = AllOf(Gt(0), Ne(1), Ne(2), Ne(3));
   2110   EXPECT_EQ("((isn't > 0) or "
   2111             "(is equal to 1)) or "
   2112             "((is equal to 2) or "
   2113             "(is equal to 3))",
   2114             DescribeNegation(m));
   2115 
   2116 
   2117   m = AllOf(Ge(0), Lt(10), Ne(3), Ne(5), Ne(7));
   2118   EXPECT_EQ("((isn't >= 0) or "
   2119             "(isn't < 10)) or "
   2120             "((is equal to 3) or "
   2121             "((is equal to 5) or "
   2122             "(is equal to 7)))",
   2123             DescribeNegation(m));
   2124 }
   2125 
   2126 // Tests that monomorphic matchers are safely cast by the AllOf matcher.
   2127 TEST(AllOfTest, AllOfMatcherSafelyCastsMonomorphicMatchers) {
   2128   // greater_than_5 and less_than_10 are monomorphic matchers.
   2129   Matcher<int> greater_than_5 = Gt(5);
   2130   Matcher<int> less_than_10 = Lt(10);
   2131 
   2132   Matcher<const int&> m = AllOf(greater_than_5, less_than_10);
   2133   Matcher<int&> m2 = AllOf(greater_than_5, less_than_10);
   2134   Matcher<int&> m3 = AllOf(greater_than_5, m2);
   2135 
   2136   // Tests that BothOf works when composing itself.
   2137   Matcher<const int&> m4 = AllOf(greater_than_5, less_than_10, less_than_10);
   2138   Matcher<int&> m5 = AllOf(greater_than_5, less_than_10, less_than_10);
   2139 }
   2140 
   2141 TEST(AllOfTest, ExplainsResult) {
   2142   Matcher<int> m;
   2143 
   2144   // Successful match.  Both matchers need to explain.  The second
   2145   // matcher doesn't give an explanation, so only the first matcher's
   2146   // explanation is printed.
   2147   m = AllOf(GreaterThan(10), Lt(30));
   2148   EXPECT_EQ("which is 15 more than 10", Explain(m, 25));
   2149 
   2150   // Successful match.  Both matchers need to explain.
   2151   m = AllOf(GreaterThan(10), GreaterThan(20));
   2152   EXPECT_EQ("which is 20 more than 10, and which is 10 more than 20",
   2153             Explain(m, 30));
   2154 
   2155   // Successful match.  All matchers need to explain.  The second
   2156   // matcher doesn't given an explanation.
   2157   m = AllOf(GreaterThan(10), Lt(30), GreaterThan(20));
   2158   EXPECT_EQ("which is 15 more than 10, and which is 5 more than 20",
   2159             Explain(m, 25));
   2160 
   2161   // Successful match.  All matchers need to explain.
   2162   m = AllOf(GreaterThan(10), GreaterThan(20), GreaterThan(30));
   2163   EXPECT_EQ("which is 30 more than 10, and which is 20 more than 20, "
   2164             "and which is 10 more than 30",
   2165             Explain(m, 40));
   2166 
   2167   // Failed match.  The first matcher, which failed, needs to
   2168   // explain.
   2169   m = AllOf(GreaterThan(10), GreaterThan(20));
   2170   EXPECT_EQ("which is 5 less than 10", Explain(m, 5));
   2171 
   2172   // Failed match.  The second matcher, which failed, needs to
   2173   // explain.  Since it doesn't given an explanation, nothing is
   2174   // printed.
   2175   m = AllOf(GreaterThan(10), Lt(30));
   2176   EXPECT_EQ("", Explain(m, 40));
   2177 
   2178   // Failed match.  The second matcher, which failed, needs to
   2179   // explain.
   2180   m = AllOf(GreaterThan(10), GreaterThan(20));
   2181   EXPECT_EQ("which is 5 less than 20", Explain(m, 15));
   2182 }
   2183 
   2184 // Helper to allow easy testing of AnyOf matchers with num parameters.
   2185 void AnyOfMatches(int num, const Matcher<int>& m) {
   2186   SCOPED_TRACE(Describe(m));
   2187   EXPECT_FALSE(m.Matches(0));
   2188   for (int i = 1; i <= num; ++i) {
   2189     EXPECT_TRUE(m.Matches(i));
   2190   }
   2191   EXPECT_FALSE(m.Matches(num + 1));
   2192 }
   2193 
   2194 // Tests that AnyOf(m1, ..., mn) matches any value that matches at
   2195 // least one of the given matchers.
   2196 TEST(AnyOfTest, MatchesWhenAnyMatches) {
   2197   Matcher<int> m;
   2198   m = AnyOf(Le(1), Ge(3));
   2199   EXPECT_TRUE(m.Matches(1));
   2200   EXPECT_TRUE(m.Matches(4));
   2201   EXPECT_FALSE(m.Matches(2));
   2202 
   2203   m = AnyOf(Lt(0), Eq(1), Eq(2));
   2204   EXPECT_TRUE(m.Matches(-1));
   2205   EXPECT_TRUE(m.Matches(1));
   2206   EXPECT_TRUE(m.Matches(2));
   2207   EXPECT_FALSE(m.Matches(0));
   2208 
   2209   m = AnyOf(Lt(0), Eq(1), Eq(2), Eq(3));
   2210   EXPECT_TRUE(m.Matches(-1));
   2211   EXPECT_TRUE(m.Matches(1));
   2212   EXPECT_TRUE(m.Matches(2));
   2213   EXPECT_TRUE(m.Matches(3));
   2214   EXPECT_FALSE(m.Matches(0));
   2215 
   2216   m = AnyOf(Le(0), Gt(10), 3, 5, 7);
   2217   EXPECT_TRUE(m.Matches(0));
   2218   EXPECT_TRUE(m.Matches(11));
   2219   EXPECT_TRUE(m.Matches(3));
   2220   EXPECT_FALSE(m.Matches(2));
   2221 
   2222   // The following tests for varying number of sub-matchers. Due to the way
   2223   // the sub-matchers are handled it is enough to test every sub-matcher once
   2224   // with sub-matchers using the same matcher type. Varying matcher types are
   2225   // checked for above.
   2226   AnyOfMatches(2, AnyOf(1, 2));
   2227   AnyOfMatches(3, AnyOf(1, 2, 3));
   2228   AnyOfMatches(4, AnyOf(1, 2, 3, 4));
   2229   AnyOfMatches(5, AnyOf(1, 2, 3, 4, 5));
   2230   AnyOfMatches(6, AnyOf(1, 2, 3, 4, 5, 6));
   2231   AnyOfMatches(7, AnyOf(1, 2, 3, 4, 5, 6, 7));
   2232   AnyOfMatches(8, AnyOf(1, 2, 3, 4, 5, 6, 7, 8));
   2233   AnyOfMatches(9, AnyOf(1, 2, 3, 4, 5, 6, 7, 8, 9));
   2234   AnyOfMatches(10, AnyOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
   2235 }
   2236 
   2237 #if GTEST_LANG_CXX11
   2238 // Tests the variadic version of the AnyOfMatcher.
   2239 TEST(AnyOfTest, VariadicMatchesWhenAnyMatches) {
   2240   // Also make sure AnyOf is defined in the right namespace and does not depend
   2241   // on ADL.
   2242   Matcher<int> m = ::testing::AnyOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
   2243 
   2244   EXPECT_THAT(Describe(m), EndsWith("or (is equal to 11))))))))))"));
   2245   AnyOfMatches(11, m);
   2246   AnyOfMatches(50, AnyOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
   2247                          11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
   2248                          21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
   2249                          31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
   2250                          41, 42, 43, 44, 45, 46, 47, 48, 49, 50));
   2251 }
   2252 
   2253 #endif  // GTEST_LANG_CXX11
   2254 
   2255 // Tests that AnyOf(m1, ..., mn) describes itself properly.
   2256 TEST(AnyOfTest, CanDescribeSelf) {
   2257   Matcher<int> m;
   2258   m = AnyOf(Le(1), Ge(3));
   2259   EXPECT_EQ("(is <= 1) or (is >= 3)",
   2260             Describe(m));
   2261 
   2262   m = AnyOf(Lt(0), Eq(1), Eq(2));
   2263   EXPECT_EQ("(is < 0) or "
   2264             "((is equal to 1) or (is equal to 2))",
   2265             Describe(m));
   2266 
   2267   m = AnyOf(Lt(0), Eq(1), Eq(2), Eq(3));
   2268   EXPECT_EQ("((is < 0) or "
   2269             "(is equal to 1)) or "
   2270             "((is equal to 2) or "
   2271             "(is equal to 3))",
   2272             Describe(m));
   2273 
   2274   m = AnyOf(Le(0), Gt(10), 3, 5, 7);
   2275   EXPECT_EQ("((is <= 0) or "
   2276             "(is > 10)) or "
   2277             "((is equal to 3) or "
   2278             "((is equal to 5) or "
   2279             "(is equal to 7)))",
   2280             Describe(m));
   2281 }
   2282 
   2283 // Tests that AnyOf(m1, ..., mn) describes its negation properly.
   2284 TEST(AnyOfTest, CanDescribeNegation) {
   2285   Matcher<int> m;
   2286   m = AnyOf(Le(1), Ge(3));
   2287   EXPECT_EQ("(isn't <= 1) and (isn't >= 3)",
   2288             DescribeNegation(m));
   2289 
   2290   m = AnyOf(Lt(0), Eq(1), Eq(2));
   2291   EXPECT_EQ("(isn't < 0) and "
   2292             "((isn't equal to 1) and (isn't equal to 2))",
   2293             DescribeNegation(m));
   2294 
   2295   m = AnyOf(Lt(0), Eq(1), Eq(2), Eq(3));
   2296   EXPECT_EQ("((isn't < 0) and "
   2297             "(isn't equal to 1)) and "
   2298             "((isn't equal to 2) and "
   2299             "(isn't equal to 3))",
   2300             DescribeNegation(m));
   2301 
   2302   m = AnyOf(Le(0), Gt(10), 3, 5, 7);
   2303   EXPECT_EQ("((isn't <= 0) and "
   2304             "(isn't > 10)) and "
   2305             "((isn't equal to 3) and "
   2306             "((isn't equal to 5) and "
   2307             "(isn't equal to 7)))",
   2308             DescribeNegation(m));
   2309 }
   2310 
   2311 // Tests that monomorphic matchers are safely cast by the AnyOf matcher.
   2312 TEST(AnyOfTest, AnyOfMatcherSafelyCastsMonomorphicMatchers) {
   2313   // greater_than_5 and less_than_10 are monomorphic matchers.
   2314   Matcher<int> greater_than_5 = Gt(5);
   2315   Matcher<int> less_than_10 = Lt(10);
   2316 
   2317   Matcher<const int&> m = AnyOf(greater_than_5, less_than_10);
   2318   Matcher<int&> m2 = AnyOf(greater_than_5, less_than_10);
   2319   Matcher<int&> m3 = AnyOf(greater_than_5, m2);
   2320 
   2321   // Tests that EitherOf works when composing itself.
   2322   Matcher<const int&> m4 = AnyOf(greater_than_5, less_than_10, less_than_10);
   2323   Matcher<int&> m5 = AnyOf(greater_than_5, less_than_10, less_than_10);
   2324 }
   2325 
   2326 TEST(AnyOfTest, ExplainsResult) {
   2327   Matcher<int> m;
   2328 
   2329   // Failed match.  Both matchers need to explain.  The second
   2330   // matcher doesn't give an explanation, so only the first matcher's
   2331   // explanation is printed.
   2332   m = AnyOf(GreaterThan(10), Lt(0));
   2333   EXPECT_EQ("which is 5 less than 10", Explain(m, 5));
   2334 
   2335   // Failed match.  Both matchers need to explain.
   2336   m = AnyOf(GreaterThan(10), GreaterThan(20));
   2337   EXPECT_EQ("which is 5 less than 10, and which is 15 less than 20",
   2338             Explain(m, 5));
   2339 
   2340   // Failed match.  All matchers need to explain.  The second
   2341   // matcher doesn't given an explanation.
   2342   m = AnyOf(GreaterThan(10), Gt(20), GreaterThan(30));
   2343   EXPECT_EQ("which is 5 less than 10, and which is 25 less than 30",
   2344             Explain(m, 5));
   2345 
   2346   // Failed match.  All matchers need to explain.
   2347   m = AnyOf(GreaterThan(10), GreaterThan(20), GreaterThan(30));
   2348   EXPECT_EQ("which is 5 less than 10, and which is 15 less than 20, "
   2349             "and which is 25 less than 30",
   2350             Explain(m, 5));
   2351 
   2352   // Successful match.  The first matcher, which succeeded, needs to
   2353   // explain.
   2354   m = AnyOf(GreaterThan(10), GreaterThan(20));
   2355   EXPECT_EQ("which is 5 more than 10", Explain(m, 15));
   2356 
   2357   // Successful match.  The second matcher, which succeeded, needs to
   2358   // explain.  Since it doesn't given an explanation, nothing is
   2359   // printed.
   2360   m = AnyOf(GreaterThan(10), Lt(30));
   2361   EXPECT_EQ("", Explain(m, 0));
   2362 
   2363   // Successful match.  The second matcher, which succeeded, needs to
   2364   // explain.
   2365   m = AnyOf(GreaterThan(30), GreaterThan(20));
   2366   EXPECT_EQ("which is 5 more than 20", Explain(m, 25));
   2367 }
   2368 
   2369 // The following predicate function and predicate functor are for
   2370 // testing the Truly(predicate) matcher.
   2371 
   2372 // Returns non-zero if the input is positive.  Note that the return
   2373 // type of this function is not bool.  It's OK as Truly() accepts any
   2374 // unary function or functor whose return type can be implicitly
   2375 // converted to bool.
   2376 int IsPositive(double x) {
   2377   return x > 0 ? 1 : 0;
   2378 }
   2379 
   2380 // This functor returns true if the input is greater than the given
   2381 // number.
   2382 class IsGreaterThan {
   2383  public:
   2384   explicit IsGreaterThan(int threshold) : threshold_(threshold) {}
   2385 
   2386   bool operator()(int n) const { return n > threshold_; }
   2387 
   2388  private:
   2389   int threshold_;
   2390 };
   2391 
   2392 // For testing Truly().
   2393 const int foo = 0;
   2394 
   2395 // This predicate returns true iff the argument references foo and has
   2396 // a zero value.
   2397 bool ReferencesFooAndIsZero(const int& n) {
   2398   return (&n == &foo) && (n == 0);
   2399 }
   2400 
   2401 // Tests that Truly(predicate) matches what satisfies the given
   2402 // predicate.
   2403 TEST(TrulyTest, MatchesWhatSatisfiesThePredicate) {
   2404   Matcher<double> m = Truly(IsPositive);
   2405   EXPECT_TRUE(m.Matches(2.0));
   2406   EXPECT_FALSE(m.Matches(-1.5));
   2407 }
   2408 
   2409 // Tests that Truly(predicate_functor) works too.
   2410 TEST(TrulyTest, CanBeUsedWithFunctor) {
   2411   Matcher<int> m = Truly(IsGreaterThan(5));
   2412   EXPECT_TRUE(m.Matches(6));
   2413   EXPECT_FALSE(m.Matches(4));
   2414 }
   2415 
   2416 // A class that can be implicitly converted to bool.
   2417 class ConvertibleToBool {
   2418  public:
   2419   explicit ConvertibleToBool(int number) : number_(number) {}
   2420   operator bool() const { return number_ != 0; }
   2421 
   2422  private:
   2423   int number_;
   2424 };
   2425 
   2426 ConvertibleToBool IsNotZero(int number) {
   2427   return ConvertibleToBool(number);
   2428 }
   2429 
   2430 // Tests that the predicate used in Truly() may return a class that's
   2431 // implicitly convertible to bool, even when the class has no
   2432 // operator!().
   2433 TEST(TrulyTest, PredicateCanReturnAClassConvertibleToBool) {
   2434   Matcher<int> m = Truly(IsNotZero);
   2435   EXPECT_TRUE(m.Matches(1));
   2436   EXPECT_FALSE(m.Matches(0));
   2437 }
   2438 
   2439 // Tests that Truly(predicate) can describe itself properly.
   2440 TEST(TrulyTest, CanDescribeSelf) {
   2441   Matcher<double> m = Truly(IsPositive);
   2442   EXPECT_EQ("satisfies the given predicate",
   2443             Describe(m));
   2444 }
   2445 
   2446 // Tests that Truly(predicate) works when the matcher takes its
   2447 // argument by reference.
   2448 TEST(TrulyTest, WorksForByRefArguments) {
   2449   Matcher<const int&> m = Truly(ReferencesFooAndIsZero);
   2450   EXPECT_TRUE(m.Matches(foo));
   2451   int n = 0;
   2452   EXPECT_FALSE(m.Matches(n));
   2453 }
   2454 
   2455 // Tests that Matches(m) is a predicate satisfied by whatever that
   2456 // matches matcher m.
   2457 TEST(MatchesTest, IsSatisfiedByWhatMatchesTheMatcher) {
   2458   EXPECT_TRUE(Matches(Ge(0))(1));
   2459   EXPECT_FALSE(Matches(Eq('a'))('b'));
   2460 }
   2461 
   2462 // Tests that Matches(m) works when the matcher takes its argument by
   2463 // reference.
   2464 TEST(MatchesTest, WorksOnByRefArguments) {
   2465   int m = 0, n = 0;
   2466   EXPECT_TRUE(Matches(AllOf(Ref(n), Eq(0)))(n));
   2467   EXPECT_FALSE(Matches(Ref(m))(n));
   2468 }
   2469 
   2470 // Tests that a Matcher on non-reference type can be used in
   2471 // Matches().
   2472 TEST(MatchesTest, WorksWithMatcherOnNonRefType) {
   2473   Matcher<int> eq5 = Eq(5);
   2474   EXPECT_TRUE(Matches(eq5)(5));
   2475   EXPECT_FALSE(Matches(eq5)(2));
   2476 }
   2477 
   2478 // Tests Value(value, matcher).  Since Value() is a simple wrapper for
   2479 // Matches(), which has been tested already, we don't spend a lot of
   2480 // effort on testing Value().
   2481 TEST(ValueTest, WorksWithPolymorphicMatcher) {
   2482   EXPECT_TRUE(Value("hi", StartsWith("h")));
   2483   EXPECT_FALSE(Value(5, Gt(10)));
   2484 }
   2485 
   2486 TEST(ValueTest, WorksWithMonomorphicMatcher) {
   2487   const Matcher<int> is_zero = Eq(0);
   2488   EXPECT_TRUE(Value(0, is_zero));
   2489   EXPECT_FALSE(Value('a', is_zero));
   2490 
   2491   int n = 0;
   2492   const Matcher<const int&> ref_n = Ref(n);
   2493   EXPECT_TRUE(Value(n, ref_n));
   2494   EXPECT_FALSE(Value(1, ref_n));
   2495 }
   2496 
   2497 TEST(ExplainMatchResultTest, WorksWithPolymorphicMatcher) {
   2498   StringMatchResultListener listener1;
   2499   EXPECT_TRUE(ExplainMatchResult(PolymorphicIsEven(), 42, &listener1));
   2500   EXPECT_EQ("% 2 == 0", listener1.str());
   2501 
   2502   StringMatchResultListener listener2;
   2503   EXPECT_FALSE(ExplainMatchResult(Ge(42), 1.5, &listener2));
   2504   EXPECT_EQ("", listener2.str());
   2505 }
   2506 
   2507 TEST(ExplainMatchResultTest, WorksWithMonomorphicMatcher) {
   2508   const Matcher<int> is_even = PolymorphicIsEven();
   2509   StringMatchResultListener listener1;
   2510   EXPECT_TRUE(ExplainMatchResult(is_even, 42, &listener1));
   2511   EXPECT_EQ("% 2 == 0", listener1.str());
   2512 
   2513   const Matcher<const double&> is_zero = Eq(0);
   2514   StringMatchResultListener listener2;
   2515   EXPECT_FALSE(ExplainMatchResult(is_zero, 1.5, &listener2));
   2516   EXPECT_EQ("", listener2.str());
   2517 }
   2518 
   2519 MATCHER_P(Really, inner_matcher, "") {
   2520   return ExplainMatchResult(inner_matcher, arg, result_listener);
   2521 }
   2522 
   2523 TEST(ExplainMatchResultTest, WorksInsideMATCHER) {
   2524   EXPECT_THAT(0, Really(Eq(0)));
   2525 }
   2526 
   2527 TEST(AllArgsTest, WorksForTuple) {
   2528   EXPECT_THAT(make_tuple(1, 2L), AllArgs(Lt()));
   2529   EXPECT_THAT(make_tuple(2L, 1), Not(AllArgs(Lt())));
   2530 }
   2531 
   2532 TEST(AllArgsTest, WorksForNonTuple) {
   2533   EXPECT_THAT(42, AllArgs(Gt(0)));
   2534   EXPECT_THAT('a', Not(AllArgs(Eq('b'))));
   2535 }
   2536 
   2537 class AllArgsHelper {
   2538  public:
   2539   AllArgsHelper() {}
   2540 
   2541   MOCK_METHOD2(Helper, int(char x, int y));
   2542 
   2543  private:
   2544   GTEST_DISALLOW_COPY_AND_ASSIGN_(AllArgsHelper);
   2545 };
   2546 
   2547 TEST(AllArgsTest, WorksInWithClause) {
   2548   AllArgsHelper helper;
   2549   ON_CALL(helper, Helper(_, _))
   2550       .With(AllArgs(Lt()))
   2551       .WillByDefault(Return(1));
   2552   EXPECT_CALL(helper, Helper(_, _));
   2553   EXPECT_CALL(helper, Helper(_, _))
   2554       .With(AllArgs(Gt()))
   2555       .WillOnce(Return(2));
   2556 
   2557   EXPECT_EQ(1, helper.Helper('\1', 2));
   2558   EXPECT_EQ(2, helper.Helper('a', 1));
   2559 }
   2560 
   2561 // Tests that ASSERT_THAT() and EXPECT_THAT() work when the value
   2562 // matches the matcher.
   2563 TEST(MatcherAssertionTest, WorksWhenMatcherIsSatisfied) {
   2564   ASSERT_THAT(5, Ge(2)) << "This should succeed.";
   2565   ASSERT_THAT("Foo", EndsWith("oo"));
   2566   EXPECT_THAT(2, AllOf(Le(7), Ge(0))) << "This should succeed too.";
   2567   EXPECT_THAT("Hello", StartsWith("Hell"));
   2568 }
   2569 
   2570 // Tests that ASSERT_THAT() and EXPECT_THAT() work when the value
   2571 // doesn't match the matcher.
   2572 TEST(MatcherAssertionTest, WorksWhenMatcherIsNotSatisfied) {
   2573   // 'n' must be static as it is used in an EXPECT_FATAL_FAILURE(),
   2574   // which cannot reference auto variables.
   2575   static unsigned short n;  // NOLINT
   2576   n = 5;
   2577 
   2578   // VC++ prior to version 8.0 SP1 has a bug where it will not see any
   2579   // functions declared in the namespace scope from within nested classes.
   2580   // EXPECT/ASSERT_(NON)FATAL_FAILURE macros use nested classes so that all
   2581   // namespace-level functions invoked inside them need to be explicitly
   2582   // resolved.
   2583   EXPECT_FATAL_FAILURE(ASSERT_THAT(n, ::testing::Gt(10)),
   2584                        "Value of: n\n"
   2585                        "Expected: is > 10\n"
   2586                        "  Actual: 5" + OfType("unsigned short"));
   2587   n = 0;
   2588   EXPECT_NONFATAL_FAILURE(
   2589       EXPECT_THAT(n, ::testing::AllOf(::testing::Le(7), ::testing::Ge(5))),
   2590       "Value of: n\n"
   2591       "Expected: (is <= 7) and (is >= 5)\n"
   2592       "  Actual: 0" + OfType("unsigned short"));
   2593 }
   2594 
   2595 // Tests that ASSERT_THAT() and EXPECT_THAT() work when the argument
   2596 // has a reference type.
   2597 TEST(MatcherAssertionTest, WorksForByRefArguments) {
   2598   // We use a static variable here as EXPECT_FATAL_FAILURE() cannot
   2599   // reference auto variables.
   2600   static int n;
   2601   n = 0;
   2602   EXPECT_THAT(n, AllOf(Le(7), Ref(n)));
   2603   EXPECT_FATAL_FAILURE(ASSERT_THAT(n, ::testing::Not(::testing::Ref(n))),
   2604                        "Value of: n\n"
   2605                        "Expected: does not reference the variable @");
   2606   // Tests the "Actual" part.
   2607   EXPECT_FATAL_FAILURE(ASSERT_THAT(n, ::testing::Not(::testing::Ref(n))),
   2608                        "Actual: 0" + OfType("int") + ", which is located @");
   2609 }
   2610 
   2611 #if !GTEST_OS_SYMBIAN
   2612 // Tests that ASSERT_THAT() and EXPECT_THAT() work when the matcher is
   2613 // monomorphic.
   2614 
   2615 // ASSERT_THAT("hello", starts_with_he) fails to compile with Nokia's
   2616 // Symbian compiler: it tries to compile
   2617 // template<T, U> class MatcherCastImpl { ...
   2618 //   virtual bool MatchAndExplain(T x, ...) const {
   2619 //     return source_matcher_.MatchAndExplain(static_cast<U>(x), ...);
   2620 // with U == string and T == const char*
   2621 // With ASSERT_THAT("hello"...) changed to ASSERT_THAT(string("hello") ... )
   2622 // the compiler silently crashes with no output.
   2623 // If MatcherCastImpl is changed to use U(x) instead of static_cast<U>(x)
   2624 // the code compiles but the converted string is bogus.
   2625 TEST(MatcherAssertionTest, WorksForMonomorphicMatcher) {
   2626   Matcher<const char*> starts_with_he = StartsWith("he");
   2627   ASSERT_THAT("hello", starts_with_he);
   2628 
   2629   Matcher<const string&> ends_with_ok = EndsWith("ok");
   2630   ASSERT_THAT("book", ends_with_ok);
   2631   const string bad = "bad";
   2632   EXPECT_NONFATAL_FAILURE(EXPECT_THAT(bad, ends_with_ok),
   2633                           "Value of: bad\n"
   2634                           "Expected: ends with \"ok\"\n"
   2635                           "  Actual: \"bad\"");
   2636   Matcher<int> is_greater_than_5 = Gt(5);
   2637   EXPECT_NONFATAL_FAILURE(EXPECT_THAT(5, is_greater_than_5),
   2638                           "Value of: 5\n"
   2639                           "Expected: is > 5\n"
   2640                           "  Actual: 5" + OfType("int"));
   2641 }
   2642 #endif  // !GTEST_OS_SYMBIAN
   2643 
   2644 // Tests floating-point matchers.
   2645 template <typename RawType>
   2646 class FloatingPointTest : public testing::Test {
   2647  protected:
   2648   typedef testing::internal::FloatingPoint<RawType> Floating;
   2649   typedef typename Floating::Bits Bits;
   2650 
   2651   FloatingPointTest()
   2652       : max_ulps_(Floating::kMaxUlps),
   2653         zero_bits_(Floating(0).bits()),
   2654         one_bits_(Floating(1).bits()),
   2655         infinity_bits_(Floating(Floating::Infinity()).bits()),
   2656         close_to_positive_zero_(
   2657             Floating::ReinterpretBits(zero_bits_ + max_ulps_/2)),
   2658         close_to_negative_zero_(
   2659             -Floating::ReinterpretBits(zero_bits_ + max_ulps_ - max_ulps_/2)),
   2660         further_from_negative_zero_(-Floating::ReinterpretBits(
   2661             zero_bits_ + max_ulps_ + 1 - max_ulps_/2)),
   2662         close_to_one_(Floating::ReinterpretBits(one_bits_ + max_ulps_)),
   2663         further_from_one_(Floating::ReinterpretBits(one_bits_ + max_ulps_ + 1)),
   2664         infinity_(Floating::Infinity()),
   2665         close_to_infinity_(
   2666             Floating::ReinterpretBits(infinity_bits_ - max_ulps_)),
   2667         further_from_infinity_(
   2668             Floating::ReinterpretBits(infinity_bits_ - max_ulps_ - 1)),
   2669         max_(Floating::Max()),
   2670         nan1_(Floating::ReinterpretBits(Floating::kExponentBitMask | 1)),
   2671         nan2_(Floating::ReinterpretBits(Floating::kExponentBitMask | 200)) {
   2672   }
   2673 
   2674   void TestSize() {
   2675     EXPECT_EQ(sizeof(RawType), sizeof(Bits));
   2676   }
   2677 
   2678   // A battery of tests for FloatingEqMatcher::Matches.
   2679   // matcher_maker is a pointer to a function which creates a FloatingEqMatcher.
   2680   void TestMatches(
   2681       testing::internal::FloatingEqMatcher<RawType> (*matcher_maker)(RawType)) {
   2682     Matcher<RawType> m1 = matcher_maker(0.0);
   2683     EXPECT_TRUE(m1.Matches(-0.0));
   2684     EXPECT_TRUE(m1.Matches(close_to_positive_zero_));
   2685     EXPECT_TRUE(m1.Matches(close_to_negative_zero_));
   2686     EXPECT_FALSE(m1.Matches(1.0));
   2687 
   2688     Matcher<RawType> m2 = matcher_maker(close_to_positive_zero_);
   2689     EXPECT_FALSE(m2.Matches(further_from_negative_zero_));
   2690 
   2691     Matcher<RawType> m3 = matcher_maker(1.0);
   2692     EXPECT_TRUE(m3.Matches(close_to_one_));
   2693     EXPECT_FALSE(m3.Matches(further_from_one_));
   2694 
   2695     // Test commutativity: matcher_maker(0.0).Matches(1.0) was tested above.
   2696     EXPECT_FALSE(m3.Matches(0.0));
   2697 
   2698     Matcher<RawType> m4 = matcher_maker(-infinity_);
   2699     EXPECT_TRUE(m4.Matches(-close_to_infinity_));
   2700 
   2701     Matcher<RawType> m5 = matcher_maker(infinity_);
   2702     EXPECT_TRUE(m5.Matches(close_to_infinity_));
   2703 
   2704     // This is interesting as the representations of infinity_ and nan1_
   2705     // are only 1 DLP apart.
   2706     EXPECT_FALSE(m5.Matches(nan1_));
   2707 
   2708     // matcher_maker can produce a Matcher<const RawType&>, which is needed in
   2709     // some cases.
   2710     Matcher<const RawType&> m6 = matcher_maker(0.0);
   2711     EXPECT_TRUE(m6.Matches(-0.0));
   2712     EXPECT_TRUE(m6.Matches(close_to_positive_zero_));
   2713     EXPECT_FALSE(m6.Matches(1.0));
   2714 
   2715     // matcher_maker can produce a Matcher<RawType&>, which is needed in some
   2716     // cases.
   2717     Matcher<RawType&> m7 = matcher_maker(0.0);
   2718     RawType x = 0.0;
   2719     EXPECT_TRUE(m7.Matches(x));
   2720     x = 0.01f;
   2721     EXPECT_FALSE(m7.Matches(x));
   2722   }
   2723 
   2724   // Pre-calculated numbers to be used by the tests.
   2725 
   2726   const size_t max_ulps_;
   2727 
   2728   const Bits zero_bits_;  // The bits that represent 0.0.
   2729   const Bits one_bits_;  // The bits that represent 1.0.
   2730   const Bits infinity_bits_;  // The bits that represent +infinity.
   2731 
   2732   // Some numbers close to 0.0.
   2733   const RawType close_to_positive_zero_;
   2734   const RawType close_to_negative_zero_;
   2735   const RawType further_from_negative_zero_;
   2736 
   2737   // Some numbers close to 1.0.
   2738   const RawType close_to_one_;
   2739   const RawType further_from_one_;
   2740 
   2741   // Some numbers close to +infinity.
   2742   const RawType infinity_;
   2743   const RawType close_to_infinity_;
   2744   const RawType further_from_infinity_;
   2745 
   2746   // Maximum representable value that's not infinity.
   2747   const RawType max_;
   2748 
   2749   // Some NaNs.
   2750   const RawType nan1_;
   2751   const RawType nan2_;
   2752 };
   2753 
   2754 // Tests floating-point matchers with fixed epsilons.
   2755 template <typename RawType>
   2756 class FloatingPointNearTest : public FloatingPointTest<RawType> {
   2757  protected:
   2758   typedef FloatingPointTest<RawType> ParentType;
   2759 
   2760   // A battery of tests for FloatingEqMatcher::Matches with a fixed epsilon.
   2761   // matcher_maker is a pointer to a function which creates a FloatingEqMatcher.
   2762   void TestNearMatches(
   2763       testing::internal::FloatingEqMatcher<RawType>
   2764           (*matcher_maker)(RawType, RawType)) {
   2765     Matcher<RawType> m1 = matcher_maker(0.0, 0.0);
   2766     EXPECT_TRUE(m1.Matches(0.0));
   2767     EXPECT_TRUE(m1.Matches(-0.0));
   2768     EXPECT_FALSE(m1.Matches(ParentType::close_to_positive_zero_));
   2769     EXPECT_FALSE(m1.Matches(ParentType::close_to_negative_zero_));
   2770     EXPECT_FALSE(m1.Matches(1.0));
   2771 
   2772     Matcher<RawType> m2 = matcher_maker(0.0, 1.0);
   2773     EXPECT_TRUE(m2.Matches(0.0));
   2774     EXPECT_TRUE(m2.Matches(-0.0));
   2775     EXPECT_TRUE(m2.Matches(1.0));
   2776     EXPECT_TRUE(m2.Matches(-1.0));
   2777     EXPECT_FALSE(m2.Matches(ParentType::close_to_one_));
   2778     EXPECT_FALSE(m2.Matches(-ParentType::close_to_one_));
   2779 
   2780     // Check that inf matches inf, regardless of the of the specified max
   2781     // absolute error.
   2782     Matcher<RawType> m3 = matcher_maker(ParentType::infinity_, 0.0);
   2783     EXPECT_TRUE(m3.Matches(ParentType::infinity_));
   2784     EXPECT_FALSE(m3.Matches(ParentType::close_to_infinity_));
   2785     EXPECT_FALSE(m3.Matches(-ParentType::infinity_));
   2786 
   2787     Matcher<RawType> m4 = matcher_maker(-ParentType::infinity_, 0.0);
   2788     EXPECT_TRUE(m4.Matches(-ParentType::infinity_));
   2789     EXPECT_FALSE(m4.Matches(-ParentType::close_to_infinity_));
   2790     EXPECT_FALSE(m4.Matches(ParentType::infinity_));
   2791 
   2792     // Test various overflow scenarios.
   2793     Matcher<RawType> m5 = matcher_maker(ParentType::max_, ParentType::max_);
   2794     EXPECT_TRUE(m5.Matches(ParentType::max_));
   2795     EXPECT_FALSE(m5.Matches(-ParentType::max_));
   2796 
   2797     Matcher<RawType> m6 = matcher_maker(-ParentType::max_, ParentType::max_);
   2798     EXPECT_FALSE(m6.Matches(ParentType::max_));
   2799     EXPECT_TRUE(m6.Matches(-ParentType::max_));
   2800 
   2801     Matcher<RawType> m7 = matcher_maker(ParentType::max_, 0);
   2802     EXPECT_TRUE(m7.Matches(ParentType::max_));
   2803     EXPECT_FALSE(m7.Matches(-ParentType::max_));
   2804 
   2805     Matcher<RawType> m8 = matcher_maker(-ParentType::max_, 0);
   2806     EXPECT_FALSE(m8.Matches(ParentType::max_));
   2807     EXPECT_TRUE(m8.Matches(-ParentType::max_));
   2808 
   2809     // The difference between max() and -max() normally overflows to infinity,
   2810     // but it should still match if the max_abs_error is also infinity.
   2811     Matcher<RawType> m9 = matcher_maker(
   2812         ParentType::max_, ParentType::infinity_);
   2813     EXPECT_TRUE(m8.Matches(-ParentType::max_));
   2814 
   2815     // matcher_maker can produce a Matcher<const RawType&>, which is needed in
   2816     // some cases.
   2817     Matcher<const RawType&> m10 = matcher_maker(0.0, 1.0);
   2818     EXPECT_TRUE(m10.Matches(-0.0));
   2819     EXPECT_TRUE(m10.Matches(ParentType::close_to_positive_zero_));
   2820     EXPECT_FALSE(m10.Matches(ParentType::close_to_one_));
   2821 
   2822     // matcher_maker can produce a Matcher<RawType&>, which is needed in some
   2823     // cases.
   2824     Matcher<RawType&> m11 = matcher_maker(0.0, 1.0);
   2825     RawType x = 0.0;
   2826     EXPECT_TRUE(m11.Matches(x));
   2827     x = 1.0f;
   2828     EXPECT_TRUE(m11.Matches(x));
   2829     x = -1.0f;
   2830     EXPECT_TRUE(m11.Matches(x));
   2831     x = 1.1f;
   2832     EXPECT_FALSE(m11.Matches(x));
   2833     x = -1.1f;
   2834     EXPECT_FALSE(m11.Matches(x));
   2835   }
   2836 };
   2837 
   2838 // Instantiate FloatingPointTest for testing floats.
   2839 typedef FloatingPointTest<float> FloatTest;
   2840 
   2841 TEST_F(FloatTest, FloatEqApproximatelyMatchesFloats) {
   2842   TestMatches(&FloatEq);
   2843 }
   2844 
   2845 TEST_F(FloatTest, NanSensitiveFloatEqApproximatelyMatchesFloats) {
   2846   TestMatches(&NanSensitiveFloatEq);
   2847 }
   2848 
   2849 TEST_F(FloatTest, FloatEqCannotMatchNaN) {
   2850   // FloatEq never matches NaN.
   2851   Matcher<float> m = FloatEq(nan1_);
   2852   EXPECT_FALSE(m.Matches(nan1_));
   2853   EXPECT_FALSE(m.Matches(nan2_));
   2854   EXPECT_FALSE(m.Matches(1.0));
   2855 }
   2856 
   2857 TEST_F(FloatTest, NanSensitiveFloatEqCanMatchNaN) {
   2858   // NanSensitiveFloatEq will match NaN.
   2859   Matcher<float> m = NanSensitiveFloatEq(nan1_);
   2860   EXPECT_TRUE(m.Matches(nan1_));
   2861   EXPECT_TRUE(m.Matches(nan2_));
   2862   EXPECT_FALSE(m.Matches(1.0));
   2863 }
   2864 
   2865 TEST_F(FloatTest, FloatEqCanDescribeSelf) {
   2866   Matcher<float> m1 = FloatEq(2.0f);
   2867   EXPECT_EQ("is approximately 2", Describe(m1));
   2868   EXPECT_EQ("isn't approximately 2", DescribeNegation(m1));
   2869 
   2870   Matcher<float> m2 = FloatEq(0.5f);
   2871   EXPECT_EQ("is approximately 0.5", Describe(m2));
   2872   EXPECT_EQ("isn't approximately 0.5", DescribeNegation(m2));
   2873 
   2874   Matcher<float> m3 = FloatEq(nan1_);
   2875   EXPECT_EQ("never matches", Describe(m3));
   2876   EXPECT_EQ("is anything", DescribeNegation(m3));
   2877 }
   2878 
   2879 TEST_F(FloatTest, NanSensitiveFloatEqCanDescribeSelf) {
   2880   Matcher<float> m1 = NanSensitiveFloatEq(2.0f);
   2881   EXPECT_EQ("is approximately 2", Describe(m1));
   2882   EXPECT_EQ("isn't approximately 2", DescribeNegation(m1));
   2883 
   2884   Matcher<float> m2 = NanSensitiveFloatEq(0.5f);
   2885   EXPECT_EQ("is approximately 0.5", Describe(m2));
   2886   EXPECT_EQ("isn't approximately 0.5", DescribeNegation(m2));
   2887 
   2888   Matcher<float> m3 = NanSensitiveFloatEq(nan1_);
   2889   EXPECT_EQ("is NaN", Describe(m3));
   2890   EXPECT_EQ("isn't NaN", DescribeNegation(m3));
   2891 }
   2892 
   2893 // Instantiate FloatingPointTest for testing floats with a user-specified
   2894 // max absolute error.
   2895 typedef FloatingPointNearTest<float> FloatNearTest;
   2896 
   2897 TEST_F(FloatNearTest, FloatNearMatches) {
   2898   TestNearMatches(&FloatNear);
   2899 }
   2900 
   2901 TEST_F(FloatNearTest, NanSensitiveFloatNearApproximatelyMatchesFloats) {
   2902   TestNearMatches(&NanSensitiveFloatNear);
   2903 }
   2904 
   2905 TEST_F(FloatNearTest, FloatNearCanDescribeSelf) {
   2906   Matcher<float> m1 = FloatNear(2.0f, 0.5f);
   2907   EXPECT_EQ("is approximately 2 (absolute error <= 0.5)", Describe(m1));
   2908   EXPECT_EQ(
   2909       "isn't approximately 2 (absolute error > 0.5)", DescribeNegation(m1));
   2910 
   2911   Matcher<float> m2 = FloatNear(0.5f, 0.5f);
   2912   EXPECT_EQ("is approximately 0.5 (absolute error <= 0.5)", Describe(m2));
   2913   EXPECT_EQ(
   2914       "isn't approximately 0.5 (absolute error > 0.5)", DescribeNegation(m2));
   2915 
   2916   Matcher<float> m3 = FloatNear(nan1_, 0.0);
   2917   EXPECT_EQ("never matches", Describe(m3));
   2918   EXPECT_EQ("is anything", DescribeNegation(m3));
   2919 }
   2920 
   2921 TEST_F(FloatNearTest, NanSensitiveFloatNearCanDescribeSelf) {
   2922   Matcher<float> m1 = NanSensitiveFloatNear(2.0f, 0.5f);
   2923   EXPECT_EQ("is approximately 2 (absolute error <= 0.5)", Describe(m1));
   2924   EXPECT_EQ(
   2925       "isn't approximately 2 (absolute error > 0.5)", DescribeNegation(m1));
   2926 
   2927   Matcher<float> m2 = NanSensitiveFloatNear(0.5f, 0.5f);
   2928   EXPECT_EQ("is approximately 0.5 (absolute error <= 0.5)", Describe(m2));
   2929   EXPECT_EQ(
   2930       "isn't approximately 0.5 (absolute error > 0.5)", DescribeNegation(m2));
   2931 
   2932   Matcher<float> m3 = NanSensitiveFloatNear(nan1_, 0.1f);
   2933   EXPECT_EQ("is NaN", Describe(m3));
   2934   EXPECT_EQ("isn't NaN", DescribeNegation(m3));
   2935 }
   2936 
   2937 TEST_F(FloatNearTest, FloatNearCannotMatchNaN) {
   2938   // FloatNear never matches NaN.
   2939   Matcher<float> m = FloatNear(ParentType::nan1_, 0.1f);
   2940   EXPECT_FALSE(m.Matches(nan1_));
   2941   EXPECT_FALSE(m.Matches(nan2_));
   2942   EXPECT_FALSE(m.Matches(1.0));
   2943 }
   2944 
   2945 TEST_F(FloatNearTest, NanSensitiveFloatNearCanMatchNaN) {
   2946   // NanSensitiveFloatNear will match NaN.
   2947   Matcher<float> m = NanSensitiveFloatNear(nan1_, 0.1f);
   2948   EXPECT_TRUE(m.Matches(nan1_));
   2949   EXPECT_TRUE(m.Matches(nan2_));
   2950   EXPECT_FALSE(m.Matches(1.0));
   2951 }
   2952 
   2953 // Instantiate FloatingPointTest for testing doubles.
   2954 typedef FloatingPointTest<double> DoubleTest;
   2955 
   2956 TEST_F(DoubleTest, DoubleEqApproximatelyMatchesDoubles) {
   2957   TestMatches(&DoubleEq);
   2958 }
   2959 
   2960 TEST_F(DoubleTest, NanSensitiveDoubleEqApproximatelyMatchesDoubles) {
   2961   TestMatches(&NanSensitiveDoubleEq);
   2962 }
   2963 
   2964 TEST_F(DoubleTest, DoubleEqCannotMatchNaN) {
   2965   // DoubleEq never matches NaN.
   2966   Matcher<double> m = DoubleEq(nan1_);
   2967   EXPECT_FALSE(m.Matches(nan1_));
   2968   EXPECT_FALSE(m.Matches(nan2_));
   2969   EXPECT_FALSE(m.Matches(1.0));
   2970 }
   2971 
   2972 TEST_F(DoubleTest, NanSensitiveDoubleEqCanMatchNaN) {
   2973   // NanSensitiveDoubleEq will match NaN.
   2974   Matcher<double> m = NanSensitiveDoubleEq(nan1_);
   2975   EXPECT_TRUE(m.Matches(nan1_));
   2976   EXPECT_TRUE(m.Matches(nan2_));
   2977   EXPECT_FALSE(m.Matches(1.0));
   2978 }
   2979 
   2980 TEST_F(DoubleTest, DoubleEqCanDescribeSelf) {
   2981   Matcher<double> m1 = DoubleEq(2.0);
   2982   EXPECT_EQ("is approximately 2", Describe(m1));
   2983   EXPECT_EQ("isn't approximately 2", DescribeNegation(m1));
   2984 
   2985   Matcher<double> m2 = DoubleEq(0.5);
   2986   EXPECT_EQ("is approximately 0.5", Describe(m2));
   2987   EXPECT_EQ("isn't approximately 0.5", DescribeNegation(m2));
   2988 
   2989   Matcher<double> m3 = DoubleEq(nan1_);
   2990   EXPECT_EQ("never matches", Describe(m3));
   2991   EXPECT_EQ("is anything", DescribeNegation(m3));
   2992 }
   2993 
   2994 TEST_F(DoubleTest, NanSensitiveDoubleEqCanDescribeSelf) {
   2995   Matcher<double> m1 = NanSensitiveDoubleEq(2.0);
   2996   EXPECT_EQ("is approximately 2", Describe(m1));
   2997   EXPECT_EQ("isn't approximately 2", DescribeNegation(m1));
   2998 
   2999   Matcher<double> m2 = NanSensitiveDoubleEq(0.5);
   3000   EXPECT_EQ("is approximately 0.5", Describe(m2));
   3001   EXPECT_EQ("isn't approximately 0.5", DescribeNegation(m2));
   3002 
   3003   Matcher<double> m3 = NanSensitiveDoubleEq(nan1_);
   3004   EXPECT_EQ("is NaN", Describe(m3));
   3005   EXPECT_EQ("isn't NaN", DescribeNegation(m3));
   3006 }
   3007 
   3008 // Instantiate FloatingPointTest for testing floats with a user-specified
   3009 // max absolute error.
   3010 typedef FloatingPointNearTest<double> DoubleNearTest;
   3011 
   3012 TEST_F(DoubleNearTest, DoubleNearMatches) {
   3013   TestNearMatches(&DoubleNear);
   3014 }
   3015 
   3016 TEST_F(DoubleNearTest, NanSensitiveDoubleNearApproximatelyMatchesDoubles) {
   3017   TestNearMatches(&NanSensitiveDoubleNear);
   3018 }
   3019 
   3020 TEST_F(DoubleNearTest, DoubleNearCanDescribeSelf) {
   3021   Matcher<double> m1 = DoubleNear(2.0, 0.5);
   3022   EXPECT_EQ("is approximately 2 (absolute error <= 0.5)", Describe(m1));
   3023   EXPECT_EQ(
   3024       "isn't approximately 2 (absolute error > 0.5)", DescribeNegation(m1));
   3025 
   3026   Matcher<double> m2 = DoubleNear(0.5, 0.5);
   3027   EXPECT_EQ("is approximately 0.5 (absolute error <= 0.5)", Describe(m2));
   3028   EXPECT_EQ(
   3029       "isn't approximately 0.5 (absolute error > 0.5)", DescribeNegation(m2));
   3030 
   3031   Matcher<double> m3 = DoubleNear(nan1_, 0.0);
   3032   EXPECT_EQ("never matches", Describe(m3));
   3033   EXPECT_EQ("is anything", DescribeNegation(m3));
   3034 }
   3035 
   3036 TEST_F(DoubleNearTest, NanSensitiveDoubleNearCanDescribeSelf) {
   3037   Matcher<double> m1 = NanSensitiveDoubleNear(2.0, 0.5);
   3038   EXPECT_EQ("is approximately 2 (absolute error <= 0.5)", Describe(m1));
   3039   EXPECT_EQ(
   3040       "isn't approximately 2 (absolute error > 0.5)", DescribeNegation(m1));
   3041 
   3042   Matcher<double> m2 = NanSensitiveDoubleNear(0.5, 0.5);
   3043   EXPECT_EQ("is approximately 0.5 (absolute error <= 0.5)", Describe(m2));
   3044   EXPECT_EQ(
   3045       "isn't approximately 0.5 (absolute error > 0.5)", DescribeNegation(m2));
   3046 
   3047   Matcher<double> m3 = NanSensitiveDoubleNear(nan1_, 0.1);
   3048   EXPECT_EQ("is NaN", Describe(m3));
   3049   EXPECT_EQ("isn't NaN", DescribeNegation(m3));
   3050 }
   3051 
   3052 TEST_F(DoubleNearTest, DoubleNearCannotMatchNaN) {
   3053   // DoubleNear never matches NaN.
   3054   Matcher<double> m = DoubleNear(ParentType::nan1_, 0.1);
   3055   EXPECT_FALSE(m.Matches(nan1_));
   3056   EXPECT_FALSE(m.Matches(nan2_));
   3057   EXPECT_FALSE(m.Matches(1.0));
   3058 }
   3059 
   3060 TEST_F(DoubleNearTest, NanSensitiveDoubleNearCanMatchNaN) {
   3061   // NanSensitiveDoubleNear will match NaN.
   3062   Matcher<double> m = NanSensitiveDoubleNear(nan1_, 0.1);
   3063   EXPECT_TRUE(m.Matches(nan1_));
   3064   EXPECT_TRUE(m.Matches(nan2_));
   3065   EXPECT_FALSE(m.Matches(1.0));
   3066 }
   3067 
   3068 TEST(PointeeTest, RawPointer) {
   3069   const Matcher<int*> m = Pointee(Ge(0));
   3070 
   3071   int n = 1;
   3072   EXPECT_TRUE(m.Matches(&n));
   3073   n = -1;
   3074   EXPECT_FALSE(m.Matches(&n));
   3075   EXPECT_FALSE(m.Matches(NULL));
   3076 }
   3077 
   3078 TEST(PointeeTest, RawPointerToConst) {
   3079   const Matcher<const double*> m = Pointee(Ge(0));
   3080 
   3081   double x = 1;
   3082   EXPECT_TRUE(m.Matches(&x));
   3083   x = -1;
   3084   EXPECT_FALSE(m.Matches(&x));
   3085   EXPECT_FALSE(m.Matches(NULL));
   3086 }
   3087 
   3088 TEST(PointeeTest, ReferenceToConstRawPointer) {
   3089   const Matcher<int* const &> m = Pointee(Ge(0));
   3090 
   3091   int n = 1;
   3092   EXPECT_TRUE(m.Matches(&n));
   3093   n = -1;
   3094   EXPECT_FALSE(m.Matches(&n));
   3095   EXPECT_FALSE(m.Matches(NULL));
   3096 }
   3097 
   3098 TEST(PointeeTest, ReferenceToNonConstRawPointer) {
   3099   const Matcher<double* &> m = Pointee(Ge(0));
   3100 
   3101   double x = 1.0;
   3102   double* p = &x;
   3103   EXPECT_TRUE(m.Matches(p));
   3104   x = -1;
   3105   EXPECT_FALSE(m.Matches(p));
   3106   p = NULL;
   3107   EXPECT_FALSE(m.Matches(p));
   3108 }
   3109 
   3110 // Minimal const-propagating pointer.
   3111 template <typename T>
   3112 class ConstPropagatingPtr {
   3113  public:
   3114   typedef T element_type;
   3115 
   3116   ConstPropagatingPtr() : val_() {}
   3117   explicit ConstPropagatingPtr(T* t) : val_(t) {}
   3118   ConstPropagatingPtr(const ConstPropagatingPtr& other) : val_(other.val_) {}
   3119 
   3120   T* get() { return val_; }
   3121   T& operator*() { return *val_; }
   3122   // Most smart pointers return non-const T* and T& from the next methods.
   3123   const T* get() const { return val_; }
   3124   const T& operator*() const { return *val_; }
   3125 
   3126  private:
   3127   T* val_;
   3128 };
   3129 
   3130 TEST(PointeeTest, WorksWithConstPropagatingPointers) {
   3131   const Matcher< ConstPropagatingPtr<int> > m = Pointee(Lt(5));
   3132   int three = 3;
   3133   const ConstPropagatingPtr<int> co(&three);
   3134   ConstPropagatingPtr<int> o(&three);
   3135   EXPECT_TRUE(m.Matches(o));
   3136   EXPECT_TRUE(m.Matches(co));
   3137   *o = 6;
   3138   EXPECT_FALSE(m.Matches(o));
   3139   EXPECT_FALSE(m.Matches(ConstPropagatingPtr<int>()));
   3140 }
   3141 
   3142 TEST(PointeeTest, NeverMatchesNull) {
   3143   const Matcher<const char*> m = Pointee(_);
   3144   EXPECT_FALSE(m.Matches(NULL));
   3145 }
   3146 
   3147 // Tests that we can write Pointee(value) instead of Pointee(Eq(value)).
   3148 TEST(PointeeTest, MatchesAgainstAValue) {
   3149   const Matcher<int*> m = Pointee(5);
   3150 
   3151   int n = 5;
   3152   EXPECT_TRUE(m.Matches(&n));
   3153   n = -1;
   3154   EXPECT_FALSE(m.Matches(&n));
   3155   EXPECT_FALSE(m.Matches(NULL));
   3156 }
   3157 
   3158 TEST(PointeeTest, CanDescribeSelf) {
   3159   const Matcher<int*> m = Pointee(Gt(3));
   3160   EXPECT_EQ("points to a value that is > 3", Describe(m));
   3161   EXPECT_EQ("does not point to a value that is > 3",
   3162             DescribeNegation(m));
   3163 }
   3164 
   3165 TEST(PointeeTest, CanExplainMatchResult) {
   3166   const Matcher<const string*> m = Pointee(StartsWith("Hi"));
   3167 
   3168   EXPECT_EQ("", Explain(m, static_cast<const string*>(NULL)));
   3169 
   3170   const Matcher<long*> m2 = Pointee(GreaterThan(1));  // NOLINT
   3171   long n = 3;  // NOLINT
   3172   EXPECT_EQ("which points to 3" + OfType("long") + ", which is 2 more than 1",
   3173             Explain(m2, &n));
   3174 }
   3175 
   3176 TEST(PointeeTest, AlwaysExplainsPointee) {
   3177   const Matcher<int*> m = Pointee(0);
   3178   int n = 42;
   3179   EXPECT_EQ("which points to 42" + OfType("int"), Explain(m, &n));
   3180 }
   3181 
   3182 // An uncopyable class.
   3183 class Uncopyable {
   3184  public:
   3185   explicit Uncopyable(int a_value) : value_(a_value) {}
   3186 
   3187   int value() const { return value_; }
   3188  private:
   3189   const int value_;
   3190   GTEST_DISALLOW_COPY_AND_ASSIGN_(Uncopyable);
   3191 };
   3192 
   3193 // Returns true iff x.value() is positive.
   3194 bool ValueIsPositive(const Uncopyable& x) { return x.value() > 0; }
   3195 
   3196 // A user-defined struct for testing Field().
   3197 struct AStruct {
   3198   AStruct() : x(0), y(1.0), z(5), p(NULL) {}
   3199   AStruct(const AStruct& rhs)
   3200       : x(rhs.x), y(rhs.y), z(rhs.z.value()), p(rhs.p) {}
   3201 
   3202   int x;           // A non-const field.
   3203   const double y;  // A const field.
   3204   Uncopyable z;    // An uncopyable field.
   3205   const char* p;   // A pointer field.
   3206 
   3207  private:
   3208   GTEST_DISALLOW_ASSIGN_(AStruct);
   3209 };
   3210 
   3211 // A derived struct for testing Field().
   3212 struct DerivedStruct : public AStruct {
   3213   char ch;
   3214 
   3215  private:
   3216   GTEST_DISALLOW_ASSIGN_(DerivedStruct);
   3217 };
   3218 
   3219 // Tests that Field(&Foo::field, ...) works when field is non-const.
   3220 TEST(FieldTest, WorksForNonConstField) {
   3221   Matcher<AStruct> m = Field(&AStruct::x, Ge(0));
   3222 
   3223   AStruct a;
   3224   EXPECT_TRUE(m.Matches(a));
   3225   a.x = -1;
   3226   EXPECT_FALSE(m.Matches(a));
   3227 }
   3228 
   3229 // Tests that Field(&Foo::field, ...) works when field is const.
   3230 TEST(FieldTest, WorksForConstField) {
   3231   AStruct a;
   3232 
   3233   Matcher<AStruct> m = Field(&AStruct::y, Ge(0.0));
   3234   EXPECT_TRUE(m.Matches(a));
   3235   m = Field(&AStruct::y, Le(0.0));
   3236   EXPECT_FALSE(m.Matches(a));
   3237 }
   3238 
   3239 // Tests that Field(&Foo::field, ...) works when field is not copyable.
   3240 TEST(FieldTest, WorksForUncopyableField) {
   3241   AStruct a;
   3242 
   3243   Matcher<AStruct> m = Field(&AStruct::z, Truly(ValueIsPositive));
   3244   EXPECT_TRUE(m.Matches(a));
   3245   m = Field(&AStruct::z, Not(Truly(ValueIsPositive)));
   3246   EXPECT_FALSE(m.Matches(a));
   3247 }
   3248 
   3249 // Tests that Field(&Foo::field, ...) works when field is a pointer.
   3250 TEST(FieldTest, WorksForPointerField) {
   3251   // Matching against NULL.
   3252   Matcher<AStruct> m = Field(&AStruct::p, static_cast<const char*>(NULL));
   3253   AStruct a;
   3254   EXPECT_TRUE(m.Matches(a));
   3255   a.p = "hi";
   3256   EXPECT_FALSE(m.Matches(a));
   3257 
   3258   // Matching a pointer that is not NULL.
   3259   m = Field(&AStruct::p, StartsWith("hi"));
   3260   a.p = "hill";
   3261   EXPECT_TRUE(m.Matches(a));
   3262   a.p = "hole";
   3263   EXPECT_FALSE(m.Matches(a));
   3264 }
   3265 
   3266 // Tests that Field() works when the object is passed by reference.
   3267 TEST(FieldTest, WorksForByRefArgument) {
   3268   Matcher<const AStruct&> m = Field(&AStruct::x, Ge(0));
   3269 
   3270   AStruct a;
   3271   EXPECT_TRUE(m.Matches(a));
   3272   a.x = -1;
   3273   EXPECT_FALSE(m.Matches(a));
   3274 }
   3275 
   3276 // Tests that Field(&Foo::field, ...) works when the argument's type
   3277 // is a sub-type of Foo.
   3278 TEST(FieldTest, WorksForArgumentOfSubType) {
   3279   // Note that the matcher expects DerivedStruct but we say AStruct
   3280   // inside Field().
   3281   Matcher<const DerivedStruct&> m = Field(&AStruct::x, Ge(0));
   3282 
   3283   DerivedStruct d;
   3284   EXPECT_TRUE(m.Matches(d));
   3285   d.x = -1;
   3286   EXPECT_FALSE(m.Matches(d));
   3287 }
   3288 
   3289 // Tests that Field(&Foo::field, m) works when field's type and m's
   3290 // argument type are compatible but not the same.
   3291 TEST(FieldTest, WorksForCompatibleMatcherType) {
   3292   // The field is an int, but the inner matcher expects a signed char.
   3293   Matcher<const AStruct&> m = Field(&AStruct::x,
   3294                                     Matcher<signed char>(Ge(0)));
   3295 
   3296   AStruct a;
   3297   EXPECT_TRUE(m.Matches(a));
   3298   a.x = -1;
   3299   EXPECT_FALSE(m.Matches(a));
   3300 }
   3301 
   3302 // Tests that Field() can describe itself.
   3303 TEST(FieldTest, CanDescribeSelf) {
   3304   Matcher<const AStruct&> m = Field(&AStruct::x, Ge(0));
   3305 
   3306   EXPECT_EQ("is an object whose given field is >= 0", Describe(m));
   3307   EXPECT_EQ("is an object whose given field isn't >= 0", DescribeNegation(m));
   3308 }
   3309 
   3310 // Tests that Field() can explain the match result.
   3311 TEST(FieldTest, CanExplainMatchResult) {
   3312   Matcher<const AStruct&> m = Field(&AStruct::x, Ge(0));
   3313 
   3314   AStruct a;
   3315   a.x = 1;
   3316   EXPECT_EQ("whose given field is 1" + OfType("int"), Explain(m, a));
   3317 
   3318   m = Field(&AStruct::x, GreaterThan(0));
   3319   EXPECT_EQ(
   3320       "whose given field is 1" + OfType("int") + ", which is 1 more than 0",
   3321       Explain(m, a));
   3322 }
   3323 
   3324 // Tests that Field() works when the argument is a pointer to const.
   3325 TEST(FieldForPointerTest, WorksForPointerToConst) {
   3326   Matcher<const AStruct*> m = Field(&AStruct::x, Ge(0));
   3327 
   3328   AStruct a;
   3329   EXPECT_TRUE(m.Matches(&a));
   3330   a.x = -1;
   3331   EXPECT_FALSE(m.Matches(&a));
   3332 }
   3333 
   3334 // Tests that Field() works when the argument is a pointer to non-const.
   3335 TEST(FieldForPointerTest, WorksForPointerToNonConst) {
   3336   Matcher<AStruct*> m = Field(&AStruct::x, Ge(0));
   3337 
   3338   AStruct a;
   3339   EXPECT_TRUE(m.Matches(&a));
   3340   a.x = -1;
   3341   EXPECT_FALSE(m.Matches(&a));
   3342 }
   3343 
   3344 // Tests that Field() works when the argument is a reference to a const pointer.
   3345 TEST(FieldForPointerTest, WorksForReferenceToConstPointer) {
   3346   Matcher<AStruct* const&> m = Field(&AStruct::x, Ge(0));
   3347 
   3348   AStruct a;
   3349   EXPECT_TRUE(m.Matches(&a));
   3350   a.x = -1;
   3351   EXPECT_FALSE(m.Matches(&a));
   3352 }
   3353 
   3354 // Tests that Field() does not match the NULL pointer.
   3355 TEST(FieldForPointerTest, DoesNotMatchNull) {
   3356   Matcher<const AStruct*> m = Field(&AStruct::x, _);
   3357   EXPECT_FALSE(m.Matches(NULL));
   3358 }
   3359 
   3360 // Tests that Field(&Foo::field, ...) works when the argument's type
   3361 // is a sub-type of const Foo*.
   3362 TEST(FieldForPointerTest, WorksForArgumentOfSubType) {
   3363   // Note that the matcher expects DerivedStruct but we say AStruct
   3364   // inside Field().
   3365   Matcher<DerivedStruct*> m = Field(&AStruct::x, Ge(0));
   3366 
   3367   DerivedStruct d;
   3368   EXPECT_TRUE(m.Matches(&d));
   3369   d.x = -1;
   3370   EXPECT_FALSE(m.Matches(&d));
   3371 }
   3372 
   3373 // Tests that Field() can describe itself when used to match a pointer.
   3374 TEST(FieldForPointerTest, CanDescribeSelf) {
   3375   Matcher<const AStruct*> m = Field(&AStruct::x, Ge(0));
   3376 
   3377   EXPECT_EQ("is an object whose given field is >= 0", Describe(m));
   3378   EXPECT_EQ("is an object whose given field isn't >= 0", DescribeNegation(m));
   3379 }
   3380 
   3381 // Tests that Field() can explain the result of matching a pointer.
   3382 TEST(FieldForPointerTest, CanExplainMatchResult) {
   3383   Matcher<const AStruct*> m = Field(&AStruct::x, Ge(0));
   3384 
   3385   AStruct a;
   3386   a.x = 1;
   3387   EXPECT_EQ("", Explain(m, static_cast<const AStruct*>(NULL)));
   3388   EXPECT_EQ("which points to an object whose given field is 1" + OfType("int"),
   3389             Explain(m, &a));
   3390 
   3391   m = Field(&AStruct::x, GreaterThan(0));
   3392   EXPECT_EQ("which points to an object whose given field is 1" + OfType("int") +
   3393             ", which is 1 more than 0", Explain(m, &a));
   3394 }
   3395 
   3396 // A user-defined class for testing Property().
   3397 class AClass {
   3398  public:
   3399   AClass() : n_(0) {}
   3400 
   3401   // A getter that returns a non-reference.
   3402   int n() const { return n_; }
   3403 
   3404   void set_n(int new_n) { n_ = new_n; }
   3405 
   3406   // A getter that returns a reference to const.
   3407   const string& s() const { return s_; }
   3408 
   3409   void set_s(const string& new_s) { s_ = new_s; }
   3410 
   3411   // A getter that returns a reference to non-const.
   3412   double& x() const { return x_; }
   3413  private:
   3414   int n_;
   3415   string s_;
   3416 
   3417   static double x_;
   3418 };
   3419 
   3420 double AClass::x_ = 0.0;
   3421 
   3422 // A derived class for testing Property().
   3423 class DerivedClass : public AClass {
   3424  private:
   3425   int k_;
   3426 };
   3427 
   3428 // Tests that Property(&Foo::property, ...) works when property()
   3429 // returns a non-reference.
   3430 TEST(PropertyTest, WorksForNonReferenceProperty) {
   3431   Matcher<const AClass&> m = Property(&AClass::n, Ge(0));
   3432 
   3433   AClass a;
   3434   a.set_n(1);
   3435   EXPECT_TRUE(m.Matches(a));
   3436 
   3437   a.set_n(-1);
   3438   EXPECT_FALSE(m.Matches(a));
   3439 }
   3440 
   3441 // Tests that Property(&Foo::property, ...) works when property()
   3442 // returns a reference to const.
   3443 TEST(PropertyTest, WorksForReferenceToConstProperty) {
   3444   Matcher<const AClass&> m = Property(&AClass::s, StartsWith("hi"));
   3445 
   3446   AClass a;
   3447   a.set_s("hill");
   3448   EXPECT_TRUE(m.Matches(a));
   3449 
   3450   a.set_s("hole");
   3451   EXPECT_FALSE(m.Matches(a));
   3452 }
   3453 
   3454 // Tests that Property(&Foo::property, ...) works when property()
   3455 // returns a reference to non-const.
   3456 TEST(PropertyTest, WorksForReferenceToNonConstProperty) {
   3457   double x = 0.0;
   3458   AClass a;
   3459 
   3460   Matcher<const AClass&> m = Property(&AClass::x, Ref(x));
   3461   EXPECT_FALSE(m.Matches(a));
   3462 
   3463   m = Property(&AClass::x, Not(Ref(x)));
   3464   EXPECT_TRUE(m.Matches(a));
   3465 }
   3466 
   3467 // Tests that Property(&Foo::property, ...) works when the argument is
   3468 // passed by value.
   3469 TEST(PropertyTest, WorksForByValueArgument) {
   3470   Matcher<AClass> m = Property(&AClass::s, StartsWith("hi"));
   3471 
   3472   AClass a;
   3473   a.set_s("hill");
   3474   EXPECT_TRUE(m.Matches(a));
   3475 
   3476   a.set_s("hole");
   3477   EXPECT_FALSE(m.Matches(a));
   3478 }
   3479 
   3480 // Tests that Property(&Foo::property, ...) works when the argument's
   3481 // type is a sub-type of Foo.
   3482 TEST(PropertyTest, WorksForArgumentOfSubType) {
   3483   // The matcher expects a DerivedClass, but inside the Property() we
   3484   // say AClass.
   3485   Matcher<const DerivedClass&> m = Property(&AClass::n, Ge(0));
   3486 
   3487   DerivedClass d;
   3488   d.set_n(1);
   3489   EXPECT_TRUE(m.Matches(d));
   3490 
   3491   d.set_n(-1);
   3492   EXPECT_FALSE(m.Matches(d));
   3493 }
   3494 
   3495 // Tests that Property(&Foo::property, m) works when property()'s type
   3496 // and m's argument type are compatible but different.
   3497 TEST(PropertyTest, WorksForCompatibleMatcherType) {
   3498   // n() returns an int but the inner matcher expects a signed char.
   3499   Matcher<const AClass&> m = Property(&AClass::n,
   3500                                       Matcher<signed char>(Ge(0)));
   3501 
   3502   AClass a;
   3503   EXPECT_TRUE(m.Matches(a));
   3504   a.set_n(-1);
   3505   EXPECT_FALSE(m.Matches(a));
   3506 }
   3507 
   3508 // Tests that Property() can describe itself.
   3509 TEST(PropertyTest, CanDescribeSelf) {
   3510   Matcher<const AClass&> m = Property(&AClass::n, Ge(0));
   3511 
   3512   EXPECT_EQ("is an object whose given property is >= 0", Describe(m));
   3513   EXPECT_EQ("is an object whose given property isn't >= 0",
   3514             DescribeNegation(m));
   3515 }
   3516 
   3517 // Tests that Property() can explain the match result.
   3518 TEST(PropertyTest, CanExplainMatchResult) {
   3519   Matcher<const AClass&> m = Property(&AClass::n, Ge(0));
   3520 
   3521   AClass a;
   3522   a.set_n(1);
   3523   EXPECT_EQ("whose given property is 1" + OfType("int"), Explain(m, a));
   3524 
   3525   m = Property(&AClass::n, GreaterThan(0));
   3526   EXPECT_EQ(
   3527       "whose given property is 1" + OfType("int") + ", which is 1 more than 0",
   3528       Explain(m, a));
   3529 }
   3530 
   3531 // Tests that Property() works when the argument is a pointer to const.
   3532 TEST(PropertyForPointerTest, WorksForPointerToConst) {
   3533   Matcher<const AClass*> m = Property(&AClass::n, Ge(0));
   3534 
   3535   AClass a;
   3536   a.set_n(1);
   3537   EXPECT_TRUE(m.Matches(&a));
   3538 
   3539   a.set_n(-1);
   3540   EXPECT_FALSE(m.Matches(&a));
   3541 }
   3542 
   3543 // Tests that Property() works when the argument is a pointer to non-const.
   3544 TEST(PropertyForPointerTest, WorksForPointerToNonConst) {
   3545   Matcher<AClass*> m = Property(&AClass::s, StartsWith("hi"));
   3546 
   3547   AClass a;
   3548   a.set_s("hill");
   3549   EXPECT_TRUE(m.Matches(&a));
   3550 
   3551   a.set_s("hole");
   3552   EXPECT_FALSE(m.Matches(&a));
   3553 }
   3554 
   3555 // Tests that Property() works when the argument is a reference to a
   3556 // const pointer.
   3557 TEST(PropertyForPointerTest, WorksForReferenceToConstPointer) {
   3558   Matcher<AClass* const&> m = Property(&AClass::s, StartsWith("hi"));
   3559 
   3560   AClass a;
   3561   a.set_s("hill");
   3562   EXPECT_TRUE(m.Matches(&a));
   3563 
   3564   a.set_s("hole");
   3565   EXPECT_FALSE(m.Matches(&a));
   3566 }
   3567 
   3568 // Tests that Property() does not match the NULL pointer.
   3569 TEST(PropertyForPointerTest, WorksForReferenceToNonConstProperty) {
   3570   Matcher<const AClass*> m = Property(&AClass::x, _);
   3571   EXPECT_FALSE(m.Matches(NULL));
   3572 }
   3573 
   3574 // Tests that Property(&Foo::property, ...) works when the argument's
   3575 // type is a sub-type of const Foo*.
   3576 TEST(PropertyForPointerTest, WorksForArgumentOfSubType) {
   3577   // The matcher expects a DerivedClass, but inside the Property() we
   3578   // say AClass.
   3579   Matcher<const DerivedClass*> m = Property(&AClass::n, Ge(0));
   3580 
   3581   DerivedClass d;
   3582   d.set_n(1);
   3583   EXPECT_TRUE(m.Matches(&d));
   3584 
   3585   d.set_n(-1);
   3586   EXPECT_FALSE(m.Matches(&d));
   3587 }
   3588 
   3589 // Tests that Property() can describe itself when used to match a pointer.
   3590 TEST(PropertyForPointerTest, CanDescribeSelf) {
   3591   Matcher<const AClass*> m = Property(&AClass::n, Ge(0));
   3592 
   3593   EXPECT_EQ("is an object whose given property is >= 0", Describe(m));
   3594   EXPECT_EQ("is an object whose given property isn't >= 0",
   3595             DescribeNegation(m));
   3596 }
   3597 
   3598 // Tests that Property() can explain the result of matching a pointer.
   3599 TEST(PropertyForPointerTest, CanExplainMatchResult) {
   3600   Matcher<const AClass*> m = Property(&AClass::n, Ge(0));
   3601 
   3602   AClass a;
   3603   a.set_n(1);
   3604   EXPECT_EQ("", Explain(m, static_cast<const AClass*>(NULL)));
   3605   EXPECT_EQ(
   3606       "which points to an object whose given property is 1" + OfType("int"),
   3607       Explain(m, &a));
   3608 
   3609   m = Property(&AClass::n, GreaterThan(0));
   3610   EXPECT_EQ("which points to an object whose given property is 1" +
   3611             OfType("int") + ", which is 1 more than 0",
   3612             Explain(m, &a));
   3613 }
   3614 
   3615 // Tests ResultOf.
   3616 
   3617 // Tests that ResultOf(f, ...) compiles and works as expected when f is a
   3618 // function pointer.
   3619 string IntToStringFunction(int input) { return input == 1 ? "foo" : "bar"; }
   3620 
   3621 TEST(ResultOfTest, WorksForFunctionPointers) {
   3622   Matcher<int> matcher = ResultOf(&IntToStringFunction, Eq(string("foo")));
   3623 
   3624   EXPECT_TRUE(matcher.Matches(1));
   3625   EXPECT_FALSE(matcher.Matches(2));
   3626 }
   3627 
   3628 // Tests that ResultOf() can describe itself.
   3629 TEST(ResultOfTest, CanDescribeItself) {
   3630   Matcher<int> matcher = ResultOf(&IntToStringFunction, StrEq("foo"));
   3631 
   3632   EXPECT_EQ("is mapped by the given callable to a value that "
   3633             "is equal to \"foo\"", Describe(matcher));
   3634   EXPECT_EQ("is mapped by the given callable to a value that "
   3635             "isn't equal to \"foo\"", DescribeNegation(matcher));
   3636 }
   3637 
   3638 // Tests that ResultOf() can explain the match result.
   3639 int IntFunction(int input) { return input == 42 ? 80 : 90; }
   3640 
   3641 TEST(ResultOfTest, CanExplainMatchResult) {
   3642   Matcher<int> matcher = ResultOf(&IntFunction, Ge(85));
   3643   EXPECT_EQ("which is mapped by the given callable to 90" + OfType("int"),
   3644             Explain(matcher, 36));
   3645 
   3646   matcher = ResultOf(&IntFunction, GreaterThan(85));
   3647   EXPECT_EQ("which is mapped by the given callable to 90" + OfType("int") +
   3648             ", which is 5 more than 85", Explain(matcher, 36));
   3649 }
   3650 
   3651 // Tests that ResultOf(f, ...) compiles and works as expected when f(x)
   3652 // returns a non-reference.
   3653 TEST(ResultOfTest, WorksForNonReferenceResults) {
   3654   Matcher<int> matcher = ResultOf(&IntFunction, Eq(80));
   3655 
   3656   EXPECT_TRUE(matcher.Matches(42));
   3657   EXPECT_FALSE(matcher.Matches(36));
   3658 }
   3659 
   3660 // Tests that ResultOf(f, ...) compiles and works as expected when f(x)
   3661 // returns a reference to non-const.
   3662 double& DoubleFunction(double& input) { return input; }  // NOLINT
   3663 
   3664 Uncopyable& RefUncopyableFunction(Uncopyable& obj) {  // NOLINT
   3665   return obj;
   3666 }
   3667 
   3668 TEST(ResultOfTest, WorksForReferenceToNonConstResults) {
   3669   double x = 3.14;
   3670   double x2 = x;
   3671   Matcher<double&> matcher = ResultOf(&DoubleFunction, Ref(x));
   3672 
   3673   EXPECT_TRUE(matcher.Matches(x));
   3674   EXPECT_FALSE(matcher.Matches(x2));
   3675 
   3676   // Test that ResultOf works with uncopyable objects
   3677   Uncopyable obj(0);
   3678   Uncopyable obj2(0);
   3679   Matcher<Uncopyable&> matcher2 =
   3680       ResultOf(&RefUncopyableFunction, Ref(obj));
   3681 
   3682   EXPECT_TRUE(matcher2.Matches(obj));
   3683   EXPECT_FALSE(matcher2.Matches(obj2));
   3684 }
   3685 
   3686 // Tests that ResultOf(f, ...) compiles and works as expected when f(x)
   3687 // returns a reference to const.
   3688 const string& StringFunction(const string& input) { return input; }
   3689 
   3690 TEST(ResultOfTest, WorksForReferenceToConstResults) {
   3691   string s = "foo";
   3692   string s2 = s;
   3693   Matcher<const string&> matcher = ResultOf(&StringFunction, Ref(s));
   3694 
   3695   EXPECT_TRUE(matcher.Matches(s));
   3696   EXPECT_FALSE(matcher.Matches(s2));
   3697 }
   3698 
   3699 // Tests that ResultOf(f, m) works when f(x) and m's
   3700 // argument types are compatible but different.
   3701 TEST(ResultOfTest, WorksForCompatibleMatcherTypes) {
   3702   // IntFunction() returns int but the inner matcher expects a signed char.
   3703   Matcher<int> matcher = ResultOf(IntFunction, Matcher<signed char>(Ge(85)));
   3704 
   3705   EXPECT_TRUE(matcher.Matches(36));
   3706   EXPECT_FALSE(matcher.Matches(42));
   3707 }
   3708 
   3709 // Tests that the program aborts when ResultOf is passed
   3710 // a NULL function pointer.
   3711 TEST(ResultOfDeathTest, DiesOnNullFunctionPointers) {
   3712   EXPECT_DEATH_IF_SUPPORTED(
   3713       ResultOf(static_cast<string(*)(int dummy)>(NULL), Eq(string("foo"))),
   3714                "NULL function pointer is passed into ResultOf\\(\\)\\.");
   3715 }
   3716 
   3717 // Tests that ResultOf(f, ...) compiles and works as expected when f is a
   3718 // function reference.
   3719 TEST(ResultOfTest, WorksForFunctionReferences) {
   3720   Matcher<int> matcher = ResultOf(IntToStringFunction, StrEq("foo"));
   3721   EXPECT_TRUE(matcher.Matches(1));
   3722   EXPECT_FALSE(matcher.Matches(2));
   3723 }
   3724 
   3725 // Tests that ResultOf(f, ...) compiles and works as expected when f is a
   3726 // function object.
   3727 struct Functor : public ::std::unary_function<int, string> {
   3728   result_type operator()(argument_type input) const {
   3729     return IntToStringFunction(input);
   3730   }
   3731 };
   3732 
   3733 TEST(ResultOfTest, WorksForFunctors) {
   3734   Matcher<int> matcher = ResultOf(Functor(), Eq(string("foo")));
   3735 
   3736   EXPECT_TRUE(matcher.Matches(1));
   3737   EXPECT_FALSE(matcher.Matches(2));
   3738 }
   3739 
   3740 // Tests that ResultOf(f, ...) compiles and works as expected when f is a
   3741 // functor with more then one operator() defined. ResultOf() must work
   3742 // for each defined operator().
   3743 struct PolymorphicFunctor {
   3744   typedef int result_type;
   3745   int operator()(int n) { return n; }
   3746   int operator()(const char* s) { return static_cast<int>(strlen(s)); }
   3747 };
   3748 
   3749 TEST(ResultOfTest, WorksForPolymorphicFunctors) {
   3750   Matcher<int> matcher_int = ResultOf(PolymorphicFunctor(), Ge(5));
   3751 
   3752   EXPECT_TRUE(matcher_int.Matches(10));
   3753   EXPECT_FALSE(matcher_int.Matches(2));
   3754 
   3755   Matcher<const char*> matcher_string = ResultOf(PolymorphicFunctor(), Ge(5));
   3756 
   3757   EXPECT_TRUE(matcher_string.Matches("long string"));
   3758   EXPECT_FALSE(matcher_string.Matches("shrt"));
   3759 }
   3760 
   3761 const int* ReferencingFunction(const int& n) { return &n; }
   3762 
   3763 struct ReferencingFunctor {
   3764   typedef const int* result_type;
   3765   result_type operator()(const int& n) { return &n; }
   3766 };
   3767 
   3768 TEST(ResultOfTest, WorksForReferencingCallables) {
   3769   const int n = 1;
   3770   const int n2 = 1;
   3771   Matcher<const int&> matcher2 = ResultOf(ReferencingFunction, Eq(&n));
   3772   EXPECT_TRUE(matcher2.Matches(n));
   3773   EXPECT_FALSE(matcher2.Matches(n2));
   3774 
   3775   Matcher<const int&> matcher3 = ResultOf(ReferencingFunctor(), Eq(&n));
   3776   EXPECT_TRUE(matcher3.Matches(n));
   3777   EXPECT_FALSE(matcher3.Matches(n2));
   3778 }
   3779 
   3780 class DivisibleByImpl {
   3781  public:
   3782   explicit DivisibleByImpl(int a_divider) : divider_(a_divider) {}
   3783 
   3784   // For testing using ExplainMatchResultTo() with polymorphic matchers.
   3785   template <typename T>
   3786   bool MatchAndExplain(const T& n, MatchResultListener* listener) const {
   3787     *listener << "which is " << (n % divider_) << " modulo "
   3788               << divider_;
   3789     return (n % divider_) == 0;
   3790   }
   3791 
   3792   void DescribeTo(ostream* os) const {
   3793     *os << "is divisible by " << divider_;
   3794   }
   3795 
   3796   void DescribeNegationTo(ostream* os) const {
   3797     *os << "is not divisible by " << divider_;
   3798   }
   3799 
   3800   void set_divider(int a_divider) { divider_ = a_divider; }
   3801   int divider() const { return divider_; }
   3802 
   3803  private:
   3804   int divider_;
   3805 };
   3806 
   3807 PolymorphicMatcher<DivisibleByImpl> DivisibleBy(int n) {
   3808   return MakePolymorphicMatcher(DivisibleByImpl(n));
   3809 }
   3810 
   3811 // Tests that when AllOf() fails, only the first failing matcher is
   3812 // asked to explain why.
   3813 TEST(ExplainMatchResultTest, AllOf_False_False) {
   3814   const Matcher<int> m = AllOf(DivisibleBy(4), DivisibleBy(3));
   3815   EXPECT_EQ("which is 1 modulo 4", Explain(m, 5));
   3816 }
   3817 
   3818 // Tests that when AllOf() fails, only the first failing matcher is
   3819 // asked to explain why.
   3820 TEST(ExplainMatchResultTest, AllOf_False_True) {
   3821   const Matcher<int> m = AllOf(DivisibleBy(4), DivisibleBy(3));
   3822   EXPECT_EQ("which is 2 modulo 4", Explain(m, 6));
   3823 }
   3824 
   3825 // Tests that when AllOf() fails, only the first failing matcher is
   3826 // asked to explain why.
   3827 TEST(ExplainMatchResultTest, AllOf_True_False) {
   3828   const Matcher<int> m = AllOf(Ge(1), DivisibleBy(3));
   3829   EXPECT_EQ("which is 2 modulo 3", Explain(m, 5));
   3830 }
   3831 
   3832 // Tests that when AllOf() succeeds, all matchers are asked to explain
   3833 // why.
   3834 TEST(ExplainMatchResultTest, AllOf_True_True) {
   3835   const Matcher<int> m = AllOf(DivisibleBy(2), DivisibleBy(3));
   3836   EXPECT_EQ("which is 0 modulo 2, and which is 0 modulo 3", Explain(m, 6));
   3837 }
   3838 
   3839 TEST(ExplainMatchResultTest, AllOf_True_True_2) {
   3840   const Matcher<int> m = AllOf(Ge(2), Le(3));
   3841   EXPECT_EQ("", Explain(m, 2));
   3842 }
   3843 
   3844 TEST(ExplainmatcherResultTest, MonomorphicMatcher) {
   3845   const Matcher<int> m = GreaterThan(5);
   3846   EXPECT_EQ("which is 1 more than 5", Explain(m, 6));
   3847 }
   3848 
   3849 // The following two tests verify that values without a public copy
   3850 // ctor can be used as arguments to matchers like Eq(), Ge(), and etc
   3851 // with the help of ByRef().
   3852 
   3853 class NotCopyable {
   3854  public:
   3855   explicit NotCopyable(int a_value) : value_(a_value) {}
   3856 
   3857   int value() const { return value_; }
   3858 
   3859   bool operator==(const NotCopyable& rhs) const {
   3860     return value() == rhs.value();
   3861   }
   3862 
   3863   bool operator>=(const NotCopyable& rhs) const {
   3864     return value() >= rhs.value();
   3865   }
   3866  private:
   3867   int value_;
   3868 
   3869   GTEST_DISALLOW_COPY_AND_ASSIGN_(NotCopyable);
   3870 };
   3871 
   3872 TEST(ByRefTest, AllowsNotCopyableConstValueInMatchers) {
   3873   const NotCopyable const_value1(1);
   3874   const Matcher<const NotCopyable&> m = Eq(ByRef(const_value1));
   3875 
   3876   const NotCopyable n1(1), n2(2);
   3877   EXPECT_TRUE(m.Matches(n1));
   3878   EXPECT_FALSE(m.Matches(n2));
   3879 }
   3880 
   3881 TEST(ByRefTest, AllowsNotCopyableValueInMatchers) {
   3882   NotCopyable value2(2);
   3883   const Matcher<NotCopyable&> m = Ge(ByRef(value2));
   3884 
   3885   NotCopyable n1(1), n2(2);
   3886   EXPECT_FALSE(m.Matches(n1));
   3887   EXPECT_TRUE(m.Matches(n2));
   3888 }
   3889 
   3890 TEST(IsEmptyTest, ImplementsIsEmpty) {
   3891   vector<int> container;
   3892   EXPECT_THAT(container, IsEmpty());
   3893   container.push_back(0);
   3894   EXPECT_THAT(container, Not(IsEmpty()));
   3895   container.push_back(1);
   3896   EXPECT_THAT(container, Not(IsEmpty()));
   3897 }
   3898 
   3899 TEST(IsEmptyTest, WorksWithString) {
   3900   string text;
   3901   EXPECT_THAT(text, IsEmpty());
   3902   text = "foo";
   3903   EXPECT_THAT(text, Not(IsEmpty()));
   3904   text = string("\0", 1);
   3905   EXPECT_THAT(text, Not(IsEmpty()));
   3906 }
   3907 
   3908 TEST(IsEmptyTest, CanDescribeSelf) {
   3909   Matcher<vector<int> > m = IsEmpty();
   3910   EXPECT_EQ("is empty", Describe(m));
   3911   EXPECT_EQ("isn't empty", DescribeNegation(m));
   3912 }
   3913 
   3914 TEST(IsEmptyTest, ExplainsResult) {
   3915   Matcher<vector<int> > m = IsEmpty();
   3916   vector<int> container;
   3917   EXPECT_EQ("", Explain(m, container));
   3918   container.push_back(0);
   3919   EXPECT_EQ("whose size is 1", Explain(m, container));
   3920 }
   3921 
   3922 TEST(SizeIsTest, ImplementsSizeIs) {
   3923   vector<int> container;
   3924   EXPECT_THAT(container, SizeIs(0));
   3925   EXPECT_THAT(container, Not(SizeIs(1)));
   3926   container.push_back(0);
   3927   EXPECT_THAT(container, Not(SizeIs(0)));
   3928   EXPECT_THAT(container, SizeIs(1));
   3929   container.push_back(0);
   3930   EXPECT_THAT(container, Not(SizeIs(0)));
   3931   EXPECT_THAT(container, SizeIs(2));
   3932 }
   3933 
   3934 TEST(SizeIsTest, WorksWithMap) {
   3935   map<string, int> container;
   3936   EXPECT_THAT(container, SizeIs(0));
   3937   EXPECT_THAT(container, Not(SizeIs(1)));
   3938   container.insert(make_pair("foo", 1));
   3939   EXPECT_THAT(container, Not(SizeIs(0)));
   3940   EXPECT_THAT(container, SizeIs(1));
   3941   container.insert(make_pair("bar", 2));
   3942   EXPECT_THAT(container, Not(SizeIs(0)));
   3943   EXPECT_THAT(container, SizeIs(2));
   3944 }
   3945 
   3946 TEST(SizeIsTest, WorksWithReferences) {
   3947   vector<int> container;
   3948   Matcher<const vector<int>&> m = SizeIs(1);
   3949   EXPECT_THAT(container, Not(m));
   3950   container.push_back(0);
   3951   EXPECT_THAT(container, m);
   3952 }
   3953 
   3954 TEST(SizeIsTest, CanDescribeSelf) {
   3955   Matcher<vector<int> > m = SizeIs(2);
   3956   EXPECT_EQ("size is equal to 2", Describe(m));
   3957   EXPECT_EQ("size isn't equal to 2", DescribeNegation(m));
   3958 }
   3959 
   3960 TEST(SizeIsTest, ExplainsResult) {
   3961   Matcher<vector<int> > m1 = SizeIs(2);
   3962   Matcher<vector<int> > m2 = SizeIs(Lt(2u));
   3963   Matcher<vector<int> > m3 = SizeIs(AnyOf(0, 3));
   3964   Matcher<vector<int> > m4 = SizeIs(GreaterThan(1));
   3965   vector<int> container;
   3966   EXPECT_EQ("whose size 0 doesn't match", Explain(m1, container));
   3967   EXPECT_EQ("whose size 0 matches", Explain(m2, container));
   3968   EXPECT_EQ("whose size 0 matches", Explain(m3, container));
   3969   EXPECT_EQ("whose size 0 doesn't match, which is 1 less than 1",
   3970             Explain(m4, container));
   3971   container.push_back(0);
   3972   container.push_back(0);
   3973   EXPECT_EQ("whose size 2 matches", Explain(m1, container));
   3974   EXPECT_EQ("whose size 2 doesn't match", Explain(m2, container));
   3975   EXPECT_EQ("whose size 2 doesn't match", Explain(m3, container));
   3976   EXPECT_EQ("whose size 2 matches, which is 1 more than 1",
   3977             Explain(m4, container));
   3978 }
   3979 
   3980 #if GTEST_HAS_TYPED_TEST
   3981 // Tests ContainerEq with different container types, and
   3982 // different element types.
   3983 
   3984 template <typename T>
   3985 class ContainerEqTest : public testing::Test {};
   3986 
   3987 typedef testing::Types<
   3988     set<int>,
   3989     vector<size_t>,
   3990     multiset<size_t>,
   3991     list<int> >
   3992     ContainerEqTestTypes;
   3993 
   3994 TYPED_TEST_CASE(ContainerEqTest, ContainerEqTestTypes);
   3995 
   3996 // Tests that the filled container is equal to itself.
   3997 TYPED_TEST(ContainerEqTest, EqualsSelf) {
   3998   static const int vals[] = {1, 1, 2, 3, 5, 8};
   3999   TypeParam my_set(vals, vals + 6);
   4000   const Matcher<TypeParam> m = ContainerEq(my_set);
   4001   EXPECT_TRUE(m.Matches(my_set));
   4002   EXPECT_EQ("", Explain(m, my_set));
   4003 }
   4004 
   4005 // Tests that missing values are reported.
   4006 TYPED_TEST(ContainerEqTest, ValueMissing) {
   4007   static const int vals[] = {1, 1, 2, 3, 5, 8};
   4008   static const int test_vals[] = {2, 1, 8, 5};
   4009   TypeParam my_set(vals, vals + 6);
   4010   TypeParam test_set(test_vals, test_vals + 4);
   4011   const Matcher<TypeParam> m = ContainerEq(my_set);
   4012   EXPECT_FALSE(m.Matches(test_set));
   4013   EXPECT_EQ("which doesn't have these expected elements: 3",
   4014             Explain(m, test_set));
   4015 }
   4016 
   4017 // Tests that added values are reported.
   4018 TYPED_TEST(ContainerEqTest, ValueAdded) {
   4019   static const int vals[] = {1, 1, 2, 3, 5, 8};
   4020   static const int test_vals[] = {1, 2, 3, 5, 8, 46};
   4021   TypeParam my_set(vals, vals + 6);
   4022   TypeParam test_set(test_vals, test_vals + 6);
   4023   const Matcher<const TypeParam&> m = ContainerEq(my_set);
   4024   EXPECT_FALSE(m.Matches(test_set));
   4025   EXPECT_EQ("which has these unexpected elements: 46", Explain(m, test_set));
   4026 }
   4027 
   4028 // Tests that added and missing values are reported together.
   4029 TYPED_TEST(ContainerEqTest, ValueAddedAndRemoved) {
   4030   static const int vals[] = {1, 1, 2, 3, 5, 8};
   4031   static const int test_vals[] = {1, 2, 3, 8, 46};
   4032   TypeParam my_set(vals, vals + 6);
   4033   TypeParam test_set(test_vals, test_vals + 5);
   4034   const Matcher<TypeParam> m = ContainerEq(my_set);
   4035   EXPECT_FALSE(m.Matches(test_set));
   4036   EXPECT_EQ("which has these unexpected elements: 46,\n"
   4037             "and doesn't have these expected elements: 5",
   4038             Explain(m, test_set));
   4039 }
   4040 
   4041 // Tests duplicated value -- expect no explanation.
   4042 TYPED_TEST(ContainerEqTest, DuplicateDifference) {
   4043   static const int vals[] = {1, 1, 2, 3, 5, 8};
   4044   static const int test_vals[] = {1, 2, 3, 5, 8};
   4045   TypeParam my_set(vals, vals + 6);
   4046   TypeParam test_set(test_vals, test_vals + 5);
   4047   const Matcher<const TypeParam&> m = ContainerEq(my_set);
   4048   // Depending on the container, match may be true or false
   4049   // But in any case there should be no explanation.
   4050   EXPECT_EQ("", Explain(m, test_set));
   4051 }
   4052 #endif  // GTEST_HAS_TYPED_TEST
   4053 
   4054 // Tests that mutliple missing values are reported.
   4055 // Using just vector here, so order is predicatble.
   4056 TEST(ContainerEqExtraTest, MultipleValuesMissing) {
   4057   static const int vals[] = {1, 1, 2, 3, 5, 8};
   4058   static const int test_vals[] = {2, 1, 5};
   4059   vector<int> my_set(vals, vals + 6);
   4060   vector<int> test_set(test_vals, test_vals + 3);
   4061   const Matcher<vector<int> > m = ContainerEq(my_set);
   4062   EXPECT_FALSE(m.Matches(test_set));
   4063   EXPECT_EQ("which doesn't have these expected elements: 3, 8",
   4064             Explain(m, test_set));
   4065 }
   4066 
   4067 // Tests that added values are reported.
   4068 // Using just vector here, so order is predicatble.
   4069 TEST(ContainerEqExtraTest, MultipleValuesAdded) {
   4070   static const int vals[] = {1, 1, 2, 3, 5, 8};
   4071   static const int test_vals[] = {1, 2, 92, 3, 5, 8, 46};
   4072   list<size_t> my_set(vals, vals + 6);
   4073   list<size_t> test_set(test_vals, test_vals + 7);
   4074   const Matcher<const list<size_t>&> m = ContainerEq(my_set);
   4075   EXPECT_FALSE(m.Matches(test_set));
   4076   EXPECT_EQ("which has these unexpected elements: 92, 46",
   4077             Explain(m, test_set));
   4078 }
   4079 
   4080 // Tests that added and missing values are reported together.
   4081 TEST(ContainerEqExtraTest, MultipleValuesAddedAndRemoved) {
   4082   static const int vals[] = {1, 1, 2, 3, 5, 8};
   4083   static const int test_vals[] = {1, 2, 3, 92, 46};
   4084   list<size_t> my_set(vals, vals + 6);
   4085   list<size_t> test_set(test_vals, test_vals + 5);
   4086   const Matcher<const list<size_t> > m = ContainerEq(my_set);
   4087   EXPECT_FALSE(m.Matches(test_set));
   4088   EXPECT_EQ("which has these unexpected elements: 92, 46,\n"
   4089             "and doesn't have these expected elements: 5, 8",
   4090             Explain(m, test_set));
   4091 }
   4092 
   4093 // Tests to see that duplicate elements are detected,
   4094 // but (as above) not reported in the explanation.
   4095 TEST(ContainerEqExtraTest, MultiSetOfIntDuplicateDifference) {
   4096   static const int vals[] = {1, 1, 2, 3, 5, 8};
   4097   static const int test_vals[] = {1, 2, 3, 5, 8};
   4098   vector<int> my_set(vals, vals + 6);
   4099   vector<int> test_set(test_vals, test_vals + 5);
   4100   const Matcher<vector<int> > m = ContainerEq(my_set);
   4101   EXPECT_TRUE(m.Matches(my_set));
   4102   EXPECT_FALSE(m.Matches(test_set));
   4103   // There is nothing to report when both sets contain all the same values.
   4104   EXPECT_EQ("", Explain(m, test_set));
   4105 }
   4106 
   4107 // Tests that ContainerEq works for non-trivial associative containers,
   4108 // like maps.
   4109 TEST(ContainerEqExtraTest, WorksForMaps) {
   4110   map<int, std::string> my_map;
   4111   my_map[0] = "a";
   4112   my_map[1] = "b";
   4113 
   4114   map<int, std::string> test_map;
   4115   test_map[0] = "aa";
   4116   test_map[1] = "b";
   4117 
   4118   const Matcher<const map<int, std::string>&> m = ContainerEq(my_map);
   4119   EXPECT_TRUE(m.Matches(my_map));
   4120   EXPECT_FALSE(m.Matches(test_map));
   4121 
   4122   EXPECT_EQ("which has these unexpected elements: (0, \"aa\"),\n"
   4123             "and doesn't have these expected elements: (0, \"a\")",
   4124             Explain(m, test_map));
   4125 }
   4126 
   4127 TEST(ContainerEqExtraTest, WorksForNativeArray) {
   4128   int a1[] = { 1, 2, 3 };
   4129   int a2[] = { 1, 2, 3 };
   4130   int b[] = { 1, 2, 4 };
   4131 
   4132   EXPECT_THAT(a1, ContainerEq(a2));
   4133   EXPECT_THAT(a1, Not(ContainerEq(b)));
   4134 }
   4135 
   4136 TEST(ContainerEqExtraTest, WorksForTwoDimensionalNativeArray) {
   4137   const char a1[][3] = { "hi", "lo" };
   4138   const char a2[][3] = { "hi", "lo" };
   4139   const char b[][3] = { "lo", "hi" };
   4140 
   4141   // Tests using ContainerEq() in the first dimension.
   4142   EXPECT_THAT(a1, ContainerEq(a2));
   4143   EXPECT_THAT(a1, Not(ContainerEq(b)));
   4144 
   4145   // Tests using ContainerEq() in the second dimension.
   4146   EXPECT_THAT(a1, ElementsAre(ContainerEq(a2[0]), ContainerEq(a2[1])));
   4147   EXPECT_THAT(a1, ElementsAre(Not(ContainerEq(b[0])), ContainerEq(a2[1])));
   4148 }
   4149 
   4150 TEST(ContainerEqExtraTest, WorksForNativeArrayAsTuple) {
   4151   const int a1[] = { 1, 2, 3 };
   4152   const int a2[] = { 1, 2, 3 };
   4153   const int b[] = { 1, 2, 3, 4 };
   4154 
   4155   const int* const p1 = a1;
   4156   EXPECT_THAT(make_tuple(p1, 3), ContainerEq(a2));
   4157   EXPECT_THAT(make_tuple(p1, 3), Not(ContainerEq(b)));
   4158 
   4159   const int c[] = { 1, 3, 2 };
   4160   EXPECT_THAT(make_tuple(p1, 3), Not(ContainerEq(c)));
   4161 }
   4162 
   4163 TEST(ContainerEqExtraTest, CopiesNativeArrayParameter) {
   4164   std::string a1[][3] = {
   4165     { "hi", "hello", "ciao" },
   4166     { "bye", "see you", "ciao" }
   4167   };
   4168 
   4169   std::string a2[][3] = {
   4170     { "hi", "hello", "ciao" },
   4171     { "bye", "see you", "ciao" }
   4172   };
   4173 
   4174   const Matcher<const std::string(&)[2][3]> m = ContainerEq(a2);
   4175   EXPECT_THAT(a1, m);
   4176 
   4177   a2[0][0] = "ha";
   4178   EXPECT_THAT(a1, m);
   4179 }
   4180 
   4181 TEST(WhenSortedByTest, WorksForEmptyContainer) {
   4182   const vector<int> numbers;
   4183   EXPECT_THAT(numbers, WhenSortedBy(less<int>(), ElementsAre()));
   4184   EXPECT_THAT(numbers, Not(WhenSortedBy(less<int>(), ElementsAre(1))));
   4185 }
   4186 
   4187 TEST(WhenSortedByTest, WorksForNonEmptyContainer) {
   4188   vector<unsigned> numbers;
   4189   numbers.push_back(3);
   4190   numbers.push_back(1);
   4191   numbers.push_back(2);
   4192   numbers.push_back(2);
   4193   EXPECT_THAT(numbers, WhenSortedBy(greater<unsigned>(),
   4194                                     ElementsAre(3, 2, 2, 1)));
   4195   EXPECT_THAT(numbers, Not(WhenSortedBy(greater<unsigned>(),
   4196                                         ElementsAre(1, 2, 2, 3))));
   4197 }
   4198 
   4199 TEST(WhenSortedByTest, WorksForNonVectorContainer) {
   4200   list<string> words;
   4201   words.push_back("say");
   4202   words.push_back("hello");
   4203   words.push_back("world");
   4204   EXPECT_THAT(words, WhenSortedBy(less<string>(),
   4205                                   ElementsAre("hello", "say", "world")));
   4206   EXPECT_THAT(words, Not(WhenSortedBy(less<string>(),
   4207                                       ElementsAre("say", "hello", "world"))));
   4208 }
   4209 
   4210 TEST(WhenSortedByTest, WorksForNativeArray) {
   4211   const int numbers[] = { 1, 3, 2, 4 };
   4212   const int sorted_numbers[] = { 1, 2, 3, 4 };
   4213   EXPECT_THAT(numbers, WhenSortedBy(less<int>(), ElementsAre(1, 2, 3, 4)));
   4214   EXPECT_THAT(numbers, WhenSortedBy(less<int>(),
   4215                                     ElementsAreArray(sorted_numbers)));
   4216   EXPECT_THAT(numbers, Not(WhenSortedBy(less<int>(), ElementsAre(1, 3, 2, 4))));
   4217 }
   4218 
   4219 TEST(WhenSortedByTest, CanDescribeSelf) {
   4220   const Matcher<vector<int> > m = WhenSortedBy(less<int>(), ElementsAre(1, 2));
   4221   EXPECT_EQ("(when sorted) has 2 elements where\n"
   4222             "element #0 is equal to 1,\n"
   4223             "element #1 is equal to 2",
   4224             Describe(m));
   4225   EXPECT_EQ("(when sorted) doesn't have 2 elements, or\n"
   4226             "element #0 isn't equal to 1, or\n"
   4227             "element #1 isn't equal to 2",
   4228             DescribeNegation(m));
   4229 }
   4230 
   4231 TEST(WhenSortedByTest, ExplainsMatchResult) {
   4232   const int a[] = { 2, 1 };
   4233   EXPECT_EQ("which is { 1, 2 } when sorted, whose element #0 doesn't match",
   4234             Explain(WhenSortedBy(less<int>(), ElementsAre(2, 3)), a));
   4235   EXPECT_EQ("which is { 1, 2 } when sorted",
   4236             Explain(WhenSortedBy(less<int>(), ElementsAre(1, 2)), a));
   4237 }
   4238 
   4239 // WhenSorted() is a simple wrapper on WhenSortedBy().  Hence we don't
   4240 // need to test it as exhaustively as we test the latter.
   4241 
   4242 TEST(WhenSortedTest, WorksForEmptyContainer) {
   4243   const vector<int> numbers;
   4244   EXPECT_THAT(numbers, WhenSorted(ElementsAre()));
   4245   EXPECT_THAT(numbers, Not(WhenSorted(ElementsAre(1))));
   4246 }
   4247 
   4248 TEST(WhenSortedTest, WorksForNonEmptyContainer) {
   4249   list<string> words;
   4250   words.push_back("3");
   4251   words.push_back("1");
   4252   words.push_back("2");
   4253   words.push_back("2");
   4254   EXPECT_THAT(words, WhenSorted(ElementsAre("1", "2", "2", "3")));
   4255   EXPECT_THAT(words, Not(WhenSorted(ElementsAre("3", "1", "2", "2"))));
   4256 }
   4257 
   4258 TEST(WhenSortedTest, WorksForMapTypes) {
   4259     map<string, int> word_counts;
   4260     word_counts["and"] = 1;
   4261     word_counts["the"] = 1;
   4262     word_counts["buffalo"] = 2;
   4263     EXPECT_THAT(word_counts, WhenSorted(ElementsAre(
   4264             Pair("and", 1), Pair("buffalo", 2), Pair("the", 1))));
   4265     EXPECT_THAT(word_counts, Not(WhenSorted(ElementsAre(
   4266             Pair("and", 1), Pair("the", 1), Pair("buffalo", 2)))));
   4267 }
   4268 
   4269 TEST(WhenSortedTest, WorksForMultiMapTypes) {
   4270     multimap<int, int> ifib;
   4271     ifib.insert(make_pair(8, 6));
   4272     ifib.insert(make_pair(2, 3));
   4273     ifib.insert(make_pair(1, 1));
   4274     ifib.insert(make_pair(3, 4));
   4275     ifib.insert(make_pair(1, 2));
   4276     ifib.insert(make_pair(5, 5));
   4277     EXPECT_THAT(ifib, WhenSorted(ElementsAre(Pair(1, 1),
   4278                                              Pair(1, 2),
   4279                                              Pair(2, 3),
   4280                                              Pair(3, 4),
   4281                                              Pair(5, 5),
   4282                                              Pair(8, 6))));
   4283     EXPECT_THAT(ifib, Not(WhenSorted(ElementsAre(Pair(8, 6),
   4284                                                  Pair(2, 3),
   4285                                                  Pair(1, 1),
   4286                                                  Pair(3, 4),
   4287                                                  Pair(1, 2),
   4288                                                  Pair(5, 5)))));
   4289 }
   4290 
   4291 TEST(WhenSortedTest, WorksForPolymorphicMatcher) {
   4292     std::deque<int> d;
   4293     d.push_back(2);
   4294     d.push_back(1);
   4295     EXPECT_THAT(d, WhenSorted(ElementsAre(1, 2)));
   4296     EXPECT_THAT(d, Not(WhenSorted(ElementsAre(2, 1))));
   4297 }
   4298 
   4299 TEST(WhenSortedTest, WorksForVectorConstRefMatcher) {
   4300     std::deque<int> d;
   4301     d.push_back(2);
   4302     d.push_back(1);
   4303     Matcher<const std::vector<int>&> vector_match = ElementsAre(1, 2);
   4304     EXPECT_THAT(d, WhenSorted(vector_match));
   4305     Matcher<const std::vector<int>&> not_vector_match = ElementsAre(2, 1);
   4306     EXPECT_THAT(d, Not(WhenSorted(not_vector_match)));
   4307 }
   4308 
   4309 // Deliberately bare pseudo-container.
   4310 // Offers only begin() and end() accessors, yielding InputIterator.
   4311 template <typename T>
   4312 class Streamlike {
   4313  private:
   4314   class ConstIter;
   4315  public:
   4316   typedef ConstIter const_iterator;
   4317   typedef T value_type;
   4318 
   4319   template <typename InIter>
   4320   Streamlike(InIter first, InIter last) : remainder_(first, last) {}
   4321 
   4322   const_iterator begin() const {
   4323     return const_iterator(this, remainder_.begin());
   4324   }
   4325   const_iterator end() const {
   4326     return const_iterator(this, remainder_.end());
   4327   }
   4328 
   4329  private:
   4330   class ConstIter : public std::iterator<std::input_iterator_tag,
   4331                                          value_type,
   4332                                          ptrdiff_t,
   4333                                          const value_type&,
   4334                                          const value_type*> {
   4335    public:
   4336     ConstIter(const Streamlike* s,
   4337               typename std::list<value_type>::iterator pos)
   4338         : s_(s), pos_(pos) {}
   4339 
   4340     const value_type& operator*() const { return *pos_; }
   4341     const value_type* operator->() const { return &*pos_; }
   4342     ConstIter& operator++() {
   4343       s_->remainder_.erase(pos_++);
   4344       return *this;
   4345     }
   4346 
   4347     // *iter++ is required to work (see std::istreambuf_iterator).
   4348     // (void)iter++ is also required to work.
   4349     class PostIncrProxy {
   4350      public:
   4351       explicit PostIncrProxy(const value_type& value) : value_(value) {}
   4352       value_type operator*() const { return value_; }
   4353      private:
   4354       value_type value_;
   4355     };
   4356     PostIncrProxy operator++(int) {
   4357       PostIncrProxy proxy(**this);
   4358       ++(*this);
   4359       return proxy;
   4360     }
   4361 
   4362     friend bool operator==(const ConstIter& a, const ConstIter& b) {
   4363       return a.s_ == b.s_ && a.pos_ == b.pos_;
   4364     }
   4365     friend bool operator!=(const ConstIter& a, const ConstIter& b) {
   4366       return !(a == b);
   4367     }
   4368 
   4369    private:
   4370     const Streamlike* s_;
   4371     typename std::list<value_type>::iterator pos_;
   4372   };
   4373 
   4374   friend std::ostream& operator<<(std::ostream& os, const Streamlike& s) {
   4375     os << "[";
   4376     typedef typename std::list<value_type>::const_iterator Iter;
   4377     const char* sep = "";
   4378     for (Iter it = s.remainder_.begin(); it != s.remainder_.end(); ++it) {
   4379       os << sep << *it;
   4380       sep = ",";
   4381     }
   4382     os << "]";
   4383     return os;
   4384   }
   4385 
   4386   mutable std::list<value_type> remainder_;  // modified by iteration
   4387 };
   4388 
   4389 TEST(StreamlikeTest, Iteration) {
   4390   const int a[5] = { 2, 1, 4, 5, 3 };
   4391   Streamlike<int> s(a, a + 5);
   4392   Streamlike<int>::const_iterator it = s.begin();
   4393   const int* ip = a;
   4394   while (it != s.end()) {
   4395     SCOPED_TRACE(ip - a);
   4396     EXPECT_EQ(*ip++, *it++);
   4397   }
   4398 }
   4399 
   4400 TEST(WhenSortedTest, WorksForStreamlike) {
   4401   // Streamlike 'container' provides only minimal iterator support.
   4402   // Its iterators are tagged with input_iterator_tag.
   4403   const int a[5] = { 2, 1, 4, 5, 3 };
   4404   Streamlike<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4405   EXPECT_THAT(s, WhenSorted(ElementsAre(1, 2, 3, 4, 5)));
   4406   EXPECT_THAT(s, Not(WhenSorted(ElementsAre(2, 1, 4, 5, 3))));
   4407 }
   4408 
   4409 TEST(WhenSortedTest, WorksForVectorConstRefMatcherOnStreamlike) {
   4410   const int a[] = { 2, 1, 4, 5, 3 };
   4411   Streamlike<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4412   Matcher<const std::vector<int>&> vector_match = ElementsAre(1, 2, 3, 4, 5);
   4413   EXPECT_THAT(s, WhenSorted(vector_match));
   4414   EXPECT_THAT(s, Not(WhenSorted(ElementsAre(2, 1, 4, 5, 3))));
   4415 }
   4416 
   4417 // Tests using ElementsAre() and ElementsAreArray() with stream-like
   4418 // "containers".
   4419 
   4420 TEST(ElemensAreStreamTest, WorksForStreamlike) {
   4421   const int a[5] = { 1, 2, 3, 4, 5 };
   4422   Streamlike<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4423   EXPECT_THAT(s, ElementsAre(1, 2, 3, 4, 5));
   4424   EXPECT_THAT(s, Not(ElementsAre(2, 1, 4, 5, 3)));
   4425 }
   4426 
   4427 TEST(ElemensAreArrayStreamTest, WorksForStreamlike) {
   4428   const int a[5] = { 1, 2, 3, 4, 5 };
   4429   Streamlike<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4430 
   4431   vector<int> expected;
   4432   expected.push_back(1);
   4433   expected.push_back(2);
   4434   expected.push_back(3);
   4435   expected.push_back(4);
   4436   expected.push_back(5);
   4437   EXPECT_THAT(s, ElementsAreArray(expected));
   4438 
   4439   expected[3] = 0;
   4440   EXPECT_THAT(s, Not(ElementsAreArray(expected)));
   4441 }
   4442 
   4443 // Tests for UnorderedElementsAreArray()
   4444 
   4445 TEST(UnorderedElementsAreArrayTest, SucceedsWhenExpected) {
   4446   const int a[] = { 0, 1, 2, 3, 4 };
   4447   std::vector<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4448   do {
   4449     StringMatchResultListener listener;
   4450     EXPECT_TRUE(ExplainMatchResult(UnorderedElementsAreArray(a),
   4451                                    s, &listener)) << listener.str();
   4452   } while (std::next_permutation(s.begin(), s.end()));
   4453 }
   4454 
   4455 TEST(UnorderedElementsAreArrayTest, VectorBool) {
   4456   const bool a[] = { 0, 1, 0, 1, 1 };
   4457   const bool b[] = { 1, 0, 1, 1, 0 };
   4458   std::vector<bool> expected(a, a + GMOCK_ARRAY_SIZE_(a));
   4459   std::vector<bool> actual(b, b + GMOCK_ARRAY_SIZE_(b));
   4460   StringMatchResultListener listener;
   4461   EXPECT_TRUE(ExplainMatchResult(UnorderedElementsAreArray(expected),
   4462                                  actual, &listener)) << listener.str();
   4463 }
   4464 
   4465 TEST(UnorderedElementsAreArrayTest, WorksForStreamlike) {
   4466   // Streamlike 'container' provides only minimal iterator support.
   4467   // Its iterators are tagged with input_iterator_tag, and it has no
   4468   // size() or empty() methods.
   4469   const int a[5] = { 2, 1, 4, 5, 3 };
   4470   Streamlike<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4471 
   4472   ::std::vector<int> expected;
   4473   expected.push_back(1);
   4474   expected.push_back(2);
   4475   expected.push_back(3);
   4476   expected.push_back(4);
   4477   expected.push_back(5);
   4478   EXPECT_THAT(s, UnorderedElementsAreArray(expected));
   4479 
   4480   expected.push_back(6);
   4481   EXPECT_THAT(s, Not(UnorderedElementsAreArray(expected)));
   4482 }
   4483 
   4484 #if GTEST_LANG_CXX11
   4485 
   4486 TEST(UnorderedElementsAreArrayTest, TakesInitializerList) {
   4487   const int a[5] = { 2, 1, 4, 5, 3 };
   4488   EXPECT_THAT(a, UnorderedElementsAreArray({ 1, 2, 3, 4, 5 }));
   4489   EXPECT_THAT(a, Not(UnorderedElementsAreArray({ 1, 2, 3, 4, 6 })));
   4490 }
   4491 
   4492 TEST(UnorderedElementsAreArrayTest, TakesInitializerListOfCStrings) {
   4493   const string a[5] = { "a", "b", "c", "d", "e" };
   4494   EXPECT_THAT(a, UnorderedElementsAreArray({ "a", "b", "c", "d", "e" }));
   4495   EXPECT_THAT(a, Not(UnorderedElementsAreArray({ "a", "b", "c", "d", "ef" })));
   4496 }
   4497 
   4498 TEST(UnorderedElementsAreArrayTest, TakesInitializerListOfSameTypedMatchers) {
   4499   const int a[5] = { 2, 1, 4, 5, 3 };
   4500   EXPECT_THAT(a, UnorderedElementsAreArray(
   4501       { Eq(1), Eq(2), Eq(3), Eq(4), Eq(5) }));
   4502   EXPECT_THAT(a, Not(UnorderedElementsAreArray(
   4503       { Eq(1), Eq(2), Eq(3), Eq(4), Eq(6) })));
   4504 }
   4505 
   4506 TEST(UnorderedElementsAreArrayTest,
   4507      TakesInitializerListOfDifferentTypedMatchers) {
   4508   const int a[5] = { 2, 1, 4, 5, 3 };
   4509   // The compiler cannot infer the type of the initializer list if its
   4510   // elements have different types.  We must explicitly specify the
   4511   // unified element type in this case.
   4512   EXPECT_THAT(a, UnorderedElementsAreArray<Matcher<int> >(
   4513       { Eq(1), Ne(-2), Ge(3), Le(4), Eq(5) }));
   4514   EXPECT_THAT(a, Not(UnorderedElementsAreArray<Matcher<int> >(
   4515       { Eq(1), Ne(-2), Ge(3), Le(4), Eq(6) })));
   4516 }
   4517 
   4518 #endif  // GTEST_LANG_CXX11
   4519 
   4520 class UnorderedElementsAreTest : public testing::Test {
   4521  protected:
   4522   typedef std::vector<int> IntVec;
   4523 };
   4524 
   4525 TEST_F(UnorderedElementsAreTest, SucceedsWhenExpected) {
   4526   const int a[] = { 1, 2, 3 };
   4527   std::vector<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4528   do {
   4529     StringMatchResultListener listener;
   4530     EXPECT_TRUE(ExplainMatchResult(UnorderedElementsAre(1, 2, 3),
   4531                                    s, &listener)) << listener.str();
   4532   } while (std::next_permutation(s.begin(), s.end()));
   4533 }
   4534 
   4535 TEST_F(UnorderedElementsAreTest, FailsWhenAnElementMatchesNoMatcher) {
   4536   const int a[] = { 1, 2, 3 };
   4537   std::vector<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4538   std::vector<Matcher<int> > mv;
   4539   mv.push_back(1);
   4540   mv.push_back(2);
   4541   mv.push_back(2);
   4542   // The element with value '3' matches nothing: fail fast.
   4543   StringMatchResultListener listener;
   4544   EXPECT_FALSE(ExplainMatchResult(UnorderedElementsAreArray(mv),
   4545                                   s, &listener)) << listener.str();
   4546 }
   4547 
   4548 TEST_F(UnorderedElementsAreTest, WorksForStreamlike) {
   4549   // Streamlike 'container' provides only minimal iterator support.
   4550   // Its iterators are tagged with input_iterator_tag, and it has no
   4551   // size() or empty() methods.
   4552   const int a[5] = { 2, 1, 4, 5, 3 };
   4553   Streamlike<int> s(a, a + GMOCK_ARRAY_SIZE_(a));
   4554 
   4555   EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
   4556   EXPECT_THAT(s, Not(UnorderedElementsAre(2, 2, 3, 4, 5)));
   4557 }
   4558 
   4559 // One naive implementation of the matcher runs in O(N!) time, which is too
   4560 // slow for many real-world inputs. This test shows that our matcher can match
   4561 // 100 inputs very quickly (a few milliseconds).  An O(100!) is 10^158
   4562 // iterations and obviously effectively incomputable.
   4563 // [ RUN      ] UnorderedElementsAreTest.Performance
   4564 // [       OK ] UnorderedElementsAreTest.Performance (4 ms)
   4565 TEST_F(UnorderedElementsAreTest, Performance) {
   4566   std::vector<int> s;
   4567   std::vector<Matcher<int> > mv;
   4568   for (int i = 0; i < 100; ++i) {
   4569     s.push_back(i);
   4570     mv.push_back(_);
   4571   }
   4572   mv[50] = Eq(0);
   4573   StringMatchResultListener listener;
   4574   EXPECT_TRUE(ExplainMatchResult(UnorderedElementsAreArray(mv),
   4575                                  s, &listener)) << listener.str();
   4576 }
   4577 
   4578 // Another variant of 'Performance' with similar expectations.
   4579 // [ RUN      ] UnorderedElementsAreTest.PerformanceHalfStrict
   4580 // [       OK ] UnorderedElementsAreTest.PerformanceHalfStrict (4 ms)
   4581 TEST_F(UnorderedElementsAreTest, PerformanceHalfStrict) {
   4582   std::vector<int> s;
   4583   std::vector<Matcher<int> > mv;
   4584   for (int i = 0; i < 100; ++i) {
   4585     s.push_back(i);
   4586     if (i & 1) {
   4587       mv.push_back(_);
   4588     } else {
   4589       mv.push_back(i);
   4590     }
   4591   }
   4592   StringMatchResultListener listener;
   4593   EXPECT_TRUE(ExplainMatchResult(UnorderedElementsAreArray(mv),
   4594                                  s, &listener)) << listener.str();
   4595 }
   4596 
   4597 TEST_F(UnorderedElementsAreTest, FailMessageCountWrong) {
   4598   std::vector<int> v;
   4599   v.push_back(4);
   4600   StringMatchResultListener listener;
   4601   EXPECT_FALSE(ExplainMatchResult(UnorderedElementsAre(1, 2, 3),
   4602                                   v, &listener)) << listener.str();
   4603   EXPECT_THAT(listener.str(), Eq("which has 1 element"));
   4604 }
   4605 
   4606 TEST_F(UnorderedElementsAreTest, FailMessageCountWrongZero) {
   4607   std::vector<int> v;
   4608   StringMatchResultListener listener;
   4609   EXPECT_FALSE(ExplainMatchResult(UnorderedElementsAre(1, 2, 3),
   4610                                   v, &listener)) << listener.str();
   4611   EXPECT_THAT(listener.str(), Eq(""));
   4612 }
   4613 
   4614 TEST_F(UnorderedElementsAreTest, FailMessageUnmatchedMatchers) {
   4615   std::vector<int> v;
   4616   v.push_back(1);
   4617   v.push_back(1);
   4618   StringMatchResultListener listener;
   4619   EXPECT_FALSE(ExplainMatchResult(UnorderedElementsAre(1, 2),
   4620                                   v, &listener)) << listener.str();
   4621   EXPECT_THAT(
   4622       listener.str(),
   4623       Eq("where the following matchers don't match any elements:\n"
   4624          "matcher #1: is equal to 2"));
   4625 }
   4626 
   4627 TEST_F(UnorderedElementsAreTest, FailMessageUnmatchedElements) {
   4628   std::vector<int> v;
   4629   v.push_back(1);
   4630   v.push_back(2);
   4631   StringMatchResultListener listener;
   4632   EXPECT_FALSE(ExplainMatchResult(UnorderedElementsAre(1, 1),
   4633                                   v, &listener)) << listener.str();
   4634   EXPECT_THAT(
   4635       listener.str(),
   4636       Eq("where the following elements don't match any matchers:\n"
   4637          "element #1: 2"));
   4638 }
   4639 
   4640 TEST_F(UnorderedElementsAreTest, FailMessageUnmatchedMatcherAndElement) {
   4641   std::vector<int> v;
   4642   v.push_back(2);
   4643   v.push_back(3);
   4644   StringMatchResultListener listener;
   4645   EXPECT_FALSE(ExplainMatchResult(UnorderedElementsAre(1, 2),
   4646                                   v, &listener)) << listener.str();
   4647   EXPECT_THAT(
   4648       listener.str(),
   4649       Eq("where"
   4650          " the following matchers don't match any elements:\n"
   4651          "matcher #0: is equal to 1\n"
   4652          "and"
   4653          " where"
   4654          " the following elements don't match any matchers:\n"
   4655          "element #1: 3"));
   4656 }
   4657 
   4658 // Test helper for formatting element, matcher index pairs in expectations.
   4659 static string EMString(int element, int matcher) {
   4660   stringstream ss;
   4661   ss << "(element #" << element << ", matcher #" << matcher << ")";
   4662   return ss.str();
   4663 }
   4664 
   4665 TEST_F(UnorderedElementsAreTest, FailMessageImperfectMatchOnly) {
   4666   // A situation where all elements and matchers have a match
   4667   // associated with them, but the max matching is not perfect.
   4668   std::vector<string> v;
   4669   v.push_back("a");
   4670   v.push_back("b");
   4671   v.push_back("c");
   4672   StringMatchResultListener listener;
   4673   EXPECT_FALSE(ExplainMatchResult(
   4674       UnorderedElementsAre("a", "a", AnyOf("b", "c")), v, &listener))
   4675       << listener.str();
   4676 
   4677   string prefix =
   4678       "where no permutation of the elements can satisfy all matchers, "
   4679       "and the closest match is 2 of 3 matchers with the "
   4680       "pairings:\n";
   4681 
   4682   // We have to be a bit loose here, because there are 4 valid max matches.
   4683   EXPECT_THAT(
   4684       listener.str(),
   4685       AnyOf(prefix + "{\n  " + EMString(0, 0) +
   4686                      ",\n  " + EMString(1, 2) + "\n}",
   4687             prefix + "{\n  " + EMString(0, 1) +
   4688                      ",\n  " + EMString(1, 2) + "\n}",
   4689             prefix + "{\n  " + EMString(0, 0) +
   4690                      ",\n  " + EMString(2, 2) + "\n}",
   4691             prefix + "{\n  " + EMString(0, 1) +
   4692                      ",\n  " + EMString(2, 2) + "\n}"));
   4693 }
   4694 
   4695 TEST_F(UnorderedElementsAreTest, Describe) {
   4696   EXPECT_THAT(Describe<IntVec>(UnorderedElementsAre()),
   4697               Eq("is empty"));
   4698   EXPECT_THAT(
   4699       Describe<IntVec>(UnorderedElementsAre(345)),
   4700       Eq("has 1 element and that element is equal to 345"));
   4701   EXPECT_THAT(
   4702       Describe<IntVec>(UnorderedElementsAre(111, 222, 333)),
   4703       Eq("has 3 elements and there exists some permutation "
   4704          "of elements such that:\n"
   4705          " - element #0 is equal to 111, and\n"
   4706          " - element #1 is equal to 222, and\n"
   4707          " - element #2 is equal to 333"));
   4708 }
   4709 
   4710 TEST_F(UnorderedElementsAreTest, DescribeNegation) {
   4711   EXPECT_THAT(DescribeNegation<IntVec>(UnorderedElementsAre()),
   4712               Eq("isn't empty"));
   4713   EXPECT_THAT(
   4714       DescribeNegation<IntVec>(UnorderedElementsAre(345)),
   4715       Eq("doesn't have 1 element, or has 1 element that isn't equal to 345"));
   4716   EXPECT_THAT(
   4717       DescribeNegation<IntVec>(UnorderedElementsAre(123, 234, 345)),
   4718       Eq("doesn't have 3 elements, or there exists no permutation "
   4719          "of elements such that:\n"
   4720          " - element #0 is equal to 123, and\n"
   4721          " - element #1 is equal to 234, and\n"
   4722          " - element #2 is equal to 345"));
   4723 }
   4724 
   4725 namespace {
   4726 
   4727 // Used as a check on the more complex max flow method used in the
   4728 // real testing::internal::FindMaxBipartiteMatching. This method is
   4729 // compatible but runs in worst-case factorial time, so we only
   4730 // use it in testing for small problem sizes.
   4731 template <typename Graph>
   4732 class BacktrackingMaxBPMState {
   4733  public:
   4734   // Does not take ownership of 'g'.
   4735   explicit BacktrackingMaxBPMState(const Graph* g) : graph_(g) { }
   4736 
   4737   ElementMatcherPairs Compute() {
   4738     if (graph_->LhsSize() == 0 || graph_->RhsSize() == 0) {
   4739       return best_so_far_;
   4740     }
   4741     lhs_used_.assign(graph_->LhsSize(), kUnused);
   4742     rhs_used_.assign(graph_->RhsSize(), kUnused);
   4743     for (size_t irhs = 0; irhs < graph_->RhsSize(); ++irhs) {
   4744       matches_.clear();
   4745       RecurseInto(irhs);
   4746       if (best_so_far_.size() == graph_->RhsSize())
   4747         break;
   4748     }
   4749     return best_so_far_;
   4750   }
   4751 
   4752  private:
   4753   static const size_t kUnused = static_cast<size_t>(-1);
   4754 
   4755   void PushMatch(size_t lhs, size_t rhs) {
   4756     matches_.push_back(ElementMatcherPair(lhs, rhs));
   4757     lhs_used_[lhs] = rhs;
   4758     rhs_used_[rhs] = lhs;
   4759     if (matches_.size() > best_so_far_.size()) {
   4760       best_so_far_ = matches_;
   4761     }
   4762   }
   4763 
   4764   void PopMatch() {
   4765     const ElementMatcherPair& back = matches_.back();
   4766     lhs_used_[back.first] = kUnused;
   4767     rhs_used_[back.second] = kUnused;
   4768     matches_.pop_back();
   4769   }
   4770 
   4771   bool RecurseInto(size_t irhs) {
   4772     if (rhs_used_[irhs] != kUnused) {
   4773       return true;
   4774     }
   4775     for (size_t ilhs = 0; ilhs < graph_->LhsSize(); ++ilhs) {
   4776       if (lhs_used_[ilhs] != kUnused) {
   4777         continue;
   4778       }
   4779       if (!graph_->HasEdge(ilhs, irhs)) {
   4780         continue;
   4781       }
   4782       PushMatch(ilhs, irhs);
   4783       if (best_so_far_.size() == graph_->RhsSize()) {
   4784         return false;
   4785       }
   4786       for (size_t mi = irhs + 1; mi < graph_->RhsSize(); ++mi) {
   4787         if (!RecurseInto(mi)) return false;
   4788       }
   4789       PopMatch();
   4790     }
   4791     return true;
   4792   }
   4793 
   4794   const Graph* graph_;  // not owned
   4795   std::vector<size_t> lhs_used_;
   4796   std::vector<size_t> rhs_used_;
   4797   ElementMatcherPairs matches_;
   4798   ElementMatcherPairs best_so_far_;
   4799 };
   4800 
   4801 template <typename Graph>
   4802 const size_t BacktrackingMaxBPMState<Graph>::kUnused;
   4803 
   4804 }  // namespace
   4805 
   4806 // Implement a simple backtracking algorithm to determine if it is possible
   4807 // to find one element per matcher, without reusing elements.
   4808 template <typename Graph>
   4809 ElementMatcherPairs
   4810 FindBacktrackingMaxBPM(const Graph& g) {
   4811   return BacktrackingMaxBPMState<Graph>(&g).Compute();
   4812 }
   4813 
   4814 class BacktrackingBPMTest : public ::testing::Test { };
   4815 
   4816 // Tests the MaxBipartiteMatching algorithm with square matrices.
   4817 // The single int param is the # of nodes on each of the left and right sides.
   4818 class BipartiteTest : public ::testing::TestWithParam<int> { };
   4819 
   4820 // Verify all match graphs up to some moderate number of edges.
   4821 TEST_P(BipartiteTest, Exhaustive) {
   4822   int nodes = GetParam();
   4823   MatchMatrix graph(nodes, nodes);
   4824   do {
   4825     ElementMatcherPairs matches =
   4826         internal::FindMaxBipartiteMatching(graph);
   4827     EXPECT_EQ(FindBacktrackingMaxBPM(graph).size(), matches.size())
   4828         << "graph: " << graph.DebugString();
   4829     // Check that all elements of matches are in the graph.
   4830     // Check that elements of first and second are unique.
   4831     std::vector<bool> seen_element(graph.LhsSize());
   4832     std::vector<bool> seen_matcher(graph.RhsSize());
   4833     SCOPED_TRACE(PrintToString(matches));
   4834     for (size_t i = 0; i < matches.size(); ++i) {
   4835       size_t ilhs = matches[i].first;
   4836       size_t irhs = matches[i].second;
   4837       EXPECT_TRUE(graph.HasEdge(ilhs, irhs));
   4838       EXPECT_FALSE(seen_element[ilhs]);
   4839       EXPECT_FALSE(seen_matcher[irhs]);
   4840       seen_element[ilhs] = true;
   4841       seen_matcher[irhs] = true;
   4842     }
   4843   } while (graph.NextGraph());
   4844 }
   4845 
   4846 INSTANTIATE_TEST_CASE_P(AllGraphs, BipartiteTest,
   4847                         ::testing::Range(0, 5));
   4848 
   4849 // Parameterized by a pair interpreted as (LhsSize, RhsSize).
   4850 class BipartiteNonSquareTest
   4851     : public ::testing::TestWithParam<std::pair<size_t, size_t> > {
   4852 };
   4853 
   4854 TEST_F(BipartiteNonSquareTest, SimpleBacktracking) {
   4855   //   .......
   4856   // 0:-----\ :
   4857   // 1:---\ | :
   4858   // 2:---\ | :
   4859   // 3:-\ | | :
   4860   //  :.......:
   4861   //    0 1 2
   4862   MatchMatrix g(4, 3);
   4863   static const int kEdges[][2] = { {0, 2}, {1, 1}, {2, 1}, {3, 0} };
   4864   for (size_t i = 0; i < GMOCK_ARRAY_SIZE_(kEdges); ++i) {
   4865     g.SetEdge(kEdges[i][0], kEdges[i][1], true);
   4866   }
   4867   EXPECT_THAT(FindBacktrackingMaxBPM(g),
   4868               ElementsAre(Pair(3, 0),
   4869                           Pair(AnyOf(1, 2), 1),
   4870                           Pair(0, 2))) << g.DebugString();
   4871 }
   4872 
   4873 // Verify a few nonsquare matrices.
   4874 TEST_P(BipartiteNonSquareTest, Exhaustive) {
   4875   size_t nlhs = GetParam().first;
   4876   size_t nrhs = GetParam().second;
   4877   MatchMatrix graph(nlhs, nrhs);
   4878   do {
   4879     EXPECT_EQ(FindBacktrackingMaxBPM(graph).size(),
   4880               internal::FindMaxBipartiteMatching(graph).size())
   4881         << "graph: " << graph.DebugString()
   4882         << "\nbacktracking: "
   4883         << PrintToString(FindBacktrackingMaxBPM(graph))
   4884         << "\nmax flow: "
   4885         << PrintToString(internal::FindMaxBipartiteMatching(graph));
   4886   } while (graph.NextGraph());
   4887 }
   4888 
   4889 INSTANTIATE_TEST_CASE_P(AllGraphs, BipartiteNonSquareTest,
   4890     testing::Values(
   4891         std::make_pair(1, 2),
   4892         std::make_pair(2, 1),
   4893         std::make_pair(3, 2),
   4894         std::make_pair(2, 3),
   4895         std::make_pair(4, 1),
   4896         std::make_pair(1, 4),
   4897         std::make_pair(4, 3),
   4898         std::make_pair(3, 4)));
   4899 
   4900 class BipartiteRandomTest
   4901     : public ::testing::TestWithParam<std::pair<int, int> > {
   4902 };
   4903 
   4904 // Verifies a large sample of larger graphs.
   4905 TEST_P(BipartiteRandomTest, LargerNets) {
   4906   int nodes = GetParam().first;
   4907   int iters = GetParam().second;
   4908   MatchMatrix graph(nodes, nodes);
   4909 
   4910   testing::internal::Int32 seed = GTEST_FLAG(random_seed);
   4911   if (seed == 0) {
   4912     seed = static_cast<testing::internal::Int32>(time(NULL));
   4913   }
   4914 
   4915   for (; iters > 0; --iters, ++seed) {
   4916     srand(static_cast<int>(seed));
   4917     graph.Randomize();
   4918     EXPECT_EQ(FindBacktrackingMaxBPM(graph).size(),
   4919               internal::FindMaxBipartiteMatching(graph).size())
   4920         << " graph: " << graph.DebugString()
   4921         << "\nTo reproduce the failure, rerun the test with the flag"
   4922            " --" << GTEST_FLAG_PREFIX_ << "random_seed=" << seed;
   4923   }
   4924 }
   4925 
   4926 // Test argument is a std::pair<int, int> representing (nodes, iters).
   4927 INSTANTIATE_TEST_CASE_P(Samples, BipartiteRandomTest,
   4928     testing::Values(
   4929         std::make_pair(5, 10000),
   4930         std::make_pair(6, 5000),
   4931         std::make_pair(7, 2000),
   4932         std::make_pair(8, 500),
   4933         std::make_pair(9, 100)));
   4934 
   4935 // Tests IsReadableTypeName().
   4936 
   4937 TEST(IsReadableTypeNameTest, ReturnsTrueForShortNames) {
   4938   EXPECT_TRUE(IsReadableTypeName("int"));
   4939   EXPECT_TRUE(IsReadableTypeName("const unsigned char*"));
   4940   EXPECT_TRUE(IsReadableTypeName("MyMap<int, void*>"));
   4941   EXPECT_TRUE(IsReadableTypeName("void (*)(int, bool)"));
   4942 }
   4943 
   4944 TEST(IsReadableTypeNameTest, ReturnsTrueForLongNonTemplateNonFunctionNames) {
   4945   EXPECT_TRUE(IsReadableTypeName("my_long_namespace::MyClassName"));
   4946   EXPECT_TRUE(IsReadableTypeName("int [5][6][7][8][9][10][11]"));
   4947   EXPECT_TRUE(IsReadableTypeName("my_namespace::MyOuterClass::MyInnerClass"));
   4948 }
   4949 
   4950 TEST(IsReadableTypeNameTest, ReturnsFalseForLongTemplateNames) {
   4951   EXPECT_FALSE(
   4952       IsReadableTypeName("basic_string<char, std::char_traits<char> >"));
   4953   EXPECT_FALSE(IsReadableTypeName("std::vector<int, std::alloc_traits<int> >"));
   4954 }
   4955 
   4956 TEST(IsReadableTypeNameTest, ReturnsFalseForLongFunctionTypeNames) {
   4957   EXPECT_FALSE(IsReadableTypeName("void (&)(int, bool, char, float)"));
   4958 }
   4959 
   4960 // Tests JoinAsTuple().
   4961 
   4962 TEST(JoinAsTupleTest, JoinsEmptyTuple) {
   4963   EXPECT_EQ("", JoinAsTuple(Strings()));
   4964 }
   4965 
   4966 TEST(JoinAsTupleTest, JoinsOneTuple) {
   4967   const char* fields[] = { "1" };
   4968   EXPECT_EQ("1", JoinAsTuple(Strings(fields, fields + 1)));
   4969 }
   4970 
   4971 TEST(JoinAsTupleTest, JoinsTwoTuple) {
   4972   const char* fields[] = { "1", "a" };
   4973   EXPECT_EQ("(1, a)", JoinAsTuple(Strings(fields, fields + 2)));
   4974 }
   4975 
   4976 TEST(JoinAsTupleTest, JoinsTenTuple) {
   4977   const char* fields[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
   4978   EXPECT_EQ("(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)",
   4979             JoinAsTuple(Strings(fields, fields + 10)));
   4980 }
   4981 
   4982 // Tests FormatMatcherDescription().
   4983 
   4984 TEST(FormatMatcherDescriptionTest, WorksForEmptyDescription) {
   4985   EXPECT_EQ("is even",
   4986             FormatMatcherDescription(false, "IsEven", Strings()));
   4987   EXPECT_EQ("not (is even)",
   4988             FormatMatcherDescription(true, "IsEven", Strings()));
   4989 
   4990   const char* params[] = { "5" };
   4991   EXPECT_EQ("equals 5",
   4992             FormatMatcherDescription(false, "Equals",
   4993                                      Strings(params, params + 1)));
   4994 
   4995   const char* params2[] = { "5", "8" };
   4996   EXPECT_EQ("is in range (5, 8)",
   4997             FormatMatcherDescription(false, "IsInRange",
   4998                                      Strings(params2, params2 + 2)));
   4999 }
   5000 
   5001 // Tests PolymorphicMatcher::mutable_impl().
   5002 TEST(PolymorphicMatcherTest, CanAccessMutableImpl) {
   5003   PolymorphicMatcher<DivisibleByImpl> m(DivisibleByImpl(42));
   5004   DivisibleByImpl& impl = m.mutable_impl();
   5005   EXPECT_EQ(42, impl.divider());
   5006 
   5007   impl.set_divider(0);
   5008   EXPECT_EQ(0, m.mutable_impl().divider());
   5009 }
   5010 
   5011 // Tests PolymorphicMatcher::impl().
   5012 TEST(PolymorphicMatcherTest, CanAccessImpl) {
   5013   const PolymorphicMatcher<DivisibleByImpl> m(DivisibleByImpl(42));
   5014   const DivisibleByImpl& impl = m.impl();
   5015   EXPECT_EQ(42, impl.divider());
   5016 }
   5017 
   5018 TEST(MatcherTupleTest, ExplainsMatchFailure) {
   5019   stringstream ss1;
   5020   ExplainMatchFailureTupleTo(make_tuple(Matcher<char>(Eq('a')), GreaterThan(5)),
   5021                              make_tuple('a', 10), &ss1);
   5022   EXPECT_EQ("", ss1.str());  // Successful match.
   5023 
   5024   stringstream ss2;
   5025   ExplainMatchFailureTupleTo(make_tuple(GreaterThan(5), Matcher<char>(Eq('a'))),
   5026                              make_tuple(2, 'b'), &ss2);
   5027   EXPECT_EQ("  Expected arg #0: is > 5\n"
   5028             "           Actual: 2, which is 3 less than 5\n"
   5029             "  Expected arg #1: is equal to 'a' (97, 0x61)\n"
   5030             "           Actual: 'b' (98, 0x62)\n",
   5031             ss2.str());  // Failed match where both arguments need explanation.
   5032 
   5033   stringstream ss3;
   5034   ExplainMatchFailureTupleTo(make_tuple(GreaterThan(5), Matcher<char>(Eq('a'))),
   5035                              make_tuple(2, 'a'), &ss3);
   5036   EXPECT_EQ("  Expected arg #0: is > 5\n"
   5037             "           Actual: 2, which is 3 less than 5\n",
   5038             ss3.str());  // Failed match where only one argument needs
   5039                          // explanation.
   5040 }
   5041 
   5042 // Tests Each().
   5043 
   5044 TEST(EachTest, ExplainsMatchResultCorrectly) {
   5045   set<int> a;  // empty
   5046 
   5047   Matcher<set<int> > m = Each(2);
   5048   EXPECT_EQ("", Explain(m, a));
   5049 
   5050   Matcher<const int(&)[1]> n = Each(1);  // NOLINT
   5051 
   5052   const int b[1] = { 1 };
   5053   EXPECT_EQ("", Explain(n, b));
   5054 
   5055   n = Each(3);
   5056   EXPECT_EQ("whose element #0 doesn't match", Explain(n, b));
   5057 
   5058   a.insert(1);
   5059   a.insert(2);
   5060   a.insert(3);
   5061   m = Each(GreaterThan(0));
   5062   EXPECT_EQ("", Explain(m, a));
   5063 
   5064   m = Each(GreaterThan(10));
   5065   EXPECT_EQ("whose element #0 doesn't match, which is 9 less than 10",
   5066             Explain(m, a));
   5067 }
   5068 
   5069 TEST(EachTest, DescribesItselfCorrectly) {
   5070   Matcher<vector<int> > m = Each(1);
   5071   EXPECT_EQ("only contains elements that is equal to 1", Describe(m));
   5072 
   5073   Matcher<vector<int> > m2 = Not(m);
   5074   EXPECT_EQ("contains some element that isn't equal to 1", Describe(m2));
   5075 }
   5076 
   5077 TEST(EachTest, MatchesVectorWhenAllElementsMatch) {
   5078   vector<int> some_vector;
   5079   EXPECT_THAT(some_vector, Each(1));
   5080   some_vector.push_back(3);
   5081   EXPECT_THAT(some_vector, Not(Each(1)));
   5082   EXPECT_THAT(some_vector, Each(3));
   5083   some_vector.push_back(1);
   5084   some_vector.push_back(2);
   5085   EXPECT_THAT(some_vector, Not(Each(3)));
   5086   EXPECT_THAT(some_vector, Each(Lt(3.5)));
   5087 
   5088   vector<string> another_vector;
   5089   another_vector.push_back("fee");
   5090   EXPECT_THAT(another_vector, Each(string("fee")));
   5091   another_vector.push_back("fie");
   5092   another_vector.push_back("foe");
   5093   another_vector.push_back("fum");
   5094   EXPECT_THAT(another_vector, Not(Each(string("fee"))));
   5095 }
   5096 
   5097 TEST(EachTest, MatchesMapWhenAllElementsMatch) {
   5098   map<const char*, int> my_map;
   5099   const char* bar = "a string";
   5100   my_map[bar] = 2;
   5101   EXPECT_THAT(my_map, Each(make_pair(bar, 2)));
   5102 
   5103   map<string, int> another_map;
   5104   EXPECT_THAT(another_map, Each(make_pair(string("fee"), 1)));
   5105   another_map["fee"] = 1;
   5106   EXPECT_THAT(another_map, Each(make_pair(string("fee"), 1)));
   5107   another_map["fie"] = 2;
   5108   another_map["foe"] = 3;
   5109   another_map["fum"] = 4;
   5110   EXPECT_THAT(another_map, Not(Each(make_pair(string("fee"), 1))));
   5111   EXPECT_THAT(another_map, Not(Each(make_pair(string("fum"), 1))));
   5112   EXPECT_THAT(another_map, Each(Pair(_, Gt(0))));
   5113 }
   5114 
   5115 TEST(EachTest, AcceptsMatcher) {
   5116   const int a[] = { 1, 2, 3 };
   5117   EXPECT_THAT(a, Each(Gt(0)));
   5118   EXPECT_THAT(a, Not(Each(Gt(1))));
   5119 }
   5120 
   5121 TEST(EachTest, WorksForNativeArrayAsTuple) {
   5122   const int a[] = { 1, 2 };
   5123   const int* const pointer = a;
   5124   EXPECT_THAT(make_tuple(pointer, 2), Each(Gt(0)));
   5125   EXPECT_THAT(make_tuple(pointer, 2), Not(Each(Gt(1))));
   5126 }
   5127 
   5128 // For testing Pointwise().
   5129 class IsHalfOfMatcher {
   5130  public:
   5131   template <typename T1, typename T2>
   5132   bool MatchAndExplain(const tuple<T1, T2>& a_pair,
   5133                        MatchResultListener* listener) const {
   5134     if (get<0>(a_pair) == get<1>(a_pair)/2) {
   5135       *listener << "where the second is " << get<1>(a_pair);
   5136       return true;
   5137     } else {
   5138       *listener << "where the second/2 is " << get<1>(a_pair)/2;
   5139       return false;
   5140     }
   5141   }
   5142 
   5143   void DescribeTo(ostream* os) const {
   5144     *os << "are a pair where the first is half of the second";
   5145   }
   5146 
   5147   void DescribeNegationTo(ostream* os) const {
   5148     *os << "are a pair where the first isn't half of the second";
   5149   }
   5150 };
   5151 
   5152 PolymorphicMatcher<IsHalfOfMatcher> IsHalfOf() {
   5153   return MakePolymorphicMatcher(IsHalfOfMatcher());
   5154 }
   5155 
   5156 TEST(PointwiseTest, DescribesSelf) {
   5157   vector<int> rhs;
   5158   rhs.push_back(1);
   5159   rhs.push_back(2);
   5160   rhs.push_back(3);
   5161   const Matcher<const vector<int>&> m = Pointwise(IsHalfOf(), rhs);
   5162   EXPECT_EQ("contains 3 values, where each value and its corresponding value "
   5163             "in { 1, 2, 3 } are a pair where the first is half of the second",
   5164             Describe(m));
   5165   EXPECT_EQ("doesn't contain exactly 3 values, or contains a value x at some "
   5166             "index i where x and the i-th value of { 1, 2, 3 } are a pair "
   5167             "where the first isn't half of the second",
   5168             DescribeNegation(m));
   5169 }
   5170 
   5171 TEST(PointwiseTest, MakesCopyOfRhs) {
   5172   list<signed char> rhs;
   5173   rhs.push_back(2);
   5174   rhs.push_back(4);
   5175 
   5176   int lhs[] = { 1, 2 };
   5177   const Matcher<const int (&)[2]> m = Pointwise(IsHalfOf(), rhs);
   5178   EXPECT_THAT(lhs, m);
   5179 
   5180   // Changing rhs now shouldn't affect m, which made a copy of rhs.
   5181   rhs.push_back(6);
   5182   EXPECT_THAT(lhs, m);
   5183 }
   5184 
   5185 TEST(PointwiseTest, WorksForLhsNativeArray) {
   5186   const int lhs[] = { 1, 2, 3 };
   5187   vector<int> rhs;
   5188   rhs.push_back(2);
   5189   rhs.push_back(4);
   5190   rhs.push_back(6);
   5191   EXPECT_THAT(lhs, Pointwise(Lt(), rhs));
   5192   EXPECT_THAT(lhs, Not(Pointwise(Gt(), rhs)));
   5193 }
   5194 
   5195 TEST(PointwiseTest, WorksForRhsNativeArray) {
   5196   const int rhs[] = { 1, 2, 3 };
   5197   vector<int> lhs;
   5198   lhs.push_back(2);
   5199   lhs.push_back(4);
   5200   lhs.push_back(6);
   5201   EXPECT_THAT(lhs, Pointwise(Gt(), rhs));
   5202   EXPECT_THAT(lhs, Not(Pointwise(Lt(), rhs)));
   5203 }
   5204 
   5205 TEST(PointwiseTest, RejectsWrongSize) {
   5206   const double lhs[2] = { 1, 2 };
   5207   const int rhs[1] = { 0 };
   5208   EXPECT_THAT(lhs, Not(Pointwise(Gt(), rhs)));
   5209   EXPECT_EQ("which contains 2 values",
   5210             Explain(Pointwise(Gt(), rhs), lhs));
   5211 
   5212   const int rhs2[3] = { 0, 1, 2 };
   5213   EXPECT_THAT(lhs, Not(Pointwise(Gt(), rhs2)));
   5214 }
   5215 
   5216 TEST(PointwiseTest, RejectsWrongContent) {
   5217   const double lhs[3] = { 1, 2, 3 };
   5218   const int rhs[3] = { 2, 6, 4 };
   5219   EXPECT_THAT(lhs, Not(Pointwise(IsHalfOf(), rhs)));
   5220   EXPECT_EQ("where the value pair (2, 6) at index #1 don't match, "
   5221             "where the second/2 is 3",
   5222             Explain(Pointwise(IsHalfOf(), rhs), lhs));
   5223 }
   5224 
   5225 TEST(PointwiseTest, AcceptsCorrectContent) {
   5226   const double lhs[3] = { 1, 2, 3 };
   5227   const int rhs[3] = { 2, 4, 6 };
   5228   EXPECT_THAT(lhs, Pointwise(IsHalfOf(), rhs));
   5229   EXPECT_EQ("", Explain(Pointwise(IsHalfOf(), rhs), lhs));
   5230 }
   5231 
   5232 TEST(PointwiseTest, AllowsMonomorphicInnerMatcher) {
   5233   const double lhs[3] = { 1, 2, 3 };
   5234   const int rhs[3] = { 2, 4, 6 };
   5235   const Matcher<tuple<const double&, const int&> > m1 = IsHalfOf();
   5236   EXPECT_THAT(lhs, Pointwise(m1, rhs));
   5237   EXPECT_EQ("", Explain(Pointwise(m1, rhs), lhs));
   5238 
   5239   // This type works as a tuple<const double&, const int&> can be
   5240   // implicitly cast to tuple<double, int>.
   5241   const Matcher<tuple<double, int> > m2 = IsHalfOf();
   5242   EXPECT_THAT(lhs, Pointwise(m2, rhs));
   5243   EXPECT_EQ("", Explain(Pointwise(m2, rhs), lhs));
   5244 }
   5245 
   5246 }  // namespace gmock_matchers_test
   5247 }  // namespace testing
   5248