Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/network/src/network/diffTest.cc @ 1088

Last change on this file since 1088 was 1088, checked in by dumenim, 16 years ago

catched some return values

File size: 23.3 KB
Line 
1#include "enet/enet.h"
2#include "Orxonox.h"
3#include "NetworkPrereqs.h"
4#include "PacketTypes.h"
5#include "GameStateManager.h"
6#include "Synchronisable.h"
7#include "GameStateClient.h"
8#include "iostream"
9#include "core/CoreIncludes.h"
10#include "time.h"
11#include "ConnectionManager.h"
12#include "ClientInformation.h"
13#include <boost/thread/thread.hpp>
14#include <boost/bind.hpp>
15#include "util/Sleep.h"
16
17using namespace network;
18
19void printData( unsigned char* data, int length ) {
20  for ( int i=0; i<length; i++ )
21    std::cout << (int)data[i] << " ";
22  std::cout << std::endl;
23}
24
25void printGameStateCompressed( GameStateCompressed* gc ) {
26  //std::cout << "=================================================" << std::endl;
27  std::cout << "GameStateCompressed id:\t\t" << gc->id << std::endl;
28  std::cout << "GameStateCompressed normsize:\t" << gc->normsize << std::endl;
29  std::cout << "GameStateCompressed compsize:\t" << gc->compsize << std::endl;
30  std::cout << "GameStateCompressed diffed:\t" << gc->diffed << std::endl;
31  //std::cout << "GameState data:\t" << gc->data << std::endl;
32  std::cout << "GameStateCompressed compressing rate:\t" << 100.0-((100.0/(gc->normsize))*(gc->compsize)) << "%" << std::endl;
33  std::cout << "=================================================" << std::endl;
34  return;
35}
36
37bool compareData( GameState* g1, GameState* g2 ) {
38  if ( g1->id != g2->id ) {
39    std::cout << "\t--> GameStates are not comparable -> not same id" << std::endl;
40    return true;
41  }
42  else if ( g1->size != g2->size ) {
43    std::cout << "\t--> GameStates are not the same size!!" << std::endl;
44    std::cout << g1->size << " != " << g2->size << std::endl;
45  }
46  int length = g1->size;
47  for ( int i=0; i<length; i++ ) {
48    if ( g1->data[i] != g2->data[i] ) {
49      std::cout << "\t--> data of both GameStates are not identical" << std::endl;
50      return false;
51    }
52  }
53  //std::cout << "\t--> GameData are identical (compareData)" << std::endl;
54  return true;
55}
56
57bool compareData2( GameState* g1, GameState* g2 ) {
58  int length = g1->size;
59  for ( int i=0; i<length; i++ ) {
60    if ( g1->data[i] != g2->data[i] ) {
61      return false;
62    }
63  }
64  //std::cout << "\t--> GameData are identical (compareData)" << std::endl;
65  return true;
66}
67
68bool compareGameStates( GameState* g1, GameState* g2 ) {
69  if ( g1->id != g2->id ) {
70    std::cout << "\t==> GameState id's not identical (GameStateCompare)" << std::endl;
71  }
72  if( g1->size != g2->size ) {
73    std::cout << "\t==> GameState sizes are not identical (GameStateCompare)" << std::endl;
74    return false;
75  }
76  else if ( g1->diffed != g2->diffed ) {
77    std::cout << "\t==> GameState diffed params not identical (GameStateCompare)" << std::endl;
78    return false;
79  }
80  else if ( !compareData2( g1, g2 ) ) {
81    std::cout << "\t==> GameState data are not identical (GameStateCompare)" << std::endl;
82    return false;
83  }
84  //std::cout << "\t==> GameStates are identical (GameStateCompare)" << std::endl;
85  return true;
86}
87
88void printGameState( GameState* gstate ) {
89  //std::cout << "=================================================" << std::endl;
90  std::cout << "GameState id:\t\t" << gstate->id << std::endl;
91  std::cout << "GameState size:\t\t" << gstate->size << std::endl;
92  std::cout << "GameState diffed:\t" << gstate->diffed << std::endl;
93  //std::cout << "GameState data:\t" << gstate->data << std::endl;
94  std::cout << "=================================================" << std::endl;
95  return;
96}
97
98unsigned char* createData( int length, int mode ) {
99  char* data = new char[ length ];
100  if ( mode == 1 ) {
101    for ( int i=0; i<length; i++ )
102      data[i] = (char)(i%255);
103  }
104  else if ( mode == 2 ) {
105    for ( int i=0; i<length; i++ ) {
106      if ( i%98 == 0 ) data[i] = (char)(i%255);
107      else data[i] = (char)0;
108    }
109  }
110  else if ( mode == 3 ) {
111    for ( int i=0; i<length; i++ ){
112      data[i] = (char)(rand()%255);
113    }
114  }
115  else if ( mode == 4 ) {
116    for ( int i=0; i<length; i++ ){
117      data[i] = (char)(rand()%127);
118    }
119  }
120
121  //printData( data, length ); 
122
123  unsigned char* dat = (unsigned char*)data;
124  return dat;
125}
126
127GameState* changeGameStateABit( GameState* a, int mode ) {
128  int length = a->size;
129  GameState* b = new GameState;
130  b->id = a->id;
131  b->diffed = a->diffed;
132
133  if ( mode == 1 ) {
134    b->data = new unsigned char[length];
135    b->size = a->size;
136    for ( int i=0; i<length; i++ ) {
137      if ( i%10 == 0 ) b->data[i] = rand()%255;
138      else b->data[i] = a->data[i];
139    }
140  }
141  else if ( mode == 2 ) {
142    b->data = new unsigned char[length];
143    b->size = length;
144    for ( int i=0; i<length; i++ ) {
145      if ( i%(rand()%((length)/11)+rand()) == 0 ) b->data[i] = (char)rand()%255;
146      else b->data[i] = a->data[i];
147    }
148  }
149  else if ( mode == 3 ) {
150    int s = length + (rand()%(length));
151    b->data = new unsigned char[s];
152    b->size = s;
153    for ( int i=0; i<length; i++ ) {
154      if ( i%10 == 0 ) b->data[i] = (char)rand()%255;
155      else b->data[i] = a->data[i];
156    }
157    for( int i=length; i<s; i++ ) {
158      b->data[i] = (char)rand()%255;
159    }
160  }
161  else if ( mode == 4 ) {
162    int s = length + (rand()%(length));
163    b->data = new unsigned char[s];
164    b->size = s;
165    for ( int i=0; i<length; i++ ) {
166      if ( i%(rand()%(length)+rand()) == 0 ) b->data[i] = (char)rand()%255;
167      else b->data[i] = a->data[i];
168    }
169    for( int i=length; i<s; i++ ) {
170      b->data[i] = rand()%255;
171    }
172  }
173    else if ( mode == 5 ) {
174    int s = (length)/2;
175    b->data = new unsigned char[s];
176    b->size = s;
177    for ( int i=0; i<s; i++ ) {
178      if ( i%10 == 0 ) b->data[i] = (char)rand()%255;
179      else b->data[i] = a->data[i];
180    }
181  }
182
183  return b;
184}
185
186void testCompression( int size, int mode ) {
187  std::cout << "testing compression with: size = " << size << " ,mode = " << mode << std::endl; 
188  GameStateClient* g_client;
189  GameStateManager* g_manager;;
190 
191  GameState* g_new = new GameState;
192  GameState* g_old = new GameState;
193  GameStateCompressed* gc = new GameStateCompressed;
194 
195  g_old->data = createData( size, mode );
196  g_old->size = size;
197  g_old->id = 0;
198  g_old->diffed = false;
199  printGameState( g_old );
200 
201  gc = g_manager->testCompress( g_old );
202  printGameStateCompressed( gc );
203
204  g_new = g_client->testDecompress( gc );
205  printGameState( g_new );
206
207  compareGameStates( g_new, g_old );
208
209  return;
210}
211
212void testDifferentiation( int size, int modeCreateData, int modeChangeData ) {
213  std::cout << "testing diff with: size = " << size << " modeCreateData = " 
214            << modeCreateData << " modeChangeData = " << modeChangeData << std::endl; 
215  GameStateClient* g_client;
216  GameStateManager* g_manager;
217 
218  GameState* g_undiff1 = new GameState;
219  GameState* g_undiff2 = new GameState;
220  GameState* g_diffed;
221  GameState* g_result;
222
223  g_undiff1->data = createData( size, modeCreateData );
224  g_undiff1->size = size;
225  g_undiff1->id = 1;
226  g_undiff1->diffed = false;
227  printGameState( g_undiff1 );
228
229  g_undiff2 = changeGameStateABit( g_undiff1, modeChangeData );
230  printGameState( g_undiff2 );
231
232  if( !compareData( g_undiff1, g_undiff2 ) ) std::cout << " BUT THAT'S HOW IT HAS TO BE" << std::endl;
233
234  //printData( g_undiff1->data, g_undiff1->size );
235  //printData( g_undiff2->data, g_undiff2->size );
236 
237  g_diffed = g_manager->testDiff( g_undiff1, g_undiff2 );
238  printGameState( g_diffed );
239  //printData( g_diffed->data, g_diffed->size );
240 
241  g_result = g_client->testUndiff( g_undiff1, g_diffed );
242  compareGameStates( g_result, g_undiff2 );
243
244  return;
245}
246
247void testCompressWithDiff( int size, int modeCreateData, int modeChangeData ) {
248  std::cout << "testing CompressWithDiff with: size = " << size << " modeCreateData = " 
249            << modeCreateData << " modeChangeData = " << modeChangeData << std::endl; 
250  GameStateClient* g_client;
251  GameStateManager* g_manager;;
252 
253  GameStateCompressed* gc = new GameStateCompressed;
254  GameStateCompressed* g_compressedNoDiff;
255  GameState* g_undiff1 = new GameState;
256  GameState* g_undiff2 = new GameState;
257  GameState* g_diffed;
258  GameState* g_resultDiffed;
259  GameState* g_resultUndiffed;
260
261  g_undiff1->data = createData( size, modeCreateData );
262  g_undiff1->size = size;
263  g_undiff1->id = 1;
264  g_undiff1->diffed = false;
265 
266  std::cout << "---First generated Gamestate" << std::endl;
267  printGameState( g_undiff1 );
268
269  g_undiff2 = changeGameStateABit( g_undiff1, modeChangeData );
270  std::cout << "---First gererated Gamestate with some changes ev. longer" << std::endl;
271  printGameState( g_undiff2 ); 
272
273  if( !compareData( g_undiff1, g_undiff2 ) ) std::cout << " DATA not identical.. ok" << std::endl;
274
275  g_diffed = g_manager->testDiff( g_undiff1, g_undiff2 );
276  std::cout << "---Diffed Gamestate not compressed" << std::endl;
277  printGameState( g_diffed );
278
279  gc = g_manager->testCompress( g_diffed );
280  std::cout << "---Diffed Gamestate compressed" << std::endl;
281  printGameStateCompressed( gc );
282
283  g_compressedNoDiff = g_manager->testCompress( g_undiff2 );
284  std::cout << "---Same not Diffed Gamestate compressen" << std::endl;
285  printGameStateCompressed( g_compressedNoDiff ); 
286
287  g_resultDiffed = g_client->testDecompress( gc );
288  std::cout << "---Diffed Gamestate of above uncompressed" << std::endl;
289  printGameState( g_resultDiffed );
290
291  std::cout << "---Diffed Gamestates before compressed and after uncompress comparsion" << std::endl;
292  if ( compareGameStates( g_resultDiffed, g_diffed ) ) std::cout << "GAMESTATES IDENTICAL" << std::endl;
293 
294  g_resultUndiffed = g_client->testUndiff( g_undiff1, g_resultDiffed );
295  std::cout << "---New Gamestate of pseudo Server compared with new gamestate that Client gets" << std::endl;
296  if ( compareGameStates( g_resultUndiffed, g_undiff2 ) ) std::cout << "GAMESTATES IDENTICAL" << std::endl;
297
298  return; 
299}
300
301bool testNCompressWithDiff( int n, int size, int modeCreateData, int modeChangeData ) { 
302
303  GameStateClient* g_client;
304  GameStateManager* g_manager;;
305 
306  GameStateCompressed* gc = new GameStateCompressed;
307  GameState* g_undiff1 = new GameState;
308  GameState* g_undiff2 = new GameState;
309  GameState* g_diffed;
310  GameState* g_resultDiffed;
311  GameState* g_resultUndiffed;
312
313  g_undiff1->data = createData( size, modeCreateData );
314  g_undiff1->size = size;
315  g_undiff1->id = 1;
316  g_undiff1->diffed = false;
317  //l = -1;
318  g_undiff2 = changeGameStateABit( g_undiff1, modeChangeData );
319
320  while( compareData2( g_undiff1, g_undiff2 ) ) {
321    delete g_undiff2->data;
322    g_undiff2 = changeGameStateABit( g_undiff1, modeChangeData );
323  } 
324  //l = -2;
325  g_diffed = g_manager->testDiff( g_undiff1, g_undiff2 );
326  gc = g_manager->testCompress( g_diffed );
327  g_resultDiffed = g_client->testDecompress( gc );
328
329  if ( !compareGameStates( g_resultDiffed, g_diffed ) ) return false;
330  //l = -3;
331  g_resultUndiffed = g_client->testUndiff( g_undiff1, g_resultDiffed );
332  if ( !compareGameStates( g_resultUndiffed, g_undiff2 ) ) return false;
333  //l = 1;
334  /*if ( gc != NULL && gc->data != NULL )
335    delete gc->data;
336  //l = 2;
337  //if ( gc != NULL )
338    //delete gc;
339  //l = 3;
340  if ( g_undiff1 != NULL && g_undiff1->data != NULL )
341    delete g_undiff1->data;
342  //l = 4;
343  //if ( g_undiff1 != NULL )
344   //delete g_undiff1;
345  //l = 5;
346  if ( g_undiff2 != NULL && g_undiff2->data )
347    delete g_undiff2->data;
348  //l = 6;
349  //if ( g_undiff2 != NULL )
350    //delete g_undiff2;
351  //l = 7;
352  if ( g_diffed != NULL && g_diffed->data )
353    //delete g_diffed->data;
354  //l = 8;
355  //if ( g_diffed )
356    //delete g_diffed;
357  //l = 9;
358  if ( g_resultDiffed != NULL && g_resultDiffed->data )
359    delete g_resultDiffed->data;
360  //l = 10;
361  //if ( g_resultDiffed )
362    //delete g_resultDiffed;
363  //l = 11;*/
364 
365  return true;
366}
367
368bool testNCompression( int n, int size, int mode ) { 
369  GameStateClient* g_client;
370  GameStateManager* g_manager;;
371 
372  GameState* g_new = new GameState;
373  GameState* g_old = new GameState;
374  GameStateCompressed* gc = new GameStateCompressed;
375 
376  g_old->data = createData( size, mode );
377  g_old->size = size;
378  g_old->id = 0;
379  g_old->diffed = false;
380 
381  gc = g_manager->testCompress( g_old );
382
383  g_new = g_client->testDecompress( gc );
384
385  if ( !compareGameStates( g_new, g_old ) ) return false;
386 
387 
388  if ( g_new != NULL && g_new->data != NULL )
389    delete g_new->data;
390
391  if ( g_old != NULL && g_old->data != NULL )
392    delete g_old->data;
393
394  if ( gc != NULL && gc->data )
395    delete gc->data;
396
397  return true;
398}
399
400void printClientObjectMapping( ConnectionManager* cmanager, int clients ) {
401  std::map<int, int>::iterator iter;
402  std::map<int, int> clientsmap = cmanager->testGetClientsShip();   
403  for( iter = clientsmap.begin(); iter != clientsmap.end(); iter++ ) {
404    std::cout << "clientID: " << iter->first << "\t-> objectID: " << iter->second << std::endl;
405  }
406  return;
407}
408
409bool is( int a[], int b, int size ) {
410  for ( int i=0; i<size; i++ ) {
411    if ( a[i] == b ) return true;
412  }
413  return false;
414}
415
416void testClientObjectMapping( int clients ) {
417  ConnectionManager* cmanager = new ConnectionManager();
418  int shift = 2;
419  std::cout << "create a map length [clients]" << std::endl;
420  for ( int i=0; i<clients; i++ ) {
421    cmanager->testAddClientsShipID( i, i+shift );
422  }
423  printClientObjectMapping( cmanager, clients );
424 
425  std::cout << "get random client's ship id" << std::endl;
426  int id;
427  for ( int i=0; i<(clients/3); i++ ) {
428    id = rand()%clients;
429    std::cout << "client: " << id << "\t-> ship: " << cmanager->testGetClientsShipID( id ) << std::endl; 
430  }
431
432  std::cout <<"get random ship's client id" << std::endl;
433  for ( int i=0; i<(clients/3); i++ ) {
434    id = (rand()%clients)+shift;
435    std::cout << "ship:   " << id << "\t-> client: " << cmanager->testGetObjectsClientID( id ) << std::endl; 
436  }
437
438  std::cout << "delete random client from map" << std::endl;
439  int deleted[clients/3];
440  for ( int i=0; i<(clients/3); i++ ) {
441    id = rand()%clients;
442    if ( !is( deleted, id, clients/3 ) ) {
443      std::cout << "delete client " << id << std::endl;
444      cmanager->testDeleteClientsIDReg( id ); 
445    }
446    deleted[i] = id;
447  }
448  std::cout << "resulting list:" << std::endl;
449  printClientObjectMapping( cmanager, clients-(clients/3));
450 
451  std::cout << "delete random object from map" << std::endl;
452  int jap = 0;
453  while( jap < 3 ) {
454    id = (rand()%clients) + shift;
455    if ( !is( deleted, id, clients/3 ) ) {
456      std::cout << "delete object: " << id << std::endl;
457      cmanager->testDeleteObjectIDReg( id );
458      jap++;
459    }
460  }
461  std::cout << "resulting list:" << std::endl;
462  printClientObjectMapping( cmanager, clients-(clients/3)-3);
463}
464
465bool addClientTest( ENetEvent* event, ClientInformation*& head ) {
466  ClientInformation *temp = head->insertBack(new ClientInformation);
467  if(temp->prev()->head) {
468    temp->prev()->setID(0);
469    temp->setID(1);
470  }
471  else
472    temp->setID(temp->prev()->getID()+1);
473  temp->setPeer(event->peer);
474  std::cout << "added client id: " << temp->getID() << std::endl;
475
476  temp->setSynched(true);
477  return true;
478}
479
480void printClientInformationBox( ClientInformation* box ) {
481  std::cout << "ClientList: id: " << box->getID() << "\t";
482  std::cout << "g_id: " << box->getGamestateID() << " \t";
483  std::cout << "synched: " << box->getSynched() << "\t";
484  std::cout << "is head: " << box->head << std::endl;
485}
486
487void printClientInformationList( ClientInformation* list ) {
488  printClientInformationBox( list );
489  list = list->next();
490 
491  while( list != 0 ) {
492    printClientInformationBox( list );
493    list = list->next();
494  }
495  return;
496}
497
498void testClientInformation( int numberOfClients ) {
499  ClientInformation* head = new ClientInformation( true );
500  ConnectionManager* connectionManager;
501  ENetEvent event;
502 
503  for ( int i=0; i<numberOfClients; i++ ) {
504    if ( !addClientTest( &event, head ) ) {
505      std::cout << "addClientTest didn't work with: " << i << std::endl;
506    }
507  }
508  std::cout << "(now id should be synched, since that works and this is test of list, this step is left out)" << std::endl;
509
510  printClientInformationList( head );
511
512  std::cout << "remove some clients" << std::endl;
513  if ( head->removeClient( numberOfClients/3 ) ) std::cout << "client " << numberOfClients/3 << " removed" << std::endl;
514  else std::cout << "could not remove client: " << numberOfClients/3 << std::endl;
515  if ( head->removeClient( numberOfClients ) ) std::cout << "client " << numberOfClients << " removed" << std::endl;
516  else std::cout << "could not remove client: " << numberOfClients << std::endl;
517  if ( head->removeClient( 1 ) ) std::cout << "client " << 1 << " removed" << std::endl;
518  else std::cout << "could not remove client: " << 1 << std::endl;
519  if ( head->removeClient( 1 ) ) std::cout << "client " << 1 << " removed a second time" << std::endl;
520  else std::cout << "could not remove client: " << 1 << std::endl;
521  if ( head->removeClient( numberOfClients + 100 ) ) std::cout << "client " << numberOfClients + 100 << " removed a second time" << std::endl;
522  else std::cout << "could not remove client: " << numberOfClients + 100 << std::endl;
523
524  printClientInformationList( head );
525 
526  std::cout << "try to find some clients with findClient(..., false)" << std::endl;
527  ClientInformation* temp = head->findClient( 2 );
528  printClientInformationBox( temp );
529  temp = head->findClient( numberOfClients/3 );
530  printClientInformationBox( temp );
531  temp = head->findClient( 0 );
532  printClientInformationBox( temp );
533  temp = head->findClient( 8 );
534  printClientInformationBox( temp );
535
536  std::cout << "find the same, output should be identical with above but with findClient(..., TRUE)" << std::endl;
537  temp = head->findClient( 2, true );
538  printClientInformationBox( temp );
539  temp = head->findClient( numberOfClients/3, true );
540  printClientInformationBox( temp );
541  temp = head->findClient( 0, true );
542  printClientInformationBox( temp );
543  temp = head->findClient( 8, true );
544  printClientInformationBox( temp );
545
546  std::cout << "test setGamestateID" << std::endl;
547  temp->setGamestateID( 8 );
548  printClientInformationBox( temp );
549
550  std::cout << "test insertAfter() and insertBefore()" << std::endl;
551  ClientInformation* newInfo = new ClientInformation;
552  ClientInformation* toool = new ClientInformation;
553  newInfo->setGamestateID( 200 );
554  newInfo->setID( numberOfClients+2);
555  newInfo->setSynched( true );
556  newInfo->setPeer( NULL );
557  toool->setGamestateID( 199 );
558  toool->setID( numberOfClients+1);
559  toool->setSynched( true );
560  toool->setPeer( NULL );
561
562  //never use the same ClientInformation box in this situation
563  //-> results in endless loop
564  temp->insertAfter( newInfo );
565  temp->insertBefore( toool );
566
567  printClientInformationList( head );
568  return;
569}
570
571//### following stuff is to test buffer, took from PacketBufferTestExt.cc ###
572
573void write(PacketBuffer *test){
574  ENetEvent event;
575  ENetPacket *packet;
576  if(test->isEmpty())
577    std::cout << "buffer is empty" << std::endl;
578  for(int i=0; i<10; i++){
579    std::string temp = "packet ";
580    packet = enet_packet_create("packet", strlen("packet ")+1,
581      ENET_PACKET_FLAG_RELIABLE);
582    std::cout << i << ": pushing " << packet->data << std::endl;
583    event.packet=packet;
584    test->push(&event);
585    if(i==5)
586      usleep(200000);
587  }
588  test->setClosed(true);
589  return;
590}
591
592void read(PacketBuffer *test){
593  //test->print();
594  // exit if the queue is closed and empty
595  while(!test->isClosed() || !test->isEmpty()){
596    // only pop if the queue isn't empty
597    while(!test->isEmpty()){
598      std::cout << "We popped the value " << test->pop()->data << std::endl;
599    }
600  }
601  return;
602}
603
604void testPacketBuffer() {
605  PacketBuffer test = PacketBuffer();
606  boost::thread thrd1(boost::bind(&write, &test));
607  boost::thread thrd2(boost::bind(&read, &test));
608
609  thrd1.join();
610  thrd2.join();
611  return;
612}
613
614//### end packetbuffer test stuff ###
615
616void displayModes() {
617  std::cout << "mode datalength: length of data array to create" << std::endl;
618  std::cout << "mode Data:" << std::endl;
619  std::cout << "\t-1 -> array[length] with numbers length%255" << std::endl;
620  std::cout << "\t-2 -> array[length] with numbers length%255, every %98 is != 0" << std::endl;
621  std::cout << "\t-3 -> array[length] with random numbers (-126:127) no modulo zeros" << std::endl;
622  std::cout << "\t-4 -> array[length] with random numbers (0:127) no modulo zeros" << std::endl;
623  std::cout << "---------------------------------------------------------------------------------" << std::endl;
624  std::cout << "mode Change:" << std::endl;
625  std::cout << "\t-1 -> every %10 == 0 index is different from original" << std::endl;
626  std::cout << "\t-2 -> every %(rand()%(length/11)) is different from original" << std::endl;
627  std::cout << "\t-3 -> every %10 == 0 index is different and randomly longer till 2xlonger" << std::endl;
628  std::cout << "\t-4 -> random differences and randomly longer" << std::endl;
629  std::cout << "\t-5 -> only half as long and ever %10 == 0 index is different" << std::endl;
630}
631
632int main( int argc, char* argv[] ) {
633  int a,b,c,n;
634  std::string dec = "nothing";
635  std::cout << "############### START TEST (quit q) ###############" << std::endl;
636  std::cout << "possible tests: " << std::endl;
637  std::cout << "displayModes:\t\t modes" << std::endl;
638  std::cout << "testCompression:\t tc [datalength] [mode Data]" << std::endl;
639  std::cout << "testNCompression:\t tnc [#of loops] [datalength] [mode Data]" << std::endl;
640  std::cout << "testDifferentiation:\t td [datalength] [mode Data] [mode Change]" << std::endl;
641  std::cout << "testCompressWithDiff:\t tcd [datalength] [mode Data] [mode Change]" << std::endl;
642  std::cout << "testNCompressWithDiff:\t tncd [#of loops] [datalength] [mode Data] [mode Change]" << std::endl;
643  std::cout << "testClientObjectMapping: tcom [#clients]" << std::endl;
644  std::cout << "testClientInformation:\t tci [#clients] (call with >10)" << std::endl;
645  std::cout << "testPacketBuffer:\t tbuf (comment address assignements in PacketBuffer.cc!)" << std::endl;
646  while ( dec.compare("q") != 0 ) {
647    std::cin >> dec;
648    if ( dec.compare("tc") == 0 ) {
649      std::cin >> a; std::cin >> b;
650      testCompression( a, b );
651    }
652    else if ( dec.compare("td") == 0 ) {
653      std::cin>> a; std::cin >> b; std::cin >> c;
654      testDifferentiation( a, b, c );
655    }
656    else if ( dec.compare("tcd") == 0 ) {
657      std::cin>> a; std::cin >> b; std::cin >> c;
658      testCompressWithDiff( a, b, c );
659    }
660    else if ( dec.compare("modes") == 0 )
661      displayModes();
662    else if ( dec.compare("tcom") == 0 ) {
663      std::cin>> a;
664      testClientObjectMapping( a );
665    }
666    else if ( dec.compare("tci") == 0 ) {
667      std::cin >> a;
668      testClientInformation( a );
669    } 
670    else if ( dec.compare("tbuf") == 0 ) {
671      testPacketBuffer();
672    } 
673    else if ( dec.compare("tncd") == 0 ) {
674      std::cin >> n; std::cin >> a; std::cin >> b; std::cin >> c;
675      for ( int i=1; i<=n; i++ ) { 
676        std::cout << i << " s" << a << " ";     
677        //std::cout << "start loop test " << i << std::endl;
678        if ( !testNCompressWithDiff( i, a, b, c ) ) {
679          std::cout << "#COMPARSION ERROR->VERYVERY BAD" << std::endl;
680          break;
681        }
682      }
683      std::cout << "end loop comparsion test" << std::endl;
684    }
685    else if ( dec.compare("tnc") == 0 ) {
686      std::cin >> n; std::cin >> a; std::cin >> b;
687      for ( int i=1; i<=n; i++ ) { 
688        std::cout << i << " s" << a << " ";     
689        //std::cout << "start loop test " << i << std::endl;
690        if ( !testNCompression( i, a, b ) ) {
691          std::cout << "#COMPARSION ERROR->VERYVERY BAD" << std::endl;
692          break;
693        }
694      }
695      std::cout << "end loop comparsion test" << std::endl;
696    }
697    else std::cout << "invalid input" << std::endl; 
698    std::cout << "################## END ONE TURN ##################@" << std::endl;
699  }
700  return 0;
701}
702/**
703int main() {
704  std::cout << "############### START TEST (quit q) ###############" << std::endl;
705  testClientInformation( 10 );
706}*/
Note: See TracBrowser for help on using the repository browser.