1#include <vector>
2#include <algorithm>
3
4#include "cppunit/cppunit_proxy.h"
5
6#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
7using namespace std;
8#endif
9
10//
11// TestCase class
12//
13class MaxTest : public CPPUNIT_NS::TestCase
14{
15  CPPUNIT_TEST_SUITE(MaxTest);
16  CPPUNIT_TEST(max1);
17  CPPUNIT_TEST(max2);
18  CPPUNIT_TEST(maxelem1);
19  CPPUNIT_TEST(maxelem2);
20  CPPUNIT_TEST_SUITE_END();
21
22protected:
23  void max1();
24  void max2();
25  void maxelem1();
26  void maxelem2();
27
28  static bool str_compare(const char* a_, const char* b_)
29  { return strcmp(a_, b_) < 0 ? 1 : 0; }
30};
31
32CPPUNIT_TEST_SUITE_REGISTRATION(MaxTest);
33
34//
35// tests implementation
36//
37void MaxTest::max1()
38{
39  int r = max(42, 100);
40  CPPUNIT_ASSERT( r == 100 );
41
42  int t = max(++r, 0);
43  CPPUNIT_ASSERT( t == 101 );
44}
45void MaxTest::max2()
46{
47  const char* r = max((const char*)"shoe", (const char*)"shine", str_compare);
48  CPPUNIT_ASSERT(!strcmp(r, "shoe"));
49}
50void MaxTest::maxelem1()
51{
52  int numbers[6] = { 4, 10, 56, 11, -42, 19 };
53
54  int* r = max_element((int*)numbers, (int*)numbers + 6);
55  CPPUNIT_ASSERT(*r==56);
56}
57void MaxTest::maxelem2()
58{
59  const char* names[] = { "Brett", "Graham", "Jack", "Mike", "Todd" };
60
61  const unsigned namesCt = sizeof(names) / sizeof(names[0]);
62  const char** r = max_element((const char**)names, (const char**)names + namesCt, str_compare);
63  CPPUNIT_ASSERT(!strcmp(*r, "Todd"));
64}
65