15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
35a83710eSEric Fiselier //                     The LLVM Compiler Infrastructure
45a83710eSEric Fiselier //
55a83710eSEric Fiselier // This file is dual licensed under the MIT and the University of Illinois Open
65a83710eSEric Fiselier // Source Licenses. See LICENSE.TXT for details.
75a83710eSEric Fiselier //
85a83710eSEric Fiselier //===----------------------------------------------------------------------===//
95a83710eSEric Fiselier 
105a83710eSEric Fiselier // <functional>
115a83710eSEric Fiselier 
125a83710eSEric Fiselier // less_equal
135a83710eSEric Fiselier 
145a83710eSEric Fiselier #include <functional>
155a83710eSEric Fiselier #include <type_traits>
165a83710eSEric Fiselier #include <cassert>
175a83710eSEric Fiselier 
18*d697ee41SEric Fiselier #include "test_macros.h"
19*d697ee41SEric Fiselier #include "pointer_comparison_test_helper.hpp"
20*d697ee41SEric Fiselier 
215a83710eSEric Fiselier int main()
225a83710eSEric Fiselier {
235a83710eSEric Fiselier     typedef std::less_equal<int> F;
245a83710eSEric Fiselier     const F f = F();
2566369c03SMarshall Clow     static_assert((std::is_same<int, F::first_argument_type>::value), "" );
2666369c03SMarshall Clow     static_assert((std::is_same<int, F::second_argument_type>::value), "" );
2766369c03SMarshall Clow     static_assert((std::is_same<bool, F::result_type>::value), "" );
285a83710eSEric Fiselier     assert(f(36, 36));
295a83710eSEric Fiselier     assert(!f(36, 6));
305a83710eSEric Fiselier     assert(f(6, 36));
31*d697ee41SEric Fiselier     {
32*d697ee41SEric Fiselier         // test total ordering of int* for less_equal<int*> and
33*d697ee41SEric Fiselier         // less_equal<void>.
34*d697ee41SEric Fiselier         do_pointer_comparison_test<int, std::less_equal>();
35*d697ee41SEric Fiselier     }
36*d697ee41SEric Fiselier #if TEST_STD_VER > 11
375a83710eSEric Fiselier     typedef std::less_equal<> F2;
385a83710eSEric Fiselier     const F2 f2 = F2();
395a83710eSEric Fiselier     assert( f2(36, 36));
405a83710eSEric Fiselier     assert(!f2(36, 6));
415a83710eSEric Fiselier     assert( f2(6, 36));
425a83710eSEric Fiselier     assert(!f2(36, 6.0));
435a83710eSEric Fiselier     assert(!f2(36.0, 6));
445a83710eSEric Fiselier     assert( f2(6, 36.0));
455a83710eSEric Fiselier     assert( f2(6.0, 36));
465a83710eSEric Fiselier 
475a83710eSEric Fiselier     constexpr bool foo = std::less_equal<int> () (36, 36);
485a83710eSEric Fiselier     static_assert ( foo, "" );
495a83710eSEric Fiselier 
505a83710eSEric Fiselier     constexpr bool bar = std::less_equal<> () (36.0, 36);
515a83710eSEric Fiselier     static_assert ( bar, "" );
525a83710eSEric Fiselier #endif
535a83710eSEric Fiselier }
54