/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/
#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 FuncTest : public CPPUNIT_NS::TestCase
{
  CPPUNIT_TEST_SUITE(FuncTest);
  CPPUNIT_TEST(func1);
  CPPUNIT_TEST(func2);
  CPPUNIT_TEST(func3);
  CPPUNIT_TEST_SUITE_END();

protected:
  void func1();
  void func2();
  void func3();
  static bool bigger(int i_);
  static bool bigger_than(int x_, int y_);
};

CPPUNIT_TEST_SUITE_REGISTRATION(FuncTest);

//
// tests implementation
//
bool FuncTest::bigger(int i_)
{
  return i_ > 3;
}
bool FuncTest::bigger_than(int x_, int y_)
{
    return x_ > y_;
}
void FuncTest::func1()
{
  vector<int>v;
  v.push_back(4);
  v.push_back(1);
  v.push_back(5);
  int n = count_if(v.begin(), v.end(), bigger);
  CPPUNIT_ASSERT( n == 2 )
}

void FuncTest::func2()
{
  vector<int> v;
  v.push_back(4);
  v.push_back(1);
  v.push_back(5);
  sort(v.begin(), v.end(), bigger_than);

  CPPUNIT_ASSERT( v[0] == 5 );
  CPPUNIT_ASSERT( v[1] == 4 );
  CPPUNIT_ASSERT( v[2] == 1 );
}
void FuncTest::func3()
{
  vector<int> v;
  v.push_back(4);
  v.push_back(1);
  v.push_back(5);
  sort(v.begin(), v.end(), greater<int>());

  CPPUNIT_ASSERT( v[0] == 5 );
  CPPUNIT_ASSERT( v[1] == 4 );
  CPPUNIT_ASSERT( v[2] == 1 );
}
