Home | History | Annotate | Download | only in set
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // UNSUPPORTED: c++98, c++03, c++11
     11 
     12 // <set>
     13 
     14 // class set
     15 
     16 // template<typename K>
     17 //     pair<iterator,iterator>             equal_range(const K& x);        //
     18 //     C++14
     19 // template<typename K>
     20 //     pair<const_iterator,const_iterator> equal_range(const K& x) const;  //
     21 //     C++14
     22 
     23 #include <cassert>
     24 #include <set>
     25 #include <utility>
     26 
     27 #include "min_allocator.h"
     28 #include "private_constructor.hpp"
     29 #include "test_macros.h"
     30 
     31 struct Comp {
     32   using is_transparent = void;
     33 
     34   bool operator()(const std::pair<int, int> &lhs,
     35                   const std::pair<int, int> &rhs) const {
     36     return lhs < rhs;
     37   }
     38 
     39   bool operator()(const std::pair<int, int> &lhs, int rhs) const {
     40     return lhs.first < rhs;
     41   }
     42 
     43   bool operator()(int lhs, const std::pair<int, int> &rhs) const {
     44     return lhs < rhs.first;
     45   }
     46 };
     47 
     48 int main() {
     49   std::set<std::pair<int, int>, Comp> s{{2, 1}, {1, 2}, {1, 3}, {1, 4}, {2, 2}};
     50 
     51   auto er = s.equal_range(1);
     52   long nels = 0;
     53 
     54   for (auto it = er.first; it != er.second; it++) {
     55     assert(it->first == 1);
     56     nels++;
     57   }
     58 
     59   assert(nels == 3);
     60 }
     61