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