#include <vector> #include <algorithm> #include <functional> #include "cppunit/cppunit_proxy.h" #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) using namespace std; #endif // // TestCase class // class HeapTest : public CPPUNIT_NS::TestCase { CPPUNIT_TEST_SUITE(HeapTest); CPPUNIT_TEST(mkheap0); CPPUNIT_TEST(mkheap1); CPPUNIT_TEST(pheap1); CPPUNIT_TEST(pheap2); CPPUNIT_TEST_SUITE_END(); protected: void mkheap0(); void mkheap1(); void pheap1(); void pheap2(); }; CPPUNIT_TEST_SUITE_REGISTRATION(HeapTest); // // tests implementation // void HeapTest::mkheap0() { int numbers[6] = { 5, 10, 4, 13, 11, 19 }; make_heap(numbers, numbers + 6); CPPUNIT_ASSERT(numbers[0]==19) pop_heap(numbers, numbers + 6); CPPUNIT_ASSERT(numbers[0]==13) pop_heap(numbers, numbers + 5); CPPUNIT_ASSERT(numbers[0]==11) pop_heap(numbers, numbers + 4); CPPUNIT_ASSERT(numbers[0]==10) pop_heap(numbers, numbers + 3); CPPUNIT_ASSERT(numbers[0]==5) pop_heap(numbers, numbers + 2); CPPUNIT_ASSERT(numbers[0]==4) pop_heap(numbers, numbers + 1); } void HeapTest::mkheap1() { int numbers[6] = { 5, 10, 4, 13, 11, 19 }; make_heap(numbers, numbers + 6, greater<int>()); CPPUNIT_ASSERT(numbers[0]==4) pop_heap(numbers, numbers + 6, greater<int>()); CPPUNIT_ASSERT(numbers[0]==5) pop_heap(numbers, numbers + 5, greater<int>()); CPPUNIT_ASSERT(numbers[0]==10) pop_heap(numbers, numbers + 4, greater<int>()); CPPUNIT_ASSERT(numbers[0]==11) pop_heap(numbers, numbers + 3, greater<int>()); CPPUNIT_ASSERT(numbers[0]==13) pop_heap(numbers, numbers + 2, greater<int>()); CPPUNIT_ASSERT(numbers[0]==19) } void HeapTest::pheap1() { vector<int> v; v.push_back(1); v.push_back(20); v.push_back(4); make_heap(v.begin(), v.end()); v.push_back(7); push_heap(v.begin(), v.end()); sort_heap(v.begin(), v.end()); CPPUNIT_ASSERT(v[0]==1); CPPUNIT_ASSERT(v[1]==4); CPPUNIT_ASSERT(v[2]==7); CPPUNIT_ASSERT(v[3]==20); } void HeapTest::pheap2() { vector<int> v; v.push_back(1); v.push_back(20); v.push_back(4); make_heap(v.begin(), v.end(), greater<int>()); v.push_back(7); push_heap(v.begin(), v.end(), greater<int>()); sort_heap(v.begin(), v.end(), greater<int>()); CPPUNIT_ASSERT(v[0]==20); CPPUNIT_ASSERT(v[1]==7); CPPUNIT_ASSERT(v[2]==4); CPPUNIT_ASSERT(v[3]==1); }