genericopenlibs/cppstdlib/stl/test/unit/heap_test.cpp
changeset 0 e4d67989cc36
child 18 47c74d1534e1
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 #include <vector>
       
     2 #include <algorithm>
       
     3 #include <functional>
       
     4 
       
     5 #include "cppunit/cppunit_proxy.h"
       
     6 
       
     7 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
       
     8 using namespace std;
       
     9 #endif
       
    10 
       
    11 //
       
    12 // TestCase class
       
    13 //
       
    14 class HeapTest : public CPPUNIT_NS::TestCase
       
    15 {
       
    16   CPPUNIT_TEST_SUITE(HeapTest);
       
    17   CPPUNIT_TEST(mkheap0);
       
    18   CPPUNIT_TEST(mkheap1);
       
    19   CPPUNIT_TEST(pheap1);
       
    20   CPPUNIT_TEST(pheap2);
       
    21   CPPUNIT_TEST_SUITE_END();
       
    22 
       
    23 protected:
       
    24   void mkheap0();
       
    25   void mkheap1();
       
    26   void pheap1();
       
    27   void pheap2();
       
    28 };
       
    29 
       
    30 CPPUNIT_TEST_SUITE_REGISTRATION(HeapTest);
       
    31 
       
    32 //
       
    33 // tests implementation
       
    34 //
       
    35 void HeapTest::mkheap0()
       
    36 {
       
    37   int numbers[6] = { 5, 10, 4, 13, 11, 19 };
       
    38 
       
    39   make_heap(numbers, numbers + 6);
       
    40   CPPUNIT_ASSERT(numbers[0]==19)
       
    41   pop_heap(numbers, numbers + 6);
       
    42   CPPUNIT_ASSERT(numbers[0]==13)
       
    43   pop_heap(numbers, numbers + 5);
       
    44   CPPUNIT_ASSERT(numbers[0]==11)
       
    45   pop_heap(numbers, numbers + 4);
       
    46   CPPUNIT_ASSERT(numbers[0]==10)
       
    47   pop_heap(numbers, numbers + 3);
       
    48   CPPUNIT_ASSERT(numbers[0]==5)
       
    49   pop_heap(numbers, numbers + 2);
       
    50   CPPUNIT_ASSERT(numbers[0]==4)
       
    51   pop_heap(numbers, numbers + 1);
       
    52 }
       
    53 void HeapTest::mkheap1()
       
    54 {
       
    55   int numbers[6] = { 5, 10, 4, 13, 11, 19 };
       
    56 
       
    57   make_heap(numbers, numbers + 6, greater<int>());
       
    58 
       
    59   CPPUNIT_ASSERT(numbers[0]==4)
       
    60   pop_heap(numbers, numbers + 6, greater<int>());
       
    61   CPPUNIT_ASSERT(numbers[0]==5)
       
    62   pop_heap(numbers, numbers + 5, greater<int>());
       
    63   CPPUNIT_ASSERT(numbers[0]==10)
       
    64   pop_heap(numbers, numbers + 4, greater<int>());
       
    65   CPPUNIT_ASSERT(numbers[0]==11)
       
    66   pop_heap(numbers, numbers + 3, greater<int>());
       
    67   CPPUNIT_ASSERT(numbers[0]==13)
       
    68   pop_heap(numbers, numbers + 2, greater<int>());
       
    69   CPPUNIT_ASSERT(numbers[0]==19)
       
    70 }
       
    71 void HeapTest::pheap1()
       
    72 {
       
    73   vector<int> v;
       
    74 
       
    75   v.push_back(1);
       
    76   v.push_back(20);
       
    77   v.push_back(4);
       
    78   make_heap(v.begin(), v.end());
       
    79 
       
    80   v.push_back(7);
       
    81   push_heap(v.begin(), v.end());
       
    82 
       
    83   sort_heap(v.begin(), v.end());
       
    84 
       
    85   CPPUNIT_ASSERT(v[0]==1);
       
    86   CPPUNIT_ASSERT(v[1]==4);
       
    87   CPPUNIT_ASSERT(v[2]==7);
       
    88   CPPUNIT_ASSERT(v[3]==20);
       
    89 }
       
    90 void HeapTest::pheap2()
       
    91 {
       
    92   vector<int> v;
       
    93 
       
    94   v.push_back(1);
       
    95   v.push_back(20);
       
    96   v.push_back(4);
       
    97   make_heap(v.begin(), v.end(), greater<int>());
       
    98 
       
    99   v.push_back(7);
       
   100   push_heap(v.begin(), v.end(), greater<int>());
       
   101 
       
   102   sort_heap(v.begin(), v.end(), greater<int>());
       
   103 
       
   104   CPPUNIT_ASSERT(v[0]==20);
       
   105   CPPUNIT_ASSERT(v[1]==7);
       
   106   CPPUNIT_ASSERT(v[2]==4);
       
   107   CPPUNIT_ASSERT(v[3]==1);
       
   108 }