#include<iostream>

//#include <cppunit/ui/text/TestRunner.h>
//#include <cppunit/TestFixture.h>
//#include <cppunit/TestAssert.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestCase.h>
//#include <cppunit/TestCaller.h>
//#include <cppunit/CompilerOutputter.h>
//#include <cppunit/XmlOutputter.h>

#include"max.h"

class Int {
private:
 int _val;
public:
 Int(int i):_val(i) {};
 int val()const {return _val;};
 friend bool operator>(const Int &a,const Int &b)  {
 return a._val>b._val; 
 }
};


class Max_test : public CppUnit::TestCase {
public:

  void runTest() {
    assert(max(1,2)==1); //sztucznie wproadzony bÅ?ad!
    assert(max(2,1)==2);

    assert(max(1,1)==1);
    assert(max(2,2)==2);

    Int i(5);
    Int j(6);

    assert(max(i,j).val() == 6);
    assert(max(j,i).val() == 6);
    assert(max(j,j).val() == 6);
    assert(max(i,i).val() == 5);

    assert(max(&i,&j)->val() == 6);
    assert(max(&j,&i)->val() == 6);
    assert(max(&j,&j)->val() == 6);
    assert(max(&i,&i)->val() == 5);

    assert(0==strcmp(max("abcd","acde"),"acde"));
    assert(0==strcmp(max("acde","abcd"),"acde"));
    assert(0==strcmp(max("abcd","abcd"),"abcd"));
    assert(0==strcmp(max("acde","acde"),"acde"));

    char s1[]="abcde";
    char s2[]="ac";
    assert(0==strcmp(max(s1,s2),s2));
    assert(0==strcmp(max(s2,s1),s2));
    assert(0==strcmp(max(s1,s1),s1));
    assert(0==strcmp(max(s2,s2),s2));


  }


};


main() {
CppUnit::TestResult result;
Max_test max;

max.run( &result );


}
 
