1// Copyright (C) 2005-2015 Free Software Foundation, Inc. 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// 25.3.1.2 [lib.stable.sort] 19 20#include <algorithm> 21#include <testsuite_new_operators.h> 22#include <testsuite_hooks.h> 23#include <testsuite_iterators.h> 24 25using __gnu_test::test_container; 26using __gnu_test::random_access_iterator_wrapper; 27using std::stable_sort; 28 29typedef test_container<int, random_access_iterator_wrapper> Container; 30 31void 32test1() 33{ 34 int array[] = { 0 }; 35 Container con(array, array); 36 stable_sort(con.begin(), con.end()); 37} 38 39void 40test2() 41{ 42 int array[] = { 6, 5, 4, 3, 2, 1, 0 }; 43 Container con(array, array + 7); 44 stable_sort(con.begin(), con.end()); 45 VERIFY(array[0] == 0 && array[1] == 1 && array[2] == 2 && 46 array[3] == 3 && array[4] == 4 && array[5] == 5 && 47 array[6] == 6); 48} 49 50struct S 51{ 52 int i; 53 int j; 54 S() {} 55 S(int in) 56 { 57 if(in > 0) 58 { 59 i = in; 60 j = 1; 61 } 62 else 63 { 64 i = -in; 65 j = 0; 66 } 67 } 68}; 69 70bool 71operator<(const S& s1, const S& s2) 72{ return s1.i < s2.i; } 73 74void 75test3() 76{ 77 S array[] = { -1, -2, 1, 2, -3 ,-5 ,3 , -4, 5, 4 }; 78 test_container<S, random_access_iterator_wrapper> con(array,array + 10); 79 stable_sort(con.begin(), con.end()); 80 for(int i = 0; i < 10; ++i) 81 VERIFY(array[i].j == i % 2); 82} 83 84int 85main() 86{ 87 test1(); 88 test2(); 89 90 test3(); 91 92 __gnu_test::set_new_limit(sizeof(S) * 5); 93 test3(); 94 95 __gnu_test::set_new_limit(sizeof(S)); 96 test3(); 97 98 __gnu_test::set_new_limit(0); 99 test3(); 100} 101