| OLD | NEW |
| (Empty) |
| 1 // 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu> | |
| 2 // | |
| 3 // Copyright (C) 2005, 2009 Free Software Foundation, Inc. | |
| 4 // | |
| 5 // This file is part of the GNU ISO C++ Library. This library is free | |
| 6 // software; you can redistribute it and/or modify it under the | |
| 7 // terms of the GNU General Public License as published by the | |
| 8 // Free Software Foundation; either version 3, or (at your option) | |
| 9 // any later version. | |
| 10 // | |
| 11 // This library is distributed in the hope that it will be useful, | |
| 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 // GNU General Public License for more details. | |
| 15 // | |
| 16 // You should have received a copy of the GNU General Public License along | |
| 17 // with this library; see the file COPYING3. If not see | |
| 18 // <http://www.gnu.org/licenses/>. | |
| 19 | |
| 20 // 3.7.2 polymorphic function object wrapper | |
| 21 #include <tr1/functional> | |
| 22 #include <testsuite_hooks.h> | |
| 23 #include <testsuite_tr1.h> | |
| 24 | |
| 25 using namespace __gnu_test; | |
| 26 | |
| 27 bool test __attribute__((unused)) = true; | |
| 28 | |
| 29 // Put function objects into function<> wrappers | |
| 30 void test04() | |
| 31 { | |
| 32 using std::tr1::function; | |
| 33 | |
| 34 do_truncate_float_t truncate_float; | |
| 35 | |
| 36 function<int(float)> f1(truncate_float); | |
| 37 VERIFY( f1 ); | |
| 38 VERIFY( !!f1 ); | |
| 39 VERIFY( !(f1 == 0) ); | |
| 40 VERIFY( !(0 == f1) ); | |
| 41 VERIFY( f1 != 0 ); | |
| 42 VERIFY( 0 != f1 ); | |
| 43 | |
| 44 // Copy-construction | |
| 45 function<int(float)> f2(f1); | |
| 46 VERIFY( f2 ); | |
| 47 | |
| 48 // Invocation | |
| 49 VERIFY( f1(3.1f) == 3 ); | |
| 50 VERIFY( f2(3.1f) == 3 ); | |
| 51 | |
| 52 // Assignment to zero | |
| 53 f1 = 0; | |
| 54 VERIFY( !f1 ); | |
| 55 | |
| 56 // Swap | |
| 57 f1.swap(f2); | |
| 58 VERIFY( f1 ); | |
| 59 VERIFY( !f2 ); | |
| 60 VERIFY( f1(3.1f) == 3 ); | |
| 61 | |
| 62 // Assignment from a function pointer | |
| 63 f2 = do_truncate_float_t(); | |
| 64 VERIFY( f2(3.1f) == 3 ); | |
| 65 | |
| 66 // target_type and target() functions | |
| 67 const function<int(float)>& f1c = f1; | |
| 68 VERIFY( typeid(do_truncate_float_t) == f1.target_type() ); | |
| 69 VERIFY( f2.target<do_truncate_float_t>() != 0 ); | |
| 70 VERIFY( f1c.target<do_truncate_float_t>() != 0 ); | |
| 71 } | |
| 72 | |
| 73 int main() | |
| 74 { | |
| 75 test04(); | |
| 76 | |
| 77 VERIFY( do_truncate_double_t::live_objects == 0 ); | |
| 78 VERIFY( do_truncate_float_t::live_objects == 0 ); | |
| 79 | |
| 80 return 0; | |
| 81 } | |
| OLD | NEW |