
#include <cstdlib>
#include <iostream>
//#include <vector>
//#include <list>
//#include <algorithm>
using namespace std;


#include <array2Dtest.h>
#include <cirbuffarrtest.h>
#include <commandline.h>
#include <commandlinetest.h>
#include <dumbarraytest.h>
#include <fnobjtest.h>
#include <indextabletest.h>
#include <messagetest.h>
#include <print.h>
#include <printtest.h>
#include <singletontest.h>
#include <stringconverttest.h>
#include <stringserializationtest.h>
#include <stringtagparsertest.h>
#include <tokenizertest.h>

using namespace misclib_testcode;

int main(int argc, char** argv)
{
  commandline cmd(argc,argv);
  uint prog(0);
  cmd.mapvar(prog,"prog");

  switch (prog)
  {
    case 0:
      cout << "$./main prog=12  generate new random numbers" << endl;
      cout << "$./main prog=1" << endl;
      cout << "  Testing the index table" << endl;
      cout << "$./main prog=20..21" << endl;
      cout << "  Testing the circular buffer array." << endl;
      cout << "$./main prog=3" << endl;
      cout << "  Testing the dumbarray which essentially is an array of pointers." << endl;
      cout << "$./main prog=4" << endl;
      cout << "  More dumbarray testing." << endl;

      cout << "$./main prog=13..14" << endl;
      cout << "  Test the functional object classes." << endl;
      cout << "$./main prog=15..18  - Testing commandline" << endl;
      cout << "$./main prog=15  - " << commandlinetest::doc[1] << endl;
      cout << "$./main prog=16  - " << commandlinetest::doc[2] << endl;
      cout << "$./main prog=17  - " << commandlinetest::doc[3] << endl;
      cout << "$./main prog=18  - " << commandlinetest::doc[4] << endl;
      cout << "$./main prog=19  - " << commandlinetest::doc[5] << endl;

      cout << "$./main prog=35  - print for displaying containers." << endl;
      cout << "$./main prog=36  - printing an STL set." << endl;

      cout << "$./main prog=40  - " << tokenizertest::doc[0] << endl;
      cout << "$./main prog=41  - " << tokenizertest::doc[1] << endl;
      cout << "$./main prog=42  - " << tokenizertest::doc[2] << endl;
      cout << "$./main prog=43  - " << tokenizertest::doc[3] << endl;
      cout << "$./main prog=44  - " << tokenizertest::doc[4] << endl;
      cout << "$./main prog=45  - " << tokenizertest::doc[5] << endl;
      cout << "$./main prog=46  - " << tokenizertest::doc[6] << endl;
      cout << "$./main prog=47  - " << tokenizertest::doc[7] << endl;
      cout << "$./main prog=48  - " << tokenizertest::doc[8] << endl;
      cout << "$./main prog=49  - " << tokenizertest::doc[9] << endl;
      cout << "$./main prog=50  - " << tokenizertest::doc[10] << endl;
      cout << "$./main prog=51  - " << tokenizertest::doc[11] << endl;
      cout << "$./main prog=52  - " << tokenizertest::doc[12] << endl;
      cout << "$./main prog=53  - " << tokenizertest::doc[13] << endl;
      cout << "$./main prog=54  - " << tokenizertest::doc[14] << endl;

      cout << "$./main prog=61  - " << stringtagparsertest::doc[1] << endl;
      cout << "$./main prog=62  - " << stringtagparsertest::doc[2] << endl;
      cout << "$./main prog=63  - " << stringtagparsertest::doc[3] << endl;
      cout << "$./main prog=64  - " << stringtagparsertest::doc[4] << endl;
      cout << "$./main prog=65  - " << stringtagparsertest::doc[5] << endl;

      cout << "$./main prog=70  - " << messagetest::doc[1] << endl;
      cout << "$./main prog=71  - " << messagetest::doc[2] << endl;
      cout << "$./main prog=72  - " << messagetest::doc[3] << endl;

      cout << "$./main prog=80  - " << stringserializationtest::doc[1] << endl;
      cout << "$./main prog=81  - " << stringserializationtest::doc[2] << endl;
      cout << "$./main prog=82  - " << stringserializationtest::doc[3] << endl;
      cout << "$./main prog=83  - " << stringserializationtest::doc[4] << endl;
      cout << "$./main prog=84  - " << stringserializationtest::doc[5] << endl;
 
      cout << "$./main prog=90  - " << stringconverttest::doc[0] << endl;
      break;

    case 1: indextabletest01(); break;

    case 3: dumbarraytest01(); break;
    case 4: dumbarraytest02(); break;
    case 35: printtest::test01(); break;
    case 36: printtest::test02(); break;
    case 7: dumbarraytest03(); break;
    case 13: fnobjtest01(); break;
    case 14: fnobjtest02(); break;
    case 15: commandlinetest::test01(argc,argv); break;
    case 16: commandlinetest::test02(argc,argv); break;
    case 17: commandlinetest::test03(argc,argv); break;
    case 18: commandlinetest::test04(argc,argv); break;
    case 19: commandlinetest::test05(); break;

    case 20: cirbuffarrtest01(); break;
    case 21: cirbuffarrtest02(); break;
    case 22: singletontest01(); break;

    case 30: array2Dtest01(); break;

    case 40: tokenizertest().test00(); break;
    case 41: tokenizertest().test01(); break;
    case 42: tokenizertest().test02(); break;
    case 43: tokenizertest().test03(); break;
    case 44: tokenizertest().test04(); break;
    case 45: tokenizertest().test05(); break;
    case 46: tokenizertest().test06(); break;
    case 47: tokenizertest().test07(); break;
    case 48: tokenizertest().test08(); break;
    case 49: tokenizertest().test09(); break;
    case 50: tokenizertest::test10(); break;
    case 51: return tokenizertest::unittest01();
    case 52: return tokenizertest::unittest02();
    case 53: return tokenizertest::unittest03();
    case 54: return tokenizertest::unittest04();

    case 61: stringtagparsertest::test01(); break;
    case 62: stringtagparsertest::test02(); break;
    case 63: return stringtagparsertest::unittest01();
    case 64: stringtagparsertest::test03(); break;
    case 65: stringtagparsertest::test04(); break;
    case 66: return stringtagparsertest::unittest02();

    case 70: messagetest().test01(); break;
    case 71: messagetest().test02(); break;
    case 72: messagetest().test03(); break;

    case 80: stringserializationtest::test01(); break;
    case 81: stringserializationtest::test02(); break;
    case 82: stringserializationtest::test03(); break;
    case 83: stringserializationtest::test04(); break;
    case 84: return stringserializationtest::unittest01();

    case 90: return stringconverttest::unittest01();

    default: cout << "error:  No case handled." << endl; return 1;
  }

  return 0;
}



