#include <cassert>
#include <iostream>
using namespace std;

#include <policyselector.h>
#include <policydefault.h>

void test01()
{
  cout << "Test 1" << endl;
  cout << "Testing the default policy" << endl;
  policyselector<> app;
  cout << endl << endl;
}

/** \brief Another policy. */
class policy2new
{
public:

  void print() const
    { cout << "policy2new" << endl; }

  policy2new()
    { print(); }
};

void test02()
{
  cout << "Test 2" << endl;
  cout << "Overriding the 2nd policy with policy2new" << endl;
//  policyselector< policyov2< policy2new, policydefault > > app;
  policyselector< policyov2< policy2new > > app;
  cout << endl << endl;
}


void test03()
{
  cout << "Test 3" << endl;
  cout << "Default template argument overloading" << endl << endl;


  cout << "A silly example because there are only 3 tempate arguments" << endl;
  cout << "  For templates with 5,6,+ arguments this may be useful." << endl;
  cout << endl;

  cout << "Overloading the 2nd policy with policy4, then overloading" << endl;
  cout << "  the first policy with policy5." << endl;
  
  policyselector< policyov1< policy5, policyov2< policy4, policydefault > > > app;
  cout << endl << endl;
}



int main(int argc, char** agv)
{
  test01();
  test02();
  test03();

  return 0;
}



